如何链接 AWS IAM AssumeRole API 调用?

gen*_*ood 5 amazon-ec2 amazon-web-services amazon-iam

有许多我无法控制的 AWS 账户。我已经让账户所有者将 IAM 角色 , 部署TrustingSecurityAuditor到他们的账户中,这授予了TrustingSecurityAuditor在我的 AWS 账户中担任不同 IAM 角色的角色的权利TrustedSecurityAuditor。(关于委派访问的文档

这非常有效,并允许我和我的安全团队为公司中的其他账户持有人提供安全审计服务。为此,我们启动了一个具有TrustedSecurityAuditorIAM 角色的 ec2 实例,我们的代码通过对每个账户的角色执行 an来使用STS从每个账户请求临时凭证。AssumeRoleTrustingSecurityAuditor

现在我想在我的账户中创建一个在不同 ec2 实例上运行的附加服务,它不仅可以承担这些“信任”账户的角色,还可以在我的账户中做其他事情,比如访问我账户的 DynamoDB 来存储信息。

如果我将该TrustedSecurityAuditor角色应用到实例,则我没有所需的本地权限(如 DynamoDB 访问权限)。

我不能将多个 IAM 角色应用于一个实例(除非我弄错了)。

当我尝试创建一个新角色时MyNewService,使用 DynamoDB 访问可以访问AssumeRoleTrustedSecurityAuditor角色,希望然后使用这些 STS 凭据对外部帐户中AssumeRoleTrustingSecurityAuditor角色进行第二次操作,我遇到了这个问题:

我能够AssumeRoleMyNewService角色到TrustedSecurityAuditor角色,但是当我做第二AssumeRoleTrustingSecurityAuditor角色AWS返回错误

用户:arn:aws:sts::123456789012:assumed-role/TrustedSecurityAuditor/MyNewService 无权执行:sts:AssumeRole 资源:arn:aws:iam::123456789012:role/TrustingSecurityAuditor

这样做的原因是“用户”尝试的AssumeRole

arn:aws:sts::123456789012:assumed-role/TrustedSecurityAuditor/MyNewService

不是

arn:aws:sts::123456789012:assumed-role/TrustedSecurityAuditor

这意味着您不能链接您的AssumeRoles,因为调用源自的 ARN,当它来自代入角色时,不仅仅是代入角色,而是代入角色,代入者的角色名称卡在最后。

我不愿意使用的一种解决方案是,我可以只添加我需要的权限,例如将 DynamoDB 用于TrustedSecurityAuditor角色的能力。我不情愿的原因是我只需要MyNewService实例的这个权限,而不是我的原始实例,它只做安全审计,不需要访问 DynamoDB。

任何建议如何完成我正在寻找的东西?

Joh*_*ley 2

设想:

  • 帐户A - 您的帐户
  • AccountB - 客户帐户
  • RoleA - 您用于访问 DynamoDB、调用 STS 等的账户角色。
  • RoleB - AccountB 中的 TrustedSecurityAuditor 角色

您将需要管理两组凭据。凭证 A 根据分配给 EC2 实例的 IAM 角色创建。使用这些凭证来访问您的资源,例如 DynamoDB。凭证 B 通过 STS 从 RoleB 创建。使用这些凭据来访问您的客户资源。

然后,您需要根据您想要执行的操作独立使用凭据。例如,如果您使用 Python,您将创建两个具有不同凭据的 boto3 客户端。