使用限制条件

本指南介绍如何创建包含特定限制条件的组织政策。本页面上的示例中使用的限制条件不是真实的限制条件,而是用于教育目的的通用样本。

如需详细了解限制条件及其解决的问题,请参阅所有组织政策服务限制条件的列表

准备工作

所需的角色

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

此预定义角色可提供管理组织政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

管理组织政策需要以下权限:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

您也可以使用自定义角色或其他预定义角色来获取这些权限。

将列表限制条件与组织政策结合使用

您可以针对组织资源设置组织政策,以使用列表限制条件来拒绝访问特定服务。以下流程介绍如何使用 Google Cloud CLI 设置组织政策。如需了解如何使用 Google Cloud 控制台查看和设置组织政策,请参阅创建和管理政策

使用列表限制条件的组织政策不能超过 500 个 并且不能超过 32 KB。如果创建或更新的组织政策包含的值超过 500 个,或者大小超过 32 KB,则无法成功保存,并且请求会返回错误。

针对组织资源设置强制执行

如需使用 gcloud CLI 对组织设置强制执行,请按照以下提示操作: 具体步骤:

  1. 使用 describe 命令获取组织资源的当前政策。此命令返回直接应用于此资源的政策:

    gcloud org-policies describe \
      LIST_CONSTRAINT --organization=ORGANIZATION_ID
    

    替换以下内容:

    • ORGANIZATION_ID: 组织资源。 组织 ID 采用十进制数字的格式,不能添加前导零。

    • LIST_CONSTRAINT:您要强制执行的服务的列表限制条件。例如, constraints/gcp.restrictNonCmekServices 限制条件会限制 服务无需客户管理的加密即可创建资源 密钥 (CMEK)。

    您还可以将组织政策应用于分别带有 --folder--project 标志以及文件夹 ID项目 ID 的文件夹或项目。

    响应将返回当前的组织政策(如果存在)。 例如:

    name: projects/841166443394/policies/gcp.resourceLocations
    spec:
      etag: BwW5P5cEOGs=
      inheritFromParent: true
      rules:
      - condition:
          expression: resource.matchTagId("tagKeys/1111", "tagValues/2222")
        values:
          allowedValues:
          - in:us-east1-locations
      - condition:
          expression: resource.matchTag("123/env", "prod")
        values:
          allowedValues:
          - in:us-west1-locations
      - values:
          deniedValues:
          - in:asia-south1-locations
      updateTime: '2021-01-19T12:00:51.095Z'
    

    如果未设置政策,则会返回 NOT_FOUND 错误:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. 使用 set-policy 命令针对组织设置政策。这会覆盖附加到该资源的所有政策。

    1. 创建临时文件 /tmp/policy.yaml 以存储政策:

      name: organizations/ORGANIZATION_ID/policies/LIST_CONSTRAINT
      spec:
        rules:
        - values:
            deniedValues:
            - VALUE_A
      
    2. 运行 set-policy 命令:

      gcloud org-policies set-policy /tmp/policy.yaml
      
  3. 使用 describe --effective 查看当前的有效政策。 这会返回组织政策,因为此时它是在包含继承政策的资源层次结构中进行评估。

    gcloud org-policies describe \
      LIST_CONSTRAINT --effective \
      --organization=ORGANIZATION_ID
    

    该命令的输出将为:

    name: organizations/ORGANIZATION_ID/policies/LIST_CONSTRAINT
    spec:
      etag: BwVJi0OOESU=
      rules:
      - values:
          deniedValues:
          - VALUE_A
    

    由于该组织政策在组织层级设置,因此允许继承的所有子资源都将继承该政策。

对组织政策的更改最多可能需要 15 分钟才能完全强制执行。

针对层次结构子树设置强制执行

列表限制条件选用明确拒绝的值来确定应该允许或拒绝的资源。一些限制条件还可以接受使用前缀 under: 的值,该前缀指定了以该资源作为根的子树。如果在允许或拒绝的值上使用 under: 前缀,则组织政策将应用于该资源及其所有子级。如需了解允许使用 under: 前缀的限制条件,请参阅组织政策限制条件页面。

