设置带有标记的组织政策

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

准备工作

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

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

设置带有标记的组织政策

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

列表政策示例

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

控制台

要设置组织政策,请执行以下操作:

  1. 在 Cloud Console 中打开组织政策页面。

    打开“组织政策”页面

  2. 选择页面顶部的项目选择器

  3. 项目选择器中,选择要为其设置组织政策的项目。

  4. 组织政策页面的列表中选择限制条件。此时应显示该限制条件的政策详情页面。

  5. 要为该资源自定义组织政策,请点击修改

  6. 修改页面,选择自定义

  7. 强制执行下,选择强制执行选项:

    • 要合并和评估组织政策,请选择与父资源规则合并。如需详细了解继承机制与资源层次结构,请参阅了解层次结构评估

    • 如需覆盖从父资源继承的政策,请选择替换

  8. 点击添加规则

  9. 政策值下,选择该组织政策是允许所有值、拒绝所有值还是指定一组自定义值。

    • 政策接受的特定值取决于应用此政策的服务。如需查看限制条件列表及其接受的值,请参阅组织政策限制条件
  10. (可选)如需使组织政策成为基于某个标记的条件政策,请点击添加条件

    1. 名称字段中,输入条件的名称。

    2. 说明字段中,输入条件的说明。该说明介绍了所需标记的背景信息以及它们如何影响资源。

    3. 您可以使用条件构建器创建条件,要求具有特定标记限制条件才会生效。

      1. 条件类型下拉菜单中选择标记

      2. 为条件选择运算符。要匹配整个标记,请使用匹配运算符。要匹配标记键和标记值,请使用匹配 ID 运算符。

      3. 如果您选择了匹配运算符,请输入标记的值命名空间名称。如果您选择了匹配 ID 运算符,请输入键和值 ID。

      4. 您可以通过点击添加创建多个条件。如果添加了其他条件,则可以通过切换将条件逻辑设置为要求满足所有条件。您可以通过切换将条件逻辑设置为仅要求其中一个条件为真。

      5. 您可以通过点击条件字段右侧的 X 来删除表达式。

      6. 完成条件修改后,点击保存

      下图展示了包含条件的组织政策配置示例。

      组织政策条件界面示例。

    4. 条件编辑器可用于以编程方式创建条件表达式。它还会以编程方式呈现您当前的条件集。

      1. 您可以使用条件编辑器来应用 ! 逻辑运算符。例如,查询 !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') 会将组织政策限制条件应用于没有 us-west1 标记的所有资源。
  11. 要完成并应用组织政策,请点击保存

gcloud

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

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 限制条件的组织政策文件。此组织政策指定所有串行端口均可访问资源,但使用条件来仅限制串行端口访问具有匹配标记的资源。

控制台

要设置组织政策,请执行以下操作:

  1. 在 Cloud Console 中打开组织政策页面。

    打开“组织政策”页面

  2. 选择页面顶部的项目选择器

  3. 项目选择器中,选择要为其设置组织政策的项目。

  4. 组织政策页面的列表中选择限制条件。此时应显示该限制条件的政策详情页面。

  5. 要为该资源自定义组织政策,请点击修改

  6. 修改页面,选择自定义

  7. 点击添加规则

  8. 强制执行下,选择开启还是关闭此组织政策的强制执行。

  9. (可选)如需使组织政策成为基于某个标记的条件政策,请点击添加条件。请注意,如果您向组织政策添加条件规则,则必须至少添加一个无条件规则,否则无法保存政策。

    1. 名称字段中,输入条件的名称。

    2. 说明字段中,输入条件的说明。该说明介绍了所需标记的背景信息以及它们如何影响资源。

    3. 您可以使用条件构建器创建条件,要求具有特定标记限制条件才会生效。

      1. 条件类型下拉菜单中选择标记

      2. 为条件选择运算符。要匹配整个标记,请使用匹配运算符。要匹配标记键和标记值,请使用匹配 ID 运算符。

      3. 如果您选择了匹配运算符,请输入标记的值命名空间名称。如果您选择了匹配 ID 运算符,请输入键和值 ID。

      4. 您可以通过点击添加创建多个条件。如果添加了其他条件,则可以通过切换将条件逻辑设置为要求满足所有条件。您可以通过切换将条件逻辑设置为仅要求其中一个条件为真。

      5. 您可以通过点击条件字段右侧的 X 来删除表达式。

      6. 完成条件修改后,点击保存

      7. 已强制执行条件的组织政策必须至少具有一个无条件规则。点击添加规则,并设置该组织政策的强制执行应默认设置为开启还是关闭。

      下图展示了包含条件的组织政策配置示例。

      组织政策条件界面示例。

    4. 条件编辑器可用于以编程方式创建条件表达式。它还会以编程方式呈现您当前的条件集。

      1. 您可以使用条件编辑器来应用 ! 逻辑运算符。例如,查询 !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') 会将组织政策限制条件应用于没有 us-west1 标记的所有资源。
  10. 要完成并应用组织政策,请点击保存

gcloud

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

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 才能避免冲突。

后续步骤

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

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