首页 > 解决方案 > 多个账户的 AWS AssumeRole 账户 ID 问题

问题描述

我最近接手了一名 DevOps 员工,陷入了困境,并且在运行任何与 AWS 交互的代码时遇到了麻烦。在最基本的级别上发生的变化是,我已被添加到管理员角色,在我们的主帐户 ID 下,没有泄露它,让我们假设它是 111111。我之前运行过代码(NodeJS / NestJS),它从以下位置检索 AWS 参数存储条目一个 ID 为 222222 的帐户(我们的开发帐户),没有问题。但是,现在尝试运行代码时出现以下错误:

用户:arn:aws:iam::111111:user/my.account 无权执行:ssm:GetParameters on resource:arn:aws:ssm:us-west-2:111111:parameter/platform/master/hostname with明确否认

在我的 ~/.aws/config 文件中,我特别说:

[default]
role_arn = arn:aws:iam::222222:role/DeveloperRestrictedRole
source_profile = mfa_creds
region = us-west-2
output = json

[profile my_profile]
role_arn = arn:aws:iam::222222:role/DeveloperRestrictedRole
source_profile = mfa_creds
region = us-west-2
output = json

在 ~/.aws/credentials 文件中,我指定了 mfa_creds 部分。

当我从命令提示符运行以下命令时,它可以工作。因此,看起来问题在于代码没有选择正确的帐户 ID,即使它是在配置文件中指定的。以下命令从命令行工作:

aws ssm get-parameter --name "/platform/master/hostname"

此命令也有效:

aws ssm get-parameter --name "/platform/master/hostname" --profile my_profile

已经搜索了代码库,并且在代码中找不到帐户 ID,所有配置项都自动从 AWS 参数存储中提取,初始化为:

AwsConfig.update({ region: "us-west-2" }); this.ssm = new SSM();

很高兴得到一些指导和尝试的东西,我对这个有点不知所措,因为我的用户帐户一直存在于主帐户中并且我一直能够运行代码,直到我被添加到管理员角色/组。提前感谢您的帮助!

标签: amazon-web-servicesamazon-iam

解决方案


当您从 CLI 运行时,它会承担账户 2 中的角色。

当您运行代码时,它使用来自帐户 1 的凭据(不承担角色)。

我认为(不是 100% 肯定)在~.aws/config文件中担任角色的能力是 AWS CLI 的一项功能,但不是通过普通 AWS 开发工具包使用凭证的一项功能。

因此,您的代码将需要专门承担 Account 2 中的角色,然后使用返回的凭据调用 Account 2 中的服务。


推荐阅读