ruby AWS SDK 使用了错误的凭证

ruby AWS SDK using wrong credentials

我在使用 AWS SDK 时遇到了一个小问题。

我在 EC2 机器上使用 AWS SDK 来提取我需要的有关我们服务的数据。

我通过秘密和 ID 密钥向它传递凭据,但是当它尝试提取我想要的数据时,它使用的是分配给盒子的 IAM 角色,而不是凭据。

事实是,这在我们的一个环境中工作得很好,但在这个环境中表现不同,这是怎么回事?

最新的 Ruby SDK 按以下顺序检查凭据:

static_credentials -> env_credentials -> shared_credentials -> instance_profile_credentials

因此,如果您使用的是静态凭据,应该没问题,但如果您将密钥和机密导出为 ENV 变量,请确保 none 已经使用不同的名称设置。

SDK 按以下顺序查找环境变量:

AWS_ACCESS_KEY_ID -> AMAZON_ACCESS_KEY_ID -> AWS_ACCESS_KEY
AWS_SECRET_ACCESS_KEY -> AMAZON_SECRET_ACCESS_KEY -> AWS_SECRET_KEY
AWS_SESSION_TOKEN -> AMAZON_SESSION_TOKEN

通过执行以下操作,确保同时导出 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY:

export AWS_ACCESS_KEY_ID=ASIAXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

多年来,密钥的顺序和名称发生了多次变化,因此如果您的环境是 运行 不同版本的 SDK,那么您遇到问题也就不足为奇了。如果您无法更新到最新的 SDK,也许 try taking a look at the SDK source 以查看您使用的版本的评估顺序。