设置带有标记的组织政策

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

准备工作

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

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

所需的角色

如需获得管理组织政策所需的权限,请让您的管理员为您授予组织的 Organization Policy Administrator (roles/orgpolicy.policyAdmin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

您可以通过向组织政策管理员角色绑定添加 IAM 条件来委托组织政策的管理权限。如需控制主账号可以管理组织政策的资源,您可以使角色绑定以特定标记为条件。如需了解详情,请参阅使用限制条件

设置带有标记的组织政策

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

您还可以将条件设置为与标记键匹配。这样一来,无论附加了什么标记值,您都可以针对具有相应标记键的所有资源启用或停用强制执行。

大多数组织政策会在创建或更新资源时进行评估和强制执行。 强制性标记可用于在创建资源时对其进行管控。

列表规则示例

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

控制台

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

  1. 在 Google Cloud 控制台中,转到组织政策页面。

    转到组织政策

  2. 在项目选择器中,选择要设置组织政策的项目。

  3. 组织政策页面上,从列表中选择一个限制条件。 随即会显示该限制条件的政策详情页面。

  4. 如需为该资源更新组织政策,请点击管理政策

  5. 修改政策页面,选择覆盖父资源的政策

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

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

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

  7. 点击添加规则

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

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

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

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

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

      1. 条件类型框中,选择标记

      2. 为条件选择运算符

        • 如需匹配整个标记,请使用带有标记命名空间名称的 has value 运算符,或使用带有标记键和值 ID 的 has value ID 运算符。

        • 如需仅匹配标记键,请使用 has key 运算符和标记键的命名空间名称,或使用 has key ID 运算符和标记键 ID。

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

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

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

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

      条件表达式必须包含 1 到 10 个由 ||&& 运算符联接的子表达式。每个子表达式都必须是以下函数之一:

      • "resource.matchTag('KEY_NAME', 'VALUE_SHORT_NAME')"

        替换以下内容:

        • KEY_NAME 替换为标记键的命名空间名称。例如 123456789012/env

        • VALUE_SHORT_NAME 替换为标记值的简称。例如 prod

        例如:resource.matchTag('123456789012/environment, 'prod')

      • "resource.matchTagId('KEY_ID', 'VALUE_ID')"

        替换以下内容:

        • KEY_ID 替换为标记键的永久 ID。例如 tagKeys/123456789012

        • VALUE_ID 替换为标记值的永久 ID。例如 tagValues/567890123456

        例如:resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

      • "resource.hasTagKey('KEY_NAME')"

        KEY_NAME 替换为标记键的命名空间名称。例如 123456789012/env

        例如:resource.matchTag('123456789012/environment, 'prod')

      • "resource.hasTagKeyId('KEY_ID')"

        KEY_ID 替换为标记键的永久 ID。例如 tagKeys/123456789012

        例如:resource.matchTagId('tagKeys/123456789012')

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

gcloud

如需设置组织政策,请创建一个 YAML 文件来存储组织政策:

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.matchTag 运算符搭配标记的命名空间名称,通过条件匹配整个标记。

如需仅匹配标记键,请将 resource.hasTagKey 运算符与标记键的命名空间名称搭配使用。如需匹配给定标记键的任何标记值,请将 resource.hasTagKeyID 运算符与标记键 ID 结合使用。

运行 set-policy 命令:

gcloud org-policies set-policy POLICY_PATH

替换以下内容:

  • POLICY_PATH:组织政策 YAML 文件的完整路径

  • 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. 在 Google Cloud 控制台中,转到组织政策页面。

    转到组织政策

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

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

  4. 如需为该资源更新组织政策,请点击管理政策

  5. 修改政策页面,选择覆盖父资源的政策

  6. 点击添加规则

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

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

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

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

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

      1. 条件类型框中,选择标记

      2. 为条件选择运算符

        • 如需匹配整个标记,请使用带有标记命名空间名称的 has value 运算符,或使用带有标记键和值 ID 的 has value ID 运算符。

        • 如需仅匹配标记键,请使用 has key 运算符和标记键的命名空间名称,或使用 has key ID 运算符和标记键 ID。

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

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

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

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

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

      条件表达式必须包含 1 到 10 个子表达式,这些子表达式通过 ||&& 运算符联接。每个子表达式都必须采用以下形式之一:

      • "resource.matchTag('KEY_NAME', 'VALUE_SHORT_NAME')"

        替换以下内容:

        • KEY_NAME 替换为标记键的命名空间名称。例如 123456789012/env

        • VALUE_SHORT_NAME 替换为标记值的简称。例如 prod

      • "resource.matchTagId('KEY_ID', 'VALUE_ID')"

        替换以下内容:

        • KEY_ID 替换为标记键的永久 ID。例如 tagKeys/123456789012

        • VALUE_ID 替换为标记值的永久 ID。例如 tagValues/567890123456

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

gcloud

如需设置组织政策,请创建一个 YAML 文件来存储组织政策:

name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.disableSerialPortAccess
spec:
  rules:
  - condition:
      expression: "resource.matchTag('ORGANIZATION_ID/disableSerialAccess', 'yes')"
    enforce: true
  - enforce: false

您可以使用 resource.matchTag 运算符搭配标记的命名空间名称,通过条件匹配整个标记。

如需仅匹配标记键,请将 resource.hasTagKey 运算符与标记键的命名空间名称搭配使用。如需匹配给定标记键的任何标记值,请将 resource.hasTagKeyID 运算符与标记键 ID 结合使用。

运行 set-policy 命令:

gcloud org-policies set-policy POLICY_PATH

替换以下内容:

  • POLICY_PATH:组织政策 YAML 文件的完整路径

  • 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

限制未标记的资源

您可以使用标记和条件式组织政策来限制未使用特定标记的任何资源。如果您在某个资源上设置了一项组织政策,该政策会限制服务,并规定只有在存在标记的情况下才能使用服务,那么除非子资源已添加标记,否则无法使用该资源的所有子资源。这样一来,资源必须先根据您的治理计划进行设置,然后才能使用。

如需限制未添加标记的组织、文件夹或项目资源,您可以在创建组织政策时,在条件查询中使用 ! 逻辑运算符。

例如,如需仅允许在具有 sqladmin=enabled 标记的项目中使用 sqladmin.googleapis.com,您可以创建一项组织政策,以禁止在没有 sqladmin=enabled 标记的项目中使用 sqladmin.googleapis.com

  1. 创建一个标记,用于标识资源是否已应用适当的治理。例如,您可以创建一个键为 sqlAdmin、值为 enabled 的标记,以指定相应资源应允许使用 Cloud SQL Admin API。例如:

    创建标记键和标记值

  2. 点击新创建的代码的名称。您需要在后续步骤中使用标记键的命名空间名称(列在标记键路径下)来创建条件。

  3. 在组织资源级层创建限制资源服务使用组织政策,以拒绝访问 Cloud SQL Admin API。例如:

    创建用于限制资源的组织政策

  4. 向上述组织政策添加一个条件,指定在不存在治理标记时强制执行该政策。条件构建器不支持逻辑 NOT 运算符,因此必须在条件编辑器中构建此条件。例如:

    构建有条件的组织政策

    !resource.matchTag("012345678901/sqlAdmin", "enabled")

现在,必须先将 sqlAdmin=enabled 标记附加到项目或让项目继承该标记,然后您的开发者才能将 Cloud SQL Admin API 与该项目搭配使用。

强制要求资源具有标记

您可以使用自定义组织政策在资源上实现强制性标记。强制执行强制性标记后,您只能创建符合组织标记政策的资源;也就是说,资源必须与政策中指定的强制性标记键的标记值绑定。如需了解详情,请参阅设置自定义限制条件以强制执行标记

组织政策继承

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

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

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

后续步骤

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

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