设置带有标记的组织政策

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

准备工作

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

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

设置带有标记的组织政策

如需使用标记来决定组织政策应在何处生效,您必须在组织政策 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

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

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. 在 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

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

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

限制未标记的资源

您可以使用标记和条件组织政策来限制任何未使用特定标记的资源。如果您为限制服务的资源设置组织政策,并基于某个标记的存在,则使用该资源的子资源(除非已标记)子资源。这样,您必须先按照治理方案设置资源,然后才能使用这些资源。

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

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

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

    创建标记键和值

  2. 点击新创建的代码的名称。在接下来的步骤中,您需要知道标记键路径下列出的标记键的命名空间名称,才能创建条件。

  3. 在组织资源级层创建限制 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 才能避免冲突。

后续步骤

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

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