使用 under: 前缀的值称为层次结构子树字符串。层次结构子树字符串指定了其适用的资源类型。例如,如果在设置 constraints/compute.storageResourceUseRestrictions 限制时使用 projects/PROJECT_ID 的子树字符串,系统将允许或拒绝针对 PROJECT_ID 及其所有子级使用 Compute Engine 存储。

  1. 使用 describe 命令获取组织资源的当前政策:

    gcloud org-policies describe \
      LIST_CONSTRAINT \
      --organization=ORGANIZATION_ID
    

    替换以下内容:

    • ORGANIZATION_ID 是组织资源的唯一标识符。

    • LIST_CONSTRAINT 是您要强制执行的服务的列表限制条件。

    您还可以将组织政策应用于分别带有 --folder--project 标志以及文件夹 ID项目 ID 的文件夹或项目。

    如果未设置政策,则会返回 NOT_FOUND 错误:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. 使用 set-policy 命令针对项目设置政策。 under: 前缀设置限制条件以拒绝命名资源及其所有子资源。

    1. 创建临时文件 /tmp/policy.yaml 以存储政策:

      name: organizations/ORGANIZATION_ID/policies/LIST_CONSTRAINT
      spec:
        rules:
        - values:
            deniedValues:
            - under:folders/VALUE_A
      
    2. 运行 set-policy 命令:

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

    其中:

    • under: 是一个前缀,表示后面跟一个子树字符串。

    • folders/VALUE_A 是要拒绝的根资源的文件夹 ID。将拒绝该资源及其在资源层次结构中的所有子级。

    如下列示例所示,您还可以将 under: 前缀应用于组织和项目:

    • under:organizations/VALUE_X

    • under:projects/VALUE_Y

  3. 使用 describe --effective 查看当前的有效政策。

    gcloud org-policies describe \
      LIST_CONSTRAINT --effective \
      --organization=ORGANIZATION_ID
    

    该命令的输出将为:

    name: organizations/ORGANIZATION_ID/policies/LIST_CONSTRAINT
    spec:
      rules:
      - values:
          deniedValues:
          - under:folders/VALUE_A
    

    现在,该政策的评估结果为拒绝文件夹 VALUE_A 及其所有子资源。

对组织政策的更改最长可能需要 15 分钟才能完全实施。

合并项目的组织政策

您可以在资源上设置组织政策,该政策将与从其父级资源继承的任何政策合并。然后,系统将对合并后的政策进行评估,根据继承规则创建新的有效政策。

  1. 使用 describe 命令获取资源的当前政策:

    gcloud org-policies describe \
      LIST_CONSTRAINT \
      --project=PROJECT_ID
    

    替换以下内容:

    • PROJECT_ID唯一标识符 项目名称

    • LIST_CONSTRAINT:您要强制执行的服务的列表限制条件。

    如果未设置政策,则会返回 NOT_FOUND 错误:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. 使用 describe --effective 命令显示当前的有效政策:

    gcloud org-policies describe \
      LIST_CONSTRAINT --effective \
      --project=PROJECT_ID
    

    该命令的输出将包含从组织资源继承的拒绝值:

    name: projects/PROJECT_ID/policies/LIST_CONSTRAINT
    spec:
      rules:
      - values:
          deniedValues:
          - VALUE_A
    
  3. 使用 set-policy 命令针对项目设置政策。

    1. 创建临时文件 /tmp/policy.yaml 以存储政策:

      name: projects/PROJECT_ID/policies/LIST_CONSTRAINT
      spec:
        inheritFromParent: true
        rules:
        - values:
            deniedValues:
            - VALUE_B
            - VALUE_C
      
    2. 运行 set-policy 命令:

      gcloud org-policies set-policy /tmp/policy.yaml
      
  4. 再次使用 describe --effective 命令显示更新后的政策:

    gcloud org-policies describe \
      LIST_CONSTRAINT --effective \
      --project=PROJECT_ID
    

    该命令的输出将包含合并来自资源和父级的政策的有效结果:

    name: projects/PROJECT_ID/policies/LIST_CONSTRAINT
    spec:
      rules:
      - values:
          deniedValues:
            - VALUE_A
            - VALUE_B
            - VALUE_C
    

