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

时间:2018-10-26 08:34:47

标签: node.js access-denied aws-sdk-js

  

首先,我知道SO有类似的问题。我也是   想让您知道我已经发现问题所在了。   只想与有潜在需求的其他人分享解决方案   对于相同问题的解决方案...不,不是重复的   主题。

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

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

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

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

扰流板警报! 好,最后,问题确实出在错误的凭证上。但是,如果我们这边什么都没改变,怎么可能呢?

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


好吧,发生了什么事? 在下面查看我的答案

1 个答案:

答案 0 :(得分:1)

好吧,发生了什么事?

在2018年10月17日左右,您可以在aws-sdk-js提交历史记录中找到“功能/加载共享配置”。它是v2.337.0 +版本。我没有读过代码,但自那时起(和版本)看来,获取AWS凭证的优先级已经改变。在此之前,似乎环境变量比配置文件具有更高的优先级。但是现在不再了!什么意思?

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

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

您现在看到问题了吗? 在更改SDK之前,它可以工作,因为SDK首先选择了环境变量。但是由于SDK中的某些逻辑已更改,因此它从配置文件中选择了默认配置文件。正如我之前写的,我的默认个人资料无法访问SQS!

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

荣耀到SDK!