AWS IAM显式拒绝规则中是否可针对特定EBS卷设置例外?
关于IAM显式拒绝规则排除指定EBS卷资源的问题解答
结论
你设计的「在显式拒绝规则中通过多条件逻辑排除指定资源」的思路本身是成立的,但当前的代码写法存在问题,无法达到预期效果。
具体原因
- 条件键使用错误
你当前使用的aws:ResourceTag/Name是用于校验已存在资源上绑定的标签的条件键,而ec2:CreateVolume是创建新资源的操作,资源尚未生成时该条件键对应的标签值不存在,该条件会直接判定为不满足,最终导致整条拒绝规则完全不生效,所有未加密的EBS卷都可以被创建。 - 正确的条件键选择
如果需要校验创建EBS卷请求中携带的标签,应该使用aws:RequestTag/Name条件键,调整后的策略如下:
{ "Sid": "DenyCreationOfUnencryptedEBSVOL", "Effect": "Deny", "Action": "ec2:CreateVolume", "Resource": "*", "Condition": { "Bool": { "ec2:Encrypted": "false" }, "StringNotLike": { "aws:RequestTag/Name":"*Test_Unencrypted*" } } }
额外注意事项
- 上述规则仅在创建EBS卷时请求中携带了Name标签的场景下生效:如果用户创建未加密EBS卷时未携带任何Name标签,
aws:RequestTag/Name不存在,会导致StringNotLike条件不满足,拒绝规则不会触发,未加密卷会被允许创建。 - 如果需要避免上述漏洞,可以额外增加一条IAM策略,要求所有EBS卷创建时必须携带Name标签,避免绕开限制。
- 该规则仅限制创建环节,如果你允许用户创建完未加密卷后再补充
Test_Unencrypted标签,该规则无法拦截这类操作。
内容的提问来源于stack exchange,提问作者DeclanG
相关产品推荐
相关产品推荐

