AWS IAM策略:仅标记未标记的资源

时间:2015-09-03 11:48:57

标签: amazon-web-services amazon-iam

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

为此,我们允许创建资源,并让用户CreateTags使用Project标记和值<user's team name here>来覆盖其资源。他不应该能够标记已经标记的资源,因此不能标记其他团队的资源。 (这里正确标记了每个资源)。

我创建了一个带声明的政策:

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

如果我使用AWS的策略模拟器,我允许在没有CreateTags标记的资源上调用Project。 如果我通过设置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)

正如您所看到的,它可以同时工作,也适用于已设置标记的外国项目。

我也尝试了

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

这与“Null”条件完全相同,即使在策略模拟器中也是如此。

你有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

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