AWS ABAC入门

背景知识

关于什么是ABAC,以及和RBAC的比较可以看AWS的官方介绍,当然如果对RBAC不太了解的话,可以看看Wikipedia解释,需要更深入理解的话,还可以看看类似这种疑问角色和用户组的区别,本文我们就不深入探讨这些理论知识.

站在企业用户的角度,ABAC相对于RBAC而言,最直接的一个好处就是:能极大的降低权限配置的复杂度. 特别那些公司内部本来就有CMP的企业客户,在没有上云前就维护了一套资源,人员,权限的对应关系.如果有了ABAC就只要把mapping关系照搬到云上就可以了,这对于这类客户而言,几乎不用改变原来的管理模式.也是云”被集成”很大的一个好处.

痛点是什么

当用户使用Role-based权限体系的时候,有个比较麻烦的问题是很难做资源层面的分权.举个例子,有个角色叫devops,这个有ECS的全部权限. 这时候如果想区分张三有A,B机器的权限,李四有C,D机器的权限.就只能建好几个角色出来.当机器和人员超过一定数量后,维护这个多对多的关系简直就是噩梦. ABAC就是来解决这种policy膨胀的问题的.

Screen Shot 2022-06-20 at 09.36.52

准备工作

创建IAM用户

User Name Tag Comment
dev-zhang-a team=dev1,product=app1 开发工程师
dev-zhang-b team=dev1,product=app2 开发工程师
test-wang-a team=test1,product=app1 测试工程师
test-wang-b team=test1,product=app2 测试工程师

创建Policy

access-same-product-team

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
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllActionsSecretsManagerSameProjectSameTeam",
"Effect": "Allow",
"Action": "secretsmanager:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/product": "${aws:PrincipalTag/product}",
"aws:ResourceTag/team": "${aws:PrincipalTag/team}"
}
}
},
{
"Sid": "AllResourcesSecretsManagerNoTags",
"Effect": "Allow",
"Action": [
"secretsmanager:GetRandomPassword",
"secretsmanager:ListSecrets"
],
"Resource": "*"
}
]
}

某些 Secrets Manager 操作不支持该tag,包括 GetRandomPasswordListSecrets.所以需要创建额外语句才能允许这些操作.

并将此策略attach到上面创建出来的4个IAM User上.

创建测试资源

AWS Secrets Manager中创建测试密钥:

User Name Tag
dev/app1/key1 team=dev1,product=app1
dev/app2/key1 team=dev1,product=app2

用账号dev-zhang-a登录后,会发现有dev/app1/key1的权限,但是没有dev/app2/key1 权限