使用限制条件

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

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

准备工作

所需的角色

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

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

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

您可以针对组织资源设置组织政策,以使用列表限制条件来拒绝访问特定服务。以下流程介绍如何使用 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 分钟才能完全实施。

在组织政策中使用受管限制条件

受管限制条件是基于自定义组织政策平台构建的预定义限制条件。它们的使用方式与预定义限制条件类似,但可以使用适用于组织政策服务的 Policy Simulator 和组织政策试运行功能,以更安全地部署政策更改。

查看和识别受管理的约束条件

如需查看贵组织可用的受管限制条件,请执行以下操作:

控制台

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

    转到组织政策

  2. 在项目选择器中,选择要查看其组织政策的项目、文件夹或组织。随即显示的组织政策页面会显示适用于此资源的组织政策限制条件列表。

  3. 您可以按限制条件类型过滤或对组织政策列表进行排序,以查找受管理的限制条件。从列表中选择要查看详细信息的受管约束条件。在随即显示的政策详情页面上,您可以查看此组织政策的来源、此资源的有效政策评估结果,以及有关该限制条件的更多详细信息。

gcloud

如需列出组织政策中针对组织强制执行的受管限制和自定义限制,请使用 org-policies list-custom-constraints 命令。

gcloud org-policies list-custom-constraints \
  --organization=ORGANIZATION_ID

ORGANIZATION_ID 替换为您的组织的 ID。

如需详细了解资源的特定受管约束条件,请使用 org-policies describe-custom-constraint 命令。

gcloud org-policies describe-custom-constraint CONSTRAINT_NAME \
    --organization=ORGANIZATION_ID

替换以下内容:

  • CONSTRAINT_NAME:您要获取详细信息的托管式约束条件的名称。例如 iam.managed.disableServiceAccountKeyUpload

  • ORGANIZATION_ID:您的组织的 ID。

REST

如需列出组织在组织政策中设置的受管式限制条件和自定义限制条件,请使用 organizations.customConstraints.list 方法。

  GET https://orgpolicy.googleapis.com/v2/{parent=organizations/ORGANIZATION_ID}/customConstraints

ORGANIZATION_ID 替换为您的组织的 ID。

创建和更新受管约束条件

组织政策由为每个受管限制条件设置的值定义。 您可以为资源配置这些政策,也可以从父级资源继承这些政策,还可以将其设置为 Google 管理的默认行为。

如需根据受管约束条件创建或更新政策,请执行以下操作:

控制台

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

转到组织政策

  1. 在项目选择器中,选择要修改其组织政策的项目、文件夹或组织。随即显示的组织政策页面会显示适用于此资源的可过滤组织政策限制条件列表。

  2. 从列表中选择要为其更新组织政策的受管限制条件。在政策详情页面上,您可以查看此组织政策的来源、此资源的有效政策评估结果,以及有关受管限制条件的更多详细信息。

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

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

  5. 选择添加规则

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

  7. (可选)如需使组织政策成为基于某个标记的条件政策,请点击添加条件。如果您向组织政策添加条件规则,则必须至少添加一个无条件规则,否则无法保存政策。如需了解详情,请参阅使用标记设置组织政策

  8. (可选)如需在强制执行组织政策更改之前预览其影响,请点击测试更改。如需详细了解如何测试组织政策更改,请参阅使用 Policy Simulator 测试组织政策更改

  9. 如需在试运行模式下强制执行组织政策,请点击设置试运行政策。如需了解详情,请参阅在试运行模式下创建组织政策

  10. 验证试运行模式下的组织政策是否按预期运行后,点击设置政策以设置正式版政策。

gcloud

  1. 创建一个 YAML 文件来定义组织政策:

    name: RESOURCE_TYPE/RESOURCE_ID/policies/iam.managed.disableServiceAccountKeyCreation
    spec:
      rules:
      - enforce: ENFORCEMENT_STATE
    
    dryRunSpec:
      rules:
      - enforce: ENFORCEMENT_STATE
    

    替换以下内容:

    • RESOURCE_TYPE 替换为 organizationsfoldersprojects

    • RESOURCE_ID,其中包含您的组织 ID、文件夹 ID、项目 ID 或项目编号,具体取决于在 RESOURCE_TYPE 中指定的资源类型。

    • ENFORCEMENT_STATEtrue 搭配使用,在设置后强制执行此组织政策;与 false 搭配使用,在设置后停用此组织政策。

    (可选)如需使组织政策成为基于某个标记的条件性政策,请向 rules 添加 condition 块。如果您向组织政策添加条件规则,则必须至少添加一个无条件规则,否则无法保存政策。如需了解详情,请参阅使用标记设置组织政策

  2. 运行带有 dryRunSpec 标志的 org-policies set-policy 命令,以便在模拟运行模式下设置组织政策:

     gcloud org-policies set-policy POLICY_PATH \
       --update-mask=dryRunSpec
    

    POLICY_PATH 替换为组织政策 YAML 文件的完整路径。

    如需详细了解模拟运行组织政策,请参阅在模拟运行模式下创建组织政策

  3. 您可以使用 policy-intelligence simulate orgpolicy 命令在组织政策更改生效之前预览其影响:

    gcloud policy-intelligence simulate orgpolicy \
      --organization=ORGANIZATION_ID \
      --policies=POLICY_PATH
    

    替换以下内容:

    • ORGANIZATION_ID 替换为您的组织 ID,例如 1234567890123。不支持对多个组织进行更改模拟。

    • POLICY_PATH 替换为组织政策 YAML 文件的完整路径。

    如需详细了解如何测试组织政策更改,请参阅使用 Policy Simulator 测试组织政策更改

  4. 验证试运行模式下的组织政策是否按预期运行后,请使用 org-policies set-policy 命令和 spec 标志设置正式版政策:

    gcloud org-policies set-policy POLICY_PATH \
      --update-mask=spec
    

    POLICY_PATH 替换为组织政策 YAML 文件的完整路径。

REST

如需设置组织政策,请使用 organizations.policies.create 方法。

POST https://orgpolicy.googleapis.com/v2/{parent=organizations/ORGANIZATION_ID}/policies

请求 JSON 正文:

{
  "name": "RESOURCE_TYPE/RESOURCE_ID/policies/iam.managed.disableServiceAccountKeyCreation",
  "spec": {
    "rules": [
      {
        "enforce": ["ENFORCEMENT_STATE"]
      }
    ]
  }
  "dryRunSpec": {
    "rules": [
      {
        "enforce": ["ENFORCEMENT_STATE"]
      }
    ]
  }
}

替换以下内容:

  • RESOURCE_TYPE 替换为 organizationsfoldersprojects

  • RESOURCE_ID,其中包含您的组织 ID、文件夹 ID、项目 ID 或项目编号,具体取决于在 RESOURCE_TYPE 中指定的资源类型。

  • ENFORCEMENT_STATEtrue 搭配使用,在设置后强制执行此组织政策;与 false 搭配使用,在设置后停用此组织政策。

(可选)如需使组织政策成为基于某个标记的条件性政策,请向 rules 添加 condition 块。如果您向组织政策添加条件规则,则必须至少添加一个无条件规则,否则无法保存政策。如需了解详情,请参阅使用标记设置组织政策

如需详细了解模拟运行组织政策,请参阅在模拟运行模式下创建组织政策

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