AWS IAM 策略:仅标记未标记的资源
AWS IAM Policy: Tag only untagged resources
我们有一个 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
标签来模拟它,该操作将如预期的那样 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 支持资源级权限时,您的策略可能会在将来的某个时候正确。
我们有一个 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
标签来模拟它,该操作将如预期的那样 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 支持资源级权限时,您的策略可能会在将来的某个时候正确。