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

Posted

技术标签:

【中文标题】AWS IAM 政策:仅标记未标记的资源【英文标题】:AWS IAM Policy: Tag only untagged resources 【发布时间】:2015-11-29 05:43:52 【问题描述】:

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

为此,我们允许创建资源并让用户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 每次都允许。即使标签已经设置,甚至在外部实例上,用户也不应该能够修改:

作为具有上述政策的用户

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": "*"
            
        

即使在策略模拟器中,它的行为也与“空”条件完全相同。

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

【问题讨论】:

您是否针对 EC2 实例而不是安全组尝试过此操作?看看该政策是否适用于这种情况会很有趣。 @jarmod 是的,行为完全相同。 【参考方案1】:

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

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

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

【讨论】:

以上是关于AWS IAM 政策:仅标记未标记的资源的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 SCP 保护 AWS 标记的资源?

AWS IAM 政策问题

AWS EC2 启动/停止实例的 IAM 策略

IAM 政策不允许 EC2 访问

AWS 政策评估

如何重命名 AWS 客户 IAM 策略?