无法访问 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 参数 accessKeysecretKeyamazonSQSEndpointregion 发送为 documented by Camel .

为什么亚马逊说访问密钥无效或在他们的记录中不存在,我该如何解决我的请求?

【问题讨论】:

运气好能解决这个问题吗? 对不起,这是不久前的事了,我最终弄明白了。应该更新这个帖子。不记得确切的解决方案是什么,但我记得除了 ReceiveMessage 和 DeleteMessage 权限外,Camel 还需要 GetQueueUrl、ListQueues 和 ChangeMes​​sageVisibility。这可能是这个问题的解决方案,或者它可能是完全不同的解决方案。希望这会有所帮助。 【参考方案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 延迟队列

是否有提供 Amazon SQS 高可用性的 FIFO 消息队列服务?

Amazon SQS 死信队列:真的是死信还是毒药?

Amazon MQ 和 SQS 有啥区别?

以 SQS 队列为目标的 CloudWatch 事件无法工作

SimpleMessageListenerContainer Amazon SQS Pollinterval