You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何部分AWS SCP策略不生效?EC2标签校验SCP失效排查

SCP3失效原因及修复方案

失效原因

你的SCP3使用的ForAllValues:StringNotEquals条件逻辑和预期需求完全相反:

  • ForAllValues:StringNotEquals的生效逻辑是:仅当请求中所有标签键都不在指定列表(ENV、OwnerContact)内时,才触发Deny操作。
  • 换句话说,只要请求里带了任意一个属于列表内的标签键(比如只带了ENV),这个条件就不满足,不会执行Deny,所以即使缺少OwnerContact标签,也能成功创建EC2实例。

修复后的SCP3策略

要实现「必须同时包含ENV和OwnerContact两个标签键才能创建EC2」的需求,需要调整条件逻辑,只要请求缺少这两个标签中的任意一个,就拒绝创建操作。以下是两种可行的写法:

写法1:用Null条件检查标签是否存在

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RequireMandatoryTags",
      "Effect": "Deny",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:*:*:instance/*",
      "Condition": {
        "Null": {
          "aws:RequestTag/ENV": "true",
          "aws:RequestTag/OwnerContact": "true"
        }
      }
    }
  ]
}
  • 逻辑:只要ENV或OwnerContact标签不存在(值为Null),就拒绝实例创建请求。

写法2:用ForAnyValue:StringNotExists检查标签键

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RequireMandatoryTags",
      "Effect": "Deny",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:*:*:instance/*",
      "Condition": {
        "ForAnyValue:StringNotExists": {
          "aws:TagKeys": ["ENV", "OwnerContact"]
        }
      }
    }
  ]
}
  • 逻辑:只要指定的标签键列表(ENV、OwnerContact)中有任意一个不存在于请求的标签键中,就拒绝实例创建请求。

补充说明

SCP的核心评估逻辑:

  1. 所有SCP的Allow语句取并集,Deny语句取交集(只要有一条Deny规则匹配,操作就会被拦截)。
  2. 你在SCP1中设置Allow *,再通过Deny语句限制违规操作的思路是正确的,只需修正SCP3的条件逻辑即可。

内容的提问来源于stack exchange,提问作者Frederick Scott Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:22:51