如何创建AWS组织SCP:缺少任一必填标签时禁止EC2实例创建
AWS Organization SCP 解决EC2实例必填标签校验问题
你当前的SCP策略无法满足“任一必填标签缺失即阻止创建”的需求,原因是Condition中的Null条件默认采用逻辑AND关系——只有当Department和Name两个标签同时缺失时,才会触发Deny操作。要实现“任一缺失即阻止”的逻辑,需要使用ForAnyValue:Null条件运算符,或者用OR逻辑组合两个独立的Null判断。
正确的SCP策略代码
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyEC2CreationWithoutRequiredTags", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "ForAnyValue:Null": { "aws:RequestTag/Department": "true", "aws:RequestTag/Name": "true" } } } ] }
策略逻辑说明
- 使用
ForAnyValue:Null运算符:只要指定的标签键中有任意一个不存在(即值为Null),就会触发Deny条件,完全符合你“任一必填标签缺失即阻止操作”的要求。 - 资源范围保持
arn:aws:ec2:*:*:instance/*,精准针对EC2实例创建操作。 - 由于SCP仅支持Deny/Allow(你提到不能用Allow),这里通过Deny规则直接拦截不符合标签要求的创建请求,符合SCP的权限控制逻辑。
也可以用另一种写法,显式使用OR逻辑组合两个Null条件,效果完全一致:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyEC2CreationWithoutRequiredTags", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "Or": [ { "Null": { "aws:RequestTag/Department": "true" } }, { "Null": { "aws:RequestTag/Name": "true" } } ] } } ] }
内容的提问来源于stack exchange,提问作者Alakananda S
相关产品推荐
相关产品推荐

