首页 > 解决方案 > 同时担任多个 IAM 角色如何工作?

问题描述

我有一个 ECS 任务使用任务角色访问同一账户 A 中的 DynamoDB 表。它还需要访问不同账户 B 中的 DynamoDB 表,这是通过代入 IAM 角色授予的。

我的理解是,在担任该角色之后,该任务现在为每个角色都有一组临时凭证。这允许任务使用新凭证向账户 B 的表发出请求,同时仍使用原始凭证向账户 A 的表发出请求。

假设这是正确的,那么用于给定请求的信用是如何确定的?是否只使用跨账户角色发出账户 B 请求,以及账户 A 请求的原始凭据?

如果还需要访问账户 B S3 存储桶,并且权限已授予账户 A,然后将其授予原始任务角色怎么办?代入跨账户角色后,跨账户 S3 请求是否会因为代入角色没有 S3 权限而失败,即使原来的 take 角色有?

标签: amazon-web-servicesamazon-iam

解决方案


AWS 资源不能只是自己承担角色。他们必须被告知这样做,并使用您选择的 SDK(或 CLI)来这样做。一旦你了解了它是如何工作的,它就会变得更加清楚它是如何工作的。既然你提到了 ec2 实例,我将使用 CLI 来展示这个

AcctCredentials=($(aws sts assume-role --role-arn "$1" --role-session-name TheSessionName --query '[Credentials.AccessKeyId,Credentials.SecretAccessKey,Credentials.SessionToken]' --output text))
unset AWS_SECURITY_TOKEN
echo "Security Tokens for Cross Account Access received"
export AWS_ACCESS_KEY_ID=${AcctCredentials[0]}
echo $AWS_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=${AcctCredentials[1]}
export AWS_SESSION_TOKEN=${AcctCredentials[2]}
export AWS_SECURITY_TOKEN=${AcctCredentials[2]}

这样做,您将 ec2 中的 env 变量设置为这些新凭据。这意味着任何其他 CLI 命令运行或从与此相同的 shell 启动的任何脚本都将使用这些凭据。

如果您需要返回之前的凭据,您将需要重置/保存之前的凭据,或者退出运行此命令的 shell 并返回到您的默认凭据。

但是,如果这是在 lambda 中,那么您可能正在使用 Python 和 Boto3 来做一些非常相似的事情。它将替换那里的令牌。

也完全可以将您的令牌保存为命令可以使用的配置文件,然后为每个命令指定您用于该命令的配置文件。


推荐阅读