SCP创建一个没有标签或有特定标签的安全组

SCP to create a security group with no tag or with specific tag

我想创建一个 SCP(服务控制策略),如果没有标签,它应该允许创建一个安全组。如果创建了一个标签,它应该有一个特定的值。例如,如果 'bu' 是一个标签,则值应始终仅为 'finance'。如何做到这一点。我做了这个:

{
  "Sid": "SGBu",
  "Effect": "Deny",
  "Action": [
    "ec2:CreateSecurityGroup"
  ],
  "Resource": [
    "arn:aws:ec2:*:*:security-group/*"
  ],
  "Condition": {
    "ForAnyValue:Null": {
      "aws:RequestTag/bu": "false"
    }
  }
}

如果添加了 'bu' 标签,我该如何添加一个 OR 条件,以便值必须是 'finance'?

谢谢

您可以在一个 SCP 中有多个条件,但这些条件仅适用于 AND。但是它自己的每个条件可以有多个 key/value 对并且这些 key/value 对之间的关​​系是或。

这里是一个例子:(见最后一个条件IpAdressess)

"Condition" :  {
      "DateGreaterThan" : {
         "aws:CurrentTime" : "2019-07-16T12:00:00Z"
       },
      "DateLessThan": {
         "aws:CurrentTime" : "2019-07-16T15:00:00Z"
       },
       "IpAddress" : {
          "aws:SourceIp" : ["192.0.2.0/24", "203.0.113.0/24"]
      }
}

这是关于它的 AWS 文档: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html

最好的方法是结合 SCP with Tag Policies

这样,SCP 用于在资源创建时强制标记,Tag Policy 用于标准化确定的标记的值。

使用标签策略,您可以定义特定标签允许的值列表,为您 select 并且 case-sensitive 的服务强制执行它(SCP 在条件键上 not case-sensitive ).

对于您的场景,标签策略可以是:

  • 标签键:bu
  • 值:金融
  • 要强制执行的资源类型:ec2:securitygroup