除了常见的AWS资源外,AWS的用户和Role上面都是可以打Tag的:
在policy的condition字段中,经常能看到ResourceTag
和PrincipalTag
关键字,它们的区别如下:
aws:PrincipalTag
: 对象是用户或roleResourceTag
:对象是AWS资源,如EC2这两个关键字看介绍比较模糊,举个例子比较明晰:
上面的policy定义,只有具有Department = Data
标签的用户或角色
,才能访问Project = DataAnalytics
的EC2实例
使用PrincipalTag
,可以实现Attribute-Based Access Control
。
假设每个用户都具有CostCenter
标签,它们只能访问匹配标签的EC2,例如CostCenter=B
的用户只能访问CostCenter=B
标签的EC2
结合PrincipalTag
和ResourceTag
可以简化策略的管理:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/CostCenter": "${aws:PrincipalTag/CostCenter}"
}
}
}
]
}
这样未来即使有新的标签增加,我们也不用再更改这条policy。
所以Attribute-Based Access Control
相比于Role-Based Access Control (RBAC)
,优势在于它可以自动匹配,当新的资源被创建时,不用再更新policy。