AWS IAM Policy:只标记未标记的资源



我们有一个AWS用户,他应该能够Create不同的资源,如Instances, VolumesSecurityGroups,但不能修改不属于其项目的资源。

为此目的,我们允许创建资源,并让用户CreateTags使用Project标记和<user's team name here>值来创建资源。他不应该能够标记已经标记的资源,而不是其他团队的资源。(每个单独的资源在这里都有适当的标记)。

我创建了一个策略,语句:

[...]
    {
        "Effect": "Allow",
        "Action": "ec2:CreateTags",
        "Resource": "*",
        "Condition": {
            "Null": {
                "ec2:ResourceTag/Project": "true"
            }
        }
    }
[...]

如果我使用AWS的策略模拟器,我允许在没有Project标记的资源上调用CreateTags。如果我通过设置Project标记来模拟它,则该操作如预期的那样是拒绝

不幸的是,如果我对此策略使用AWS CLI中的相同操作,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)

正如你所看到的,它两次都有效,并且它也适用于已经设置了标签的foreign Projects。

我也试过

        "Condition": {
            "StringNotLike": {
                "ec2:ResourceTag/Project": "*"
            }
        }

它的行为完全类似于"Null"条件,即使在策略模拟器中也是如此。

你有什么想法吗?

Amazon EC2部分支持资源级权限。在撰写本文时,CreateTags操作不支持资源级权限。您可以在这里看到支持资源级权限的操作列表。

您可以通过更改策略来指定StopInstances(它支持资源级权限)来代替CreateTags来验证这一点。如果实例没有有Project标签,您的IAM用户将只能停止EC2实例。或者,如果您将Null条件更改为false,那么IAM用户将只能在实例确实具有Project标记时才能停止EC2实例。

因此,当CreateTags支持资源级权限时,您的策略可能在将来的某个时刻是正确的。

相关内容

  • 没有找到相关文章

最新更新