Node.js 通过NodeJS SDK(AWS SDK js)访问AWS SQS被拒绝(突然!!)

Node.js 通过NodeJS SDK(AWS SDK js)访问AWS SQS被拒绝(突然!!),node.js,access-denied,aws-sdk-js,Node.js,Access Denied,Aws Sdk Js,首先,我知道现在也有类似的问题。我也 我想让你知道我已经发现了问题所在。 只是想与其他可能正在寻找解决方案的人分享解决方案 为了解决同样的问题。。。不,它不是复制品 话题 几天前,我的NodeJS脚本突然停止使用AWS SQS Access to the resource https://sqs.us-west-2.amazonaws.com/ is denied. 但有趣的是,当我使用适当的配置文件通过aws cli测试SQS时,它成功了 我花了很多时间搜索并试图找到解决方案。。。Stack

首先,我知道现在也有类似的问题。我也 我想让你知道我已经发现了问题所在。 只是想与其他可能正在寻找解决方案的人分享解决方案 为了解决同样的问题。。。不,它不是复制品 话题

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

Access to the resource https://sqs.us-west-2.amazonaws.com/ is denied.
但有趣的是,当我使用适当的配置文件通过aws cli测试SQS时,它成功了

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

剧透警报好吧,最后,问题其实与错误的凭证有关。但我们这边什么都没有改变,怎么可能呢?

我发现类似的问题在-我开始玩IAM的政策,但没有改变



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

好的,那么发生了什么

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

在我的例子中,我在
.aws/credentials
中有几个配置文件,而我的默认配置文件不是具有完全访问权限的配置文件。如果您的默认配置文件具有管理员访问策略,则此问题与您无关

我将配置文件中的配置文件用于aws cli,而不是脚本。在我的脚本中,我使用环境变量AWS\u ACCESS\u KEY\u ID和AWS\u SECRET\u ACCESS\u KEY

你现在看到问题了吗在更改SDK之前,它是有效的,因为SDK首先选择了环境变量。但由于SDK中的某些逻辑已经更改,所以它从配置文件中选择了默认概要文件。正如我之前写的,我的默认配置文件无法访问SQS

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

荣耀属于SDK