Why User Assume Role for Multiple AWS Account#
For big Organization, it is always a bad idea to maintain multiple IAM User in different AWS Account representing the same Person. Because it makes it harder to track activity / cost did by the same person, and also managing multiple sensitive credential may greatly increase the probability of leaking. In addition, assume-role makes it easy to switch between multiple AWS Account, instead of typing credentials.
如何为 Cross Account Access 创建一个 Assume Role#
注意 本节摘抄于官方文档, 只是用来学习和快速了解. 该设置不适合于生产环境. 最佳实践请参考 Implement Assume Role Correctly 这篇文档.
创建一个 IAM Role, 在 Select type of trusted entity 中选择 Another AWS Account, 并填入你当前的 AWS Account Id (12位数字)
Attach 对应的 Policy, 这些 Policy 会成为你想模拟的 IAM User 的 Policy.
给这个 IAM Role 一个名字, 里面最好包含 Assume Role, 以表示其功能.
在 Console 的右上角点击自己的 Account, 选择 Switch Role, 填入你的 AWS Account Id 和 Policy Name (你刚才起的名字). 此时你在 Console 中的权限就跟 Assume Role 中的一样了.
如果要切换回来, 在 Console 右上角点击自己的 Account, 选择 back to xxx 即可.
如果要使用 CLI, 请参考官方文档 https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html, 简单来说就是将你的
$HOME/.aws/credentials
文件修改成如下样子, 然后在你的 Cli 中加上--profile my_iam_user_assume_role
选项, 或是在 SDK 中加上boto3.Session(profile_name="my_iam_user_assume_role")
即可:[original_iam_user_profile] aws_access_key_id = AAAAAAAAAAAAAAAAAAAA aws_secret_access_key = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA [my_iam_user_assume_role] role_arn = arn:aws:iam::123456789012:role/my-assume-role source_profile = original_iam_user_profile
FAQ#
Q: 为什么要禁止 IAM User 创建其他 IAM User?
A: 因为作为公司, 公司需要管理用户创建 IAM User 的行为, 并使用 IAM User 来追踪用户的使用行为. 如果允许用户自行创建其他的 IAM User, 那么公司就很难追踪这些新创建的 IAM User. 这叫做 preventing cascade creation.
Q: 如果我需要使用其他的 IAM User 进行测试该怎么做? 我可能需要同时使用 Console 和 Cli. 比如我需要使用一个 Machine User 进行项目的 Deploy, 我需要知道这个 Machine User 所需要的最小权限是什么, 所以我需要一个 IAM User 进行测试.
A: 你可以使用 Assume Role 的方式, 创建一个 IAM Role, 用来模拟 IAM User 的权限, 然后在 Console 和 Cli 中 Assume 这个 Role 进行测试.
Q: 使用 Assume Role 的好处?
A: 不用频繁的登录切换 IAM User, 减少管理 ACCESS KEY 的麻烦.