amazon-web-services - 多个账户的 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();
很高兴得到一些指导和尝试的东西,我对这个有点不知所措,因为我的用户帐户一直存在于主帐户中并且我一直能够运行代码,直到我被添加到管理员角色/组。提前感谢您的帮助!
解决方案
当您从 CLI 运行时,它会承担账户 2 中的角色。
当您运行代码时,它使用来自帐户 1 的凭据(不承担角色)。
我认为(不是 100% 肯定)在~.aws/config
文件中担任角色的能力是 AWS CLI 的一项功能,但不是通过普通 AWS 开发工具包使用凭证的一项功能。
因此,您的代码将需要专门承担 Account 2 中的角色,然后使用返回的凭据调用 Account 2 中的服务。
推荐阅读
- c++ - 如何在没有现有数据库的情况下缩短现有 C++ 代码
- c# - 在 C# 解决方案中查找并指示未引用的公共属性
- javascript - 当我尝试在 firebase 上部署反应应用程序时,npm run build 返回错误
- javascript - 如果使用如何隐藏
}> 在本机反应 - azure - Azure 托管应用程序上的 FB.ui 共享弹出窗口:此 URL 的域不包含在应用程序的域中
- reactjs - React Gatsby Graph QL - 过滤站点地图的文章
- php - 数组中的三元运算符
- node.js - 指定未知的 buildpack 名称:“sdk-for-nodejs”在 IBM 云中
- wordpress - WordPress 中的 index.php 文件已被修改(由 Wordfence 检测到)
- javascript - 如何在角度捕获模式下触发点击功能