IAM强制标签策略失效:EBS卷未按要求限制创建
排查IAM策略未按预期生效的问题
我来帮你梳理下这个策略的问题所在,你的核心需求是拒绝创建未同时携带empname和team标签的EBS卷,但当前策略的逻辑和语法都存在错误,导致不符合预期的操作被允许:
一、当前策略的核心错误
1. Condition逻辑完全倒置,ForAllValues用法错误
你使用的ForAllValues:StringNotLike条件,实际含义是:**请求中所有的empname标签值都不匹配任意字符串(即完全没有empname标签),且所有的team标签值都不匹配任意字符串(即完全没有team标签)**时,才触发Deny。
但你的需求是「只要缺少其中一个标签就拒绝」,而不是「两个标签都缺失才拒绝」。这就导致当用户创建带其他标签(比如只带department)的EBS卷时,这个条件不满足,Deny不触发,操作被允许。
2. aws:TagKeys条件语法错误且逻辑不符
你的策略中aws:TagKeys的条件未写完(缺少闭合的]}),属于语法错误,AWS解析时会忽略这个无效条件。即便写完,ForAllValues:StringEquals要求请求的所有标签键必须恰好是empname和team,不允许添加其他标签,这也不符合你「允许带其他标签,只要同时有两个必填标签即可」的需求。
二、修正后的正确策略
要实现「未同时携带empname和team标签则拒绝创建」的需求,我们需要用Null条件检查标签是否存在,并通过OR逻辑实现「缺少任意一个标签就拒绝」的效果,同时确保策略语法正确:
{ "Version": "2012-10-17", "Statement": [ // 先允许合法的创建操作(IAM默认拒绝所有,必须显式允许) { "Sid": "AllowCreateVolume", "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "arn:aws:ec2:us-east-1:axxxxxxxxxxx:volume/*" }, // 拒绝缺少必填标签的创建操作 { "Sid": "DenyCreateVolumeWithoutRequiredTags", "Effect": "Deny", "Action": "ec2:CreateVolume", "Resource": "arn:aws:ec2:us-east-1:axxxxxxxxxxx:volume/*", "Condition": { "OR": [ { "Null": { "aws:RequestTag/empname": true } }, { "Null": { "aws:RequestTag/team": true } } ] } } ] }
三、策略逻辑说明
Null: {"aws:RequestTag/empname": true}:表示请求中不存在empname标签时,该条件成立OR逻辑:只要empname或team任意一个标签缺失,就触发Deny操作- 先Allow后Deny:IAM的权限判断顺序是「先检查所有Deny策略,再检查Allow策略」,所以这条策略会优先拒绝不符合标签要求的操作,允许符合要求的操作(包括带其他额外标签的情况)
内容的提问来源于stack exchange,提问作者serverstackqns
相关产品推荐
相关产品推荐

