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

AWS IAM Policy: Tag only untagged resources

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

为此,我们允许创建资源,并让用户 CreateTags 他的资源带有 Project 标签和 <user's team name here> 的值。他不应该能够标记已经标记的资源,所以不能标记其他团队的资源。 (每个资源都在这里正确标记)。

我已经创建了一个策略声明:

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

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

不幸的是,如果我通过此策略使用 AWS CLI 中的相同操作,CreateTags 每次都是 allowed。即使标签已经设置,甚至在外部实例上,用户也不应该能够修改:

作为具有上述政策的用户

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" 条件完全一样,即使在策略模拟器中也是如此。

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

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

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

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