对组织政策的更改最多可能需要 15 分钟才能完全强制执行。

恢复默认限制条件行为

您可以使用 reset 命令重置政策,以便使用限制条件的默认行为。如需查看所有可用限制条件及其默认值的列表,请参阅组织政策限制条件。以下示例假定默认限制条件行为是允许所有值。

  1. 获取项目的有效政策,以显示当前合并后的政策:

    gcloud org-policies describe \
      LIST_CONSTRAINT --effective \
      --project=PROJECT_ID
    

    PROJECT_ID 替换为 唯一标识符 项目名称该命令的输出将为:

    name: projects/PROJECT_ID/policies/LIST_CONSTRAINT
    spec:
      rules:
      - values:
          deniedValues:
          - VALUE_A
          - VALUE_B
          - VALUE_C
    
  2. 使用 reset 命令重置组织政策。

    gcloud org-policies reset LIST_CONSTRAINT \
        --project=PROJECT_ID
    
  3. 获取有效政策,以验证默认行为:

    gcloud org-policies describe \
      LIST_CONSTRAINT --effective \
      --project=PROJECT_ID
    

    该命令的输出将允许所有值:

    name: projects/PROJECT_ID/policies/LIST_CONSTRAINT
    spec:
      rules:
      - allowAll: true
    

对组织政策的更改最长可能需要 15 分钟才能完全实施。

删除组织政策

您可以删除资源中的组织政策。未设置组织政策的资源将继承其父级资源的任何政策。如果您删除组织资源上的组织政策,则有效政策将为限制条件的默认行为。

以下步骤描述了如何删除组织的组织政策。

  1. 使用 delete 命令删除组织资源的政策:

    gcloud org-policies delete \
      LIST_CONSTRAINT \
      --organization=ORGANIZATION_ID
    

    替换 ORGANIZATION_ID 替换为组织资源的唯一标识符。模型的输出 该命令将是:

    Deleted policy
    [organizations/ORGANIZATION_ID/policies/LIST_CONSTRAINT].
    {}
    
  2. 获取组织的有效政策,以验证其是否未强制执行:

    gcloud org-policies describe \
      LIST_CONSTRAINT --effective \
      --organization=ORGANIZATION_ID
    

    该命令的输出将为:

    name: organizations/ORGANIZATION_ID/policies/LIST_CONSTRAINT
    spec:
      rules:
      - allowAll: true
    

以下步骤描述了如何删除项目的组织政策:

  1. 使用 delete 命令删除项目的政策:

    gcloud org-policies delete \
      LIST_CONSTRAINT \
      --project=PROJECT_ID
    

    其中,PROJECT_ID 是项目的唯一标识符。该命令的输出将为:

    Deleted policy
    [projects/PROJECT_ID/policies/LIST_CONSTRAINT].
    {}
    
  2. 获取项目的有效政策,以验证其是否未强制执行:

    gcloud org-policies describe \
      LIST_CONSTRAINT --effective \
      --project=PROJECT_ID
    

    该命令的输出将为:

    name: projects/PROJECT_ID/policies/LIST_CONSTRAINT
    spec:
      rules:
      - allowAll: true
    

对组织政策的更改最多可能需要 15 分钟才能完全强制执行。

在组织政策中使用布尔值限制条件

对组织资源设置强制执行

您可以针对组织资源设置组织政策,以强制执行布尔值限制条件。以下流程介绍如何使用 Google Cloud CLI 设置组织政策。有关如何查看 以及如何使用 Google Cloud 控制台设置组织政策,请参阅 创建和管理政策

  1. 使用 describe 命令获取组织资源的当前政策:

    gcloud org-policies describe \
      BOOLEAN_CONSTRAINT \
      --organization=ORGANIZATION_ID
    

    ORGANIZATION_ID 替换为组织资源的唯一标识符。您还可以 将组织政策应用于具有 --folder--project 标志,以及 文件夹 ID项目 ID、 。

    如果未设置政策,则会返回 NOT_FOUND 错误:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. 使用 set-policy 命令针对项目设置政策。

    1. 创建临时文件 /tmp/policy.yaml 以存储政策:

      name: organizations/ORGANIZATION_ID/policies/BOOLEAN_CONSTRAINT
      spec:
        rules:
        - enforce: true
      
    2. 运行 set-policy 命令:

      gcloud org-policies set-policy /tmp/policy.yaml
      
  3. 使用 describe --effective 查看当前的有效政策:

    gcloud org-policies describe \
      BOOLEAN_CONSTRAINT --effective \
      --organization=ORGANIZATION_ID
    

    该命令的输出将为:

    name: organizations/ORGANIZATION_ID/policies/BOOLEAN_POLICY
    spec:
      rules:
      - enforce: true
    

