我们有一个AWS用户,他应该能够Create不同的资源,如Instances、Volumes和SecurityGroups,但不能修改不属于其项目的资源。
为此,我们允许创建资源,并让用户CreateTags使用Project标记和<user's team name here>值的资源。他不应该能够标记已经标记的资源,因此,不能标记其他团队的资源。(每个资源在这里都有正确的标记)。
我制定了一项政策,并声明:
[...]
{
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "*",
"Condition": {
"Null": {
"ec2:ResourceTag/Project": "true"
}
}
}
[...]如果我使用AWS的策略模拟器,允许在没有Project标记的资源上调用CreateTags。如果我通过设置一个Project标记来模拟它,这个操作就是拒绝,就像预期的那样。
不巧的是,如果我在此策略中使用来自AWS的相同操作,那么每次CreateTags都是允许的。即使已经设置了标记,即使在外部实例上,用户也不应该能够修改:
作为具有上述策略的用户
aws ec2 create-security-group --group-name "test-sg" --description "test" # creation of a new resource
(AWS answer){
"GroupId": "sg-4a3151aa"
}。
aws ec2 create-tags --resources sg-4a31513c --tags Key=Project,Value=web-performance # this should work, ResourceTag Project is Null
(success)
aws ec2 create-tags --resources sg-4a31513c --tags Key=Project,Value=web-performance # should *not* work, ResourceTag Project is already set and not Null
(success)正如您所看到的,它两次工作,在已经设置标记的外国项目上也有效。
我也试过了
"Condition": {
"StringNotLike": {
"ec2:ResourceTag/Project": "*"
}
}这与"Null“条件完全一样,即使在策略模拟器中也是如此。
你有什么想法吗?提前谢谢。
发布于 2015-09-03 13:08:46
Amazon部分支持资源级权限.在编写本报告时,CreateTags操作执行而不是支持资源级别的权限。您可以看到支持资源级权限这里的操作列表。
您可以通过更改策略来验证这一点,以指定StopInstances (它支持资源级权限)来代替CreateTags。您的IAM用户只有在实例没有项目标记的情况下才能停止EC2实例。或者,如果将Null条件更改为false,则IAM用户只能在实例具有Project的情况下才能停止EC2实例。
因此,当CreateTags支持资源级权限时,您的策略可能在将来的某个时候是正确的。
https://stackoverflow.com/questions/32374789
复制相似问题