无法访问 Amazon SQS - InvalidClientTokenId
Posted
技术标签:
【中文标题】无法访问 Amazon SQS - InvalidClientTokenId【英文标题】:Can't access Amazon SQS - InvalidClientTokenId 【发布时间】:2016-04-20 12:21:13 【问题描述】:我在 AWS 中设置了一个 SQS 队列。我可以使用 AWS CLI 和我设置的 IAM 凭证完美地发送和接收消息。
我想做的是使用 Camel 从队列中消费消息,通过 Spring 配置。我尝试了这个例子,因为它非常明确和重点:
https://github.com/christian-posta/camel-sqs-example
但是,我得到以下异常:
com.amazonaws.AmazonServiceException: Status Code: 403, AWS Service: AmazonSQS,
AWS Request ID: 115057f8-3c4f-5ec6-8fe9-18ea097b2730, AWS Error Code:
InvalidClientTokenId, AWS Error Message: The security token included in the
request is invalid.
亚马逊提供了最无用的文档:
InvalidClientTokenId
我们的记录中不存在提供的 X.509 证书或 AWS 访问密钥 ID。
HTTP 状态码:403
我已仔细检查,我使用的 IAM 凭证与我通过 CLI 使用的凭证完全相同,并且 IAM 用户具有允许对队列进行读/写访问的策略。我还尝试将附加的 URL 参数 accessKey、secretKey、amazonSQSEndpoint 和 region 发送为 documented by Camel .
为什么亚马逊说访问密钥无效或在他们的记录中不存在,我该如何解决我的请求?
【问题讨论】:
运气好能解决这个问题吗? 对不起,这是不久前的事了,我最终弄明白了。应该更新这个帖子。不记得确切的解决方案是什么,但我记得除了 ReceiveMessage 和 DeleteMessage 权限外,Camel 还需要 GetQueueUrl、ListQueues 和 ChangeMessageVisibility。这可能是这个问题的解决方案,或者它可能是完全不同的解决方案。希望这会有所帮助。 【参考方案1】:当遇到这样的情况时,有两种方法可以解决这个问题。
选项 1:检查 ~/.aws/credentials 文件中的凭据,其中访问密钥和密钥可能存在错误。出错的可能性很小,但有可能发生。
选项 2:为 IAM 用户提供必要的权限,并检查问题是否被重新创建。如果是您自己的 AWS 账户,请提供AmazonSQSFullAccess
并执行您的工作。从这个意义上说,您不会轻易遇到任何权限问题。另请查看link,其中提到了用户使用 AWS SQS 所需的最低权限集。
由于响应的状态码是 403(禁止),这肯定与授权有关。我知道我的答案会在两年后出现,但我曾经遇到过类似的问题,并且成功了。
【讨论】:
【参考方案2】:我对此问题的解决方案是正确配置 ~/.aws/credentials 文件
打开一个 bash 脚本并运行
sudo nano ~/.aws/credentials
在 [default] 下插入您的 IAM 访问密钥 ID 和秘密访问密钥 ID。确保您的 IAM 角色拥有使用 SQS 的权限。
对于 AWS Educate 账户,您还必须在此文件中配置 aws_session_token。登录 vocareum 并在“您的 AWS 账户状态”下找到两个按钮:账户详细信息和 AWS 控制台。单击帐户详细信息并在 AWS CLI 附近单击显示。在“默认”下的凭证文件中复制访问权限、密钥 ID 和 aws 会话令牌,您就完成了。
附加说明:请务必正确配置您的本地时区。 在 Debian 上:
sudo apt-get install ntp
sudo systemctl enable ntp
sudo systemctl start ntp
如果您的时间和日期仍然不正确,请尝试:
dpkg-reconfigure tzdata
然后重启你的机器
【讨论】:
以上是关于无法访问 Amazon SQS - InvalidClientTokenId的主要内容,如果未能解决你的问题,请参考以下文章
是否有提供 Amazon SQS 高可用性的 FIFO 消息队列服务?