设置带有标记的组织政策

标记提供了一种根据资源是否有特定标记,有条件地允许或拒绝政策的方法。您可以使用标记并有条件地执行组织政策,以便集中控制层次结构中的资源。

准备工作

如需详细了解标记及其工作原理,请参阅标记概览

如需详细了解如何使用标记,请参阅创建和管理标记

设置带有标记的组织政策

如需使用标记来决定组织政策应在何处生效,您必须在组织政策 YAML 文件中指定条件。您可以将条件设置为与特定标记键值对相匹配,这会要求实施设置给组织政策的特定标记值。

列表政策示例

以下示例展示了如何设置执行 gcp.resourceLocations 限制条件的组织政策文件。此组织政策同时使用在同一政策文件中设置的条件值和无条件值。

要设置组织政策,请运行以下命令:

gcloud org-policies set-policy POLICY_PATH

其中,POLICY_PATH 是组织政策 JSON 文件的完整路径,其内容应如下所示:

{
  "name":"RESOURCE_TYPE/RESOURCE_ID/policies/gcp.resourceLocations",
  "spec":{
    "rules":[
       {
        // As there is no condition specified, this allowedValue is enforced
        // unconditionally.
        "values":{
          "allowedValues": ["us-east1-locations"]
        },
      },
     {
        // This condition applies to the values block.
        "condition":{
          "expression":"resource.matchTag('ORGANIZATION_ID/location', 'us-west1')"
        },
        "values":{
          "allowedValues": ["us-west1-locations"]
        }
      }
    ]
  }
}

其中:

  • RESOURCE_TYPEorganizationsfoldersprojects

  • RESOURCE_ID 是您的组织 ID、文件夹 ID、项目 ID 或项目编号,具体取决于在 RESOURCE_TYPE 中指定的资源类型。

  • ORGANIZATION_ID 是标记键的父级组织。

对于上述组织政策,资源及其所有子资源将执行 gcp.resourceLocations 限制条件,且 allowedValues 限制为 us-east1-locations。系统对任何具有标记 location: us-west1 的资源都将执行 gcp.resourceLocations 限制条件,其中 allowedValuesus-east1-locationsus-west1-locations

通过这种方式,可以针对单个组织政策中的限制条件采用有条件和无条件值组。

布尔值政策示例

以下示例展示了如何设置执行 compute.disableSerialPortAccess 限制条件的组织政策文件。此组织政策指定所有串行端口均可访问资源,但使用条件来仅限制串行端口访问具有匹配标记的资源。

要设置组织政策,请运行以下命令:

gcloud org-policies set-policy POLICY_PATH

其中,POLICY_PATH 是组织政策 JSON 文件的完整路径,其内容应如下所示:

{
  "name": "RESOURCE_TYPE/RESOURCE_ID/policies/gcp.disableSerialPortAccess",
  "spec": {
    "rules": [
      {
        "condition": {
          "expression": "resource.matchTag(\"ORGANIZATION_ID/disableSerialAccess\", \"yes\")"
        },
        "enforce": true
      },
      {
        "enforce": false
      }
    ]
  }
}

其中:

  • RESOURCE_TYPEorganizationsfoldersprojects

  • RESOURCE_ID 是您的组织 ID、文件夹 ID、项目 ID 或项目编号。

  • ORGANIZATION_ID 是标记键的父级组织。

对于上述组织政策,资源及其所有子资源都将执行 gcp.disableSerialPortAccess 限制条件。任何具有标记 disableSerialAccess: yes 的资源都将被组织政策拒绝。任何没有标记 disableSerialAccess: yes 的资源都不会执行限制条件。

有条件地向组织政策添加限制条件

您可以根据资源附加的标记,使用标记有条件地将组织政策限制条件添加到资源。您可以在同一组织政策中添加多个条件,从而精确控制组织政策应用到的资源。

通用表达式语言 (CEL) 是用于指定条件表达式的表达式语言。条件表达式由一个或多个语句组成,这些语句使用逻辑运算符(&&||!)连接。如需了解详情,请参阅 CEL 规范及其语言定义

考虑使用一个组织政策,以根据应用于资源的标记来限制这些资源的创建位置。为此,请创建一个执行 gcp.resourceLocations 限制条件的组织政策,并使用条件将执行范围限定为仅允许特定的资源。

首先,创建一个临时文件 /tmp/policy.yaml 以包含您的组织政策:

name: organizations/ORGANIZATION_ID/policies/gcp.resourceLocations
spec:
    rules:
    - condition:
        expression: resource.matchTag("ORGANIZATION_ID/location", "us-east")
      values:
        allowedValues:
        - in:us-east1-locations
    - condition:
        expression: resource.matchTag("ORGANIZATION_ID/location", "us-west")
      values:
        allowedValues:
        - in:us-west1-locations
    - values:
        deniedValues:
        - in:asia-south1-locations

其中 ORGANIZATION_ID 是标记键的父级组织。

在上述示例中,附加了 location: us-east 标记的所有资源都将被限制位于 us-east1-locations 值组中的位置。附加了 location: us-west 标记的所有资源都将被限制位于 us-west1-locations 值组中的位置。组织中的所有资源都将屏蔽在 asia-south1-locations 值组中的位置之外。

然后,使用 set-policy 命令设置政策:

gcloud org-policies set-policy /tmp/policy.yaml

组织政策继承

根据继承的常规规则,使用标记启用的组织政策列表限制条件将与现有的组织政策合并。这些条件规则仅在条件为 true 时适用。

使用标记启用的组织政策布尔值限制条件将会覆盖现有的组织政策。另外,由于布尔值政策只能有两个状态(即 true 或 false),因此所有条件语句都必须与非条件语句相反,以防止多个标记相互冲突。

例如,请考虑实施 disableSerialPortAccess 限制条件的组织政策。无条件值(如果没有条件覆盖它则使用该值)为 true。因此,必须将此政策的任何其他条件语句设置为 false 才能避免冲突。

后续步骤

如需了解如何使用标记,请参阅创建和管理标记页面。

如需详细了解如何创建和管理组织政策限制条件,请参阅使用限制条件