amazon-web-services - 同时担任多个 IAM 角色如何工作?
问题描述
我有一个 ECS 任务使用任务角色访问同一账户 A 中的 DynamoDB 表。它还需要访问不同账户 B 中的 DynamoDB 表,这是通过代入 IAM 角色授予的。
我的理解是,在担任该角色之后,该任务现在为每个角色都有一组临时凭证。这允许任务使用新凭证向账户 B 的表发出请求,同时仍使用原始凭证向账户 A 的表发出请求。
假设这是正确的,那么用于给定请求的信用是如何确定的?是否只使用跨账户角色发出账户 B 请求,以及账户 A 请求的原始凭据?
如果还需要访问账户 B S3 存储桶,并且权限已授予账户 A,然后将其授予原始任务角色怎么办?代入跨账户角色后,跨账户 S3 请求是否会因为代入角色没有 S3 权限而失败,即使原来的 take 角色有?
解决方案
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 来做一些非常相似的事情。它将替换那里的令牌。
也完全可以将您的令牌保存为命令可以使用的配置文件,然后为每个命令指定您用于该命令的配置文件。
推荐阅读
- python - 在python中从整个图像中检测表格部分
- keyboard-shortcuts - 使用 Karabiner-Elements 将应用程序键映射到插入符号位置的右键单击
- c - 在 C/C++ 中获取函数内部的函数地址?
- angular - Ace Editor 的 Brace 包装器中的自定义模式
- java - 更改 json 对象值
- html - 如何链接文件和文件夹,以便如果我删除一个,两个都被删除
- c++ - 如何检查无符号字符向量是否包含所有空字符
- python - 比较列表中的值是否大于 X
- java - 只有当 Pageable = unpaged 时,Hibernate 重复才会导致 Spring JPA 查询
- angular - 无法使用我的 Angular 应用在 Spring Boot 中启用 CORS