通过 NodeJS SDK (aws-sdk-js) 访问 AWS SQS 被拒绝(突然!!)

Access denied to AWS SQS via NodeJS SDK (aws-sdk-js) (SUDDENLY!!)

First of all, I know there are similar questions here at SO. Also I want to let you know I have already found out what the problem was. Just want to share the solution with others who is potentially looking for the solution of the same problem... And no, it's not a duplicate topic.

几天前,我的 NodeJS 脚本突然停止使用 AWS SQS!

Access to the resource https://sqs.us-west-2.amazonaws.com/ is denied.

但有趣的是,当我使用适当的配置文件通过 aws-cli 测试 SQS 时,它成功了!

我花了很多时间搜索并试图找到解决方案... Whosebug 上其他程序员的典型问题(例如 here)非常明显:错误的 IAM 策略或错误的凭据。但是几天前一切都对我有用,而不是现在?!这让我发疯。

剧透警告! 好吧,最后,问题真的出在错误的凭据上。但是我们这边什么都没有改变怎么可能呢?

我在 AWS Developer forum 发现了类似的问题 - 我开始使用 IAM 策略但没有改变。


好的,发生了什么事? 看下面我的回答

好的,发生了什么事?

2018 年 10 月 17 日左右,您可以在 aws-sdk-js 提交历史中找到 "Feature/load shared config"。这是一个版本 v2.337.0+。我没有阅读代码,但似乎从那个时候(和版本)开始,获取 AWS 凭证的优先级发生了变化。在此之前,环境变量似乎比配置文件具有更高的优先级。但现在不是了!这是什么意思?

嗯,就我而言,我在 .aws/credentials 中有多个配置文件,而我的默认配置文件不是具有完全访问权限的配置文件。如果您的默认配置文件具有 AdministratorAccess 策略,则此问题与您无关!

我在 aws-cli 的配置文件中使用了配置文件,而不是脚本。在我的脚本中,我使用环境变量 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY.

你现在看到问题了吗? 在改SDK之前是可以的,因为SDK先选择了环境变量。但是由于 SDK 中的一些逻辑发生了变化,它从配置文件中选择了默认配置文件。正如我之前所写,我的默认配置文件无法访问 SQS!

所以,我的解决方案是从配置文件中删除(重命名)默认配置文件。而且因为没有默认配置文件了,SDK又开始使用我的环境变量了。

SDK 的荣耀!