很多AWS客户都会管理多个不同的AWS账号,比如之前提到的不同的开发环境、测试环境、生产环境等都各分配不同的账号。这样子他们可以对不同类型的账号赋予不同等级和类型的权限,可以在账号和权限的安全性上有更好的控制。
那么一般情况下,一个开发者使用开发环境做了一些变更后希望登录到测试环境去做一些系统的测试,那么他必须注销他的账号,然后使用另外的用户名密码登录到测试账号。这样的复杂操作有时候对开发来说简直是个噩梦。
有了跨账号访问权限(Cross Account Access),你可以在AWS管理控制台上轻松地进行账号(角色)的切换,让你在不同的开发账号(角色)、测试账号(角色)、生产账号(角色)中进行快捷的切换。
开发账号和生产账号的切换
假设一个公司里面有两种账号,生产账号和开发账号。开发账号中的用户有时候需要访问生产账号中的资源,比如将开发环境的代码推送到生产环境中等。
如下图所示,我们可以让开发账号拥有一定的访问权限,让其访问生产账号中的S3资源。
- 生产账号中的管理员需要在IAM中创建一个新的角色UpdateAPP,在角色中定义了策略(Policy),策略具体定义了允许特定的AWS账号ID访问名为productionapp的S3存储桶。需要使用以下策略:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::productionapp"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::productionapp/*"
}
]
}
- 在开发账户中,管理员向开发人员组的成员授权切换角色的权限。向开发人员组授予针对UpdateApp角色调用AWS Security Token Service (AWS STS) AssumeRole API 的权限。需要添加如下策略:
1
2
3
4
5
6
7
8
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::PRODUCTION-ACCOUNT-ID:role/UpdateApp"
}
}
- 用户请求切换角色
- 可以在AWS控制台使用Switch Role的按钮切换到生产账号
- 或者使用AWS API/CLI,使用AssumeRole函数获取UpdateAPP角色的凭证
- AWS STS返回临时凭证
- 临时凭证允许访问AWS资源,这样切换后的角色就可以访问productionapp的存储桶里的内容了。