对组织政策的更改最长可能需要 15 分钟才能完全实施。

替换项目的组织政策

要替换项目的组织政策,请设置一项政策,以停止对项目下方层次结构中的所有资源强制执行布尔值限制条件。

  1. 获取资源的当前政策,以显示其为空。

    gcloud org-policies describe \
      BOOLEAN_CONSTRAINT \
      --project=PROJECT_ID
    

    其中,PROJECT_ID唯一标识符 项目名称

    如果未设置政策,则会返回 NOT_FOUND 错误:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. 获取项目的有效政策,以确认对在该项目强制执行限制条件。

    gcloud org-policies describe \
      BOOLEAN_CONSTRAINT --effective \
      --project=PROJECT_ID
    

    该命令的输出将为:

    name: projects/PROJECT_ID/policies/BOOLEAN_POLICY
    spec:
      rules:
      - enforce: true
    
  3. 使用 set-policy 命令针对项目设置政策。

    1. 创建临时文件 /tmp/policy.yaml 以存储政策:

      name: projects/PROJECT_ID/policies/BOOLEAN_CONSTRAINT
      spec:
        rules:
        - enforce: false
      
    2. 运行 set-policy 命令:

      gcloud org-policies set-policy /tmp/policy.yaml
      
  4. 获取有效政策,以显示不再对项目强制执行该政策。

    gcloud org-policies describe \
      BOOLEAN_CONSTRAINT --effective \
      --project=PROJECT_ID
    

    该命令的输出将为:

    name: organizations/ORGANIZATION_ID/policies/BOOLEAN_POLICY
    spec:
      rules:
      - enforce: false
    

对组织政策的更改最长可能需要 15 分钟才能完全实施。

删除组织政策

您可以删除资源中的组织政策。未设置组织政策的资源将继承其父级资源的任何政策。如果您删除组织资源上的组织政策,则有效政策将为限制条件的默认行为。

以下步骤描述了如何删除组织和项目的组织政策。

  1. 使用 delete 命令删除组织资源中的政策:

    gcloud org-policies delete \
      BOOLEAN_CONSTRAINT \
      --organization=ORGANIZATION_ID
    

    替换 ORGANIZATION_ID 替换为组织资源的唯一标识符。模型的输出 该命令将是:

    Deleted policy
    [organizations/ORGANIZATION_ID/policies/BOOLEAN_CONSTRAINT].
    {}
    
  2. 获取组织的有效政策,以验证其是否未强制执行:

    gcloud org-policies describe \
      BOOLEAN_CONSTRAINT --effective \
      --organization=ORGANIZATION_ID
    

    如果未设置政策,则会返回 NOT_FOUND 错误:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  3. 使用 delete 命令删除项目中的组织政策:

    gcloud org-policies delete \
      BOOLEAN_CONSTRAINT \
      --project=PROJECT_ID
    

    该命令的输出将为:

    Deleted policy
    [organizations/ORGANIZATION_ID/policies/BOOLEAN_CONSTRAINT].
    {}
    
  4. 获取项目的有效政策,以验证其是否未强制执行:

    gcloud org-policies describe \
      BOOLEAN_CONSTRAINT --effective \
      --project=PROJECT_ID
    

    PROJECT_ID 替换为项目的唯一标识符。

    如果未设置政策,则会返回 NOT_FOUND 错误:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    

对组织政策的更改最多可能需要 15 分钟才能完全强制执行。