设置带有标记的组织政策

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

准备工作

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

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

设置带有标记的组织政策

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

大多数组织政策在资源被分配到时, 创建或更新不能先将标记附加到资源 因此条件组织政策无法评估 仅在从父级继承的标记上创建此资源 资源。

系统会评估组织、文件夹和项目资源的标记。大多数人 资源层次结构中位于项目下的资源 组织政策,但有一些例外情况,例如 Cloud Run 服务。如需了解特定组织政策限制条件,请参阅 组织政策限制条件

列表政策示例

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

控制台

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

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

    转到“组织政策”

  2. 从项目选择器中,选择您要设置 组织政策

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

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

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

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

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

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

  7. 点击添加规则

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

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

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

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

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

      1. 条件类型框中,选择代码

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

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

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

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

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

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

      组织政策条件界面示例。

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

      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

运行 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. 为条件选择运算符。要匹配整个标记,请使用匹配运算符。要匹配标记键和标记值,请使用匹配 ID 运算符。

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

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

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

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

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

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

      组织政策条件界面示例。

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

      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

运行 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.googleapis.com 具有 sqladmin=enabled 标记,则可以创建一项组织政策, 对没有此标记的项目拒绝 sqladmin.googleapis.com sqladmin=enabled

  1. 创建代码 确定是否对资源进行了适当的治理 。例如,您可以创建一个标记,其中键为 sqlAdmin,键为 值enabled,用于指定该资源应允许 Cloud SQL Admin API。例如:

    创建标记键和值

  2. 点击新创建的代码的名称。您需要命名空间名称 标记键的值(列在标记键路径下), 条件。

  3. 在级别创建 Restrict Resource Service Usage 组织政策 组织资源,以拒绝对 Cloud SQL Admin API 的访问。例如:

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

  4. 向上述组织政策添加条件,指定该政策 。逻辑 NOT 运算符 条件构建器不支持,因此必须构建此条件 。例如:

    构建条件组织政策

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

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

组织政策继承

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

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

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

后续步骤

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

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