使用限制条件

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

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

准备工作

添加组织政策管理员

要将用户添加为组织政策管理员,您必须具有组织管理员角色。此角色只能在组织层级授予。

Console

要添加组织政策管理员,请执行以下操作:

  1. 以 G Suite 或 Cloud Identity 超级用户的身份登录 Google Cloud Platform Console,并转到管理资源页面:

    转到“管理资源”页面

  2. 组织下拉列表中,选择您的组织。

  3. 在出现的资源列表中,选择组织资源旁边的复选框。

  4. 在右侧信息面板权限下方,输入要添加的成员的电子邮件地址。

  5. 选择角色下拉列表中,依次选择组织政策 > 组织政策管理员

  6. 点击添加。此时将显示一个对话框,确认添加或更新成员的新角色。

gcloud

您可以使用 gcloud 命令来处理 JSON 或 YAML 文件。本示例使用 JSON。

要为您的组织添加组织政策管理员,请执行以下操作:

  1. 获取要修改的 Cloud IAM 政策,并将其写入 JSON 文件:
      gcloud organizations get-iam-policy ORGANIZATION_ID \
         --format json > iam.json
      
  2. JSON 文件的内容将如下所示。请注意,版本字段是只读的,因此您无需提供它。

  3.    {
           "bindings": [
           {
               "members": [
                 "user:email1@gmail.com"
               ],
               "role": "roles/owner"
           },
           {
               "members": [
                 "serviceAccount:our-project-123@appspot.gserviceaccount.com",
                 "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
               ],
               "role": "roles/editor"
           }
           ],
           "etag": "BwUjMhCsNvY=",
           "version": 1
       }
       
  4. 使用文本编辑器向“bindings”数组添加一个新对象,后者定义了群组成员以及这些成员的角色。例如,要将角色“roles/orgpolicy.policyAdmin”授予用户“email2@gmail.com”,请按如下方式更改上方示例:

  5.    {
         "bindings": [
         {
           "members": [
             "user:email1@gmail.com"
           ],
         "role": "roles/owner"
         },
         {
           "members": [
             "serviceAccount:our-project-123@appspot.gserviceaccount.com",
             "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
           ],
           "role": "roles/editor"
         },
         {
           "members": [
             "user:email2@gmail.com"
           ],
           "role": "roles/orgpolicy.policyAdmin"
         }
         ],
         "etag": "BwUjMhCsNvY="
       }
       
  6. 通过运行以下命令来更新组织的政策:

  7.    gcloud organizations set-iam-policy ORGANIZATION_ID iam.json
       
  8. 该命令会输出更新后的政策:
       bindings:
         - members:
           - user:email1@gmail.com
             role: roles/owner
         - members:
           - serviceAccount:our-project-123@appspot.gserviceaccount.com
           - serviceAccount:123456789012-compute@developer.gserviceaccount.com
             role: roles/editor
         - members:
           - user:email2@gmail.com
             role: roles/orgpolicy.policyAdmin
         etag: BwUjMhXbSPU=
         version: 1
       

在组织政策中使用列表限制条件

对组织资源设置强制执行

您可以在组织资源上设置组织政策,以使用列表限制条件来拒绝访问特定服务。以下过程介绍如何使用 gcloud 命令行工具设置组织政策。如需了解如何使用 GCP Console 查看和设置组织政策,请参阅创建和管理政策

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

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --organization ORGANIZATION_ID
    

    其中:

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

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

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

    由于未设置政策,因此返回的政策不完整,如以下示例所示:

    constraint: "constraints/LIST_CONSTRAINT"
    etag: BwVJi0OOESU=
    
  2. 使用 deny 命令为要限制访问的服务添加拒绝的值。

    gcloud beta resource-manager org-policies deny \
      LIST_CONSTRAINT VALUE_A \
      --organization ORGANIZATION_ID
    

    该命令的输出将为:

    constraint: constraints/LIST_CONSTRAINT
    etag: BwVJi0OOESU=
    listPolicy:
      deniedValues:
        - VALUE_A
    updateTime: CURRENT_TIME
    
  3. 使用 describe --effective 查看当前的有效政策。

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --organization ORGANIZATION_ID
    

    该命令的输出将为:

    constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      deniedValues:
        - VALUE_A
    

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

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

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

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

层次结构子树值前缀是测试版功能,可能会以不向后兼容的方式更改,并且不在任何服务等级协议 (SLA) 或弃用政策的涵盖范围内。

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

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --organization ORGANIZATION_ID
    

    其中:

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

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

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

    由于未设置政策,因此返回的政策不完整,如以下示例所示:

    constraint: "constraints/LIST_CONSTRAINT"
    etag: BwVJi0OOESU=
    
  2. 使用 deny 命令为要限制访问的服务添加拒绝的值。under: 前缀设置限制条件以拒绝命名资源及其所有子资源。

    gcloud beta resource-manager org-policies deny \
      LIST_CONSTRAINT under:folders/VALUE_A \
      --organization ORGANIZATION_ID
    

    其中:

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

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

    • VALUE_B 和 VALUE_C 是层次结构中的项目,VALUE_A 是它们的父级。

    Deny 命令的输出将为:

    constraint: constraints/LIST_CONSTRAINT
    etag: BwVJi0OOESU=
    listPolicy:
      deniedValues:
        - under:folders/VALUE_A
    updateTime: CURRENT_TIME
    

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

    • under:organizations/VALUE_X

    • under:projects/VALUE_Y

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

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --organization ORGANIZATION_ID
    

    该命令的输出将为:

    constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      deniedValues:
        - under:folders/VALUE_A
    

    现在,该政策的评估结果为拒绝文件夹 VALUE_A 及其所有子资源,在本例中为 VALUE_B 和 VALUE_C

合并项目的组织政策

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

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

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --project PROJECT_ID
    

    其中:

    • PROJECT_ID 是项目的唯一标识符

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

    由于未设置政策,因此返回的政策不完整,如以下示例所示:

    constraint: "constraints/LIST_CONSTRAINT"
    etag: BwVJi0OOESU=
    
  2. 使用 describe --effective 命令显示当前的有效政策:

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
       --project PROJECT_ID
    

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

    constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      deniedValues:
        - VALUE_A
    
  3. 使用 set-policy 命令在项目上设置政策。

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

       constraint: constraints/LIST_CONSTRAINT
       listPolicy:
         deniedValues:
           - VALUE_B
           - VALUE_C
         inheritFromParent: true
       

    2. 运行 set-policy 命令:

       gcloud beta resource-manager org-policies set-policy 
      --project PROJECT_ID /tmp/policy.yaml

    3. 该命令的输出将为:

       constraint: constraints/LIST_CONSTRAINT
       etag: BwVLO2timxY=
       listPolicy:
         deniedValues:
           - VALUE_B
           - VALUE_C
         inheritFromParent: true
       

  4. 再次使用 describe --effective 命令显示更新后的政策:

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --project PROJECT_ID
    

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

    constraint: constraints/LIST_CONSTRAINT
      listPolicy:
        deniedValues:
          - VALUE_A
          - VALUE_B
          - VALUE_C
    

恢复默认限制条件行为

您可以使用组织政策中的 restoreDefault 值来重置政策,以使用限制条件的默认行为。以下示例假定默认限制条件行为是允许所有值。

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

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --project PROJECT_ID
    

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

    constraint: constraints/LIST_CONSTRAINT
      listPolicy:
        deniedValues:
          - VALUE_A
          - VALUE_B
          - VALUE_C
    
  2. 使用 set-policy 命令在项目上设置政策。

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

       restoreDefault: {}
       constraint: constraints/LIST_CONSTRAINT
       

    2. 运行 set-policy 命令:

       gcloud beta resource-manager org-policies set-policy 
      --project PROJECT_ID /tmp/restore-policy.yaml

    3. 该命令的输出将为:

       constraint: constraints/LIST_CONSTRAINT
       etag: BwVJi9D3VLY=
       restoreDefault: {}
       

  3. 获取有效政策,以验证默认行为:

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --project PROJECT_ID
    

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

    Constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      allValues: ALLOW
    

删除组织政策

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

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

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

    gcloud beta resource-manager org-policies delete \
      LIST_CONSTRAINT --organization ORGANIZATION_ID
    

    其中 ORGANIZATION_ID 是组织资源的唯一标识符。该命令的输出将为:

    Deleted [<Empty>].
    
  2. 获取组织的有效政策,以验证其是否未强制执行:

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --organization ORGANIZATION_ID
    

    该命令的输出将为:

    constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      allValues: ALLOW
    

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

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

    gcloud beta resource-manager org-policies delete \
      LIST_CONSTRAINT --project PROJECT_ID
    

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

    Deleted [<Empty>].
    
  2. 获取项目的有效政策,以验证其是否未强制执行:

    gcloud beta resource-manager org-policies describe \
      --effective \
      LIST_CONSTRAINT --project PROJECT_ID
    

    该命令的输出将为:

    constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      allValues: ALLOW
    

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

对组织资源设置强制执行

您可以在组织资源上设置组织政策,以强制执行布尔值限制条件。以下过程介绍如何使用 gcloud 命令行工具设置组织政策。如需了解如何使用 GCP Console 查看和设置组织政策,请参阅创建和管理政策

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

    gcloud beta resource-manager org-policies describe \
      BOOLEAN_CONSTRAINT --organization ORGANIZATION_ID
    

    其中 ORGANIZATION_ID 是组织资源的唯一标识符。您还可以使用 --folder--project 标志以及文件夹 ID项目 ID,将组织政策分别应用于文件夹或项目。

    由于未设置政策,因此返回的政策不完整,如以下示例所示:

    booleanPolicy: {}
    constraint: "constraints/BOOLEAN_CONSTRAINT"
    
  2. 使用 enable-enforce 命令设置政策,以便对组织强制执行:

    gcloud  resource-manager org-policies enable-enforce \
      BOOLEAN_CONSTRAINT --organization ORGANIZATION_ID
    

    该命令的输出将为:

    booleanPolicy:
      enforced: true
    constraint: constraints/BOOLEAN_CONSTRAINT
    etag: BwVJitxdiwY=
    
  3. 使用 describe --effective 查看当前的有效政策:

    gcloud beta resource-manager org-policies describe \
      BOOLEAN_CONSTRAINT --effective \
      --organization ORGANIZATION_ID
    

    该命令的输出将为:

    booleanPolicy:
      enforced: true
    constraint: constraints/BOOLEAN_CONSTRAINT
    

替换项目的组织政策

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

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

    gcloud beta resource-manager org-policies describe \
      BOOLEAN_CONSTRAINT --project PROJECT_ID
    

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

    booleanPolicy: {}
    constraint: "constraints/BOOLEAN_CONSTRAINT"
    
  2. 获取项目的有效政策,以确认对在该项目强制执行限制条件。

    gcloud beta resource-manager org-policies describe \
      BOOLEAN_CONSTRAINT --effective \
      --project PROJECT_ID
    

    该命令的输出将为:

    booleanPolicy:
      enforced: true
    constraint: constraints/BOOLEAN_CONSTRAINT
    
  3. 使用 disable-enforce 命令在项目上设置政策,使之不强制执行限制条件。

    gcloud beta resource-manager org-policies disable-enforce \
      BOOLEAN_CONSTRAINT --project PROJECT_ID
    

    该命令的输出将为:

    booleanPolicy: {}
    constraint: constraints/BOOLEAN_CONSTRAINT
    etag: BwVJivdnXvM=
    
  4. 获取有效政策,以显示不再对项目强制执行该政策。

    gcloud beta resource-manager org-policies describe \
      --effective \
      BOOLEAN_CONSTRAINT --project PROJECT_ID
    

    该命令的输出将为:

    booleanPolicy: {}
    constraint: constraints/BOOLEAN_CONSTRAINT
    

删除组织政策

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

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

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

    gcloud beta resource-manager org-policies delete \
      BOOLEAN_CONSTRAINT --organization ORGANIZATION_ID
    

    其中 ORGANIZATION_ID 是组织资源的唯一标识符。该命令的输出将为:

    Deleted [<Empty>].
    
  2. 获取组织的有效政策,以验证其是否未强制执行:

    gcloud beta resource-manager org-policies describe \
      --effective \
      BOOLEAN_CONSTRAINT --organization ORGANIZATION_ID
    

    该命令的输出将为:

    booleanPolicy: {}
    constraint: constraints/BOOLEAN_CONSTRAINT
    
  3. 使用 delete 命令删除项目中的组织政策:

    gcloud beta resource-manager org-policies delete \
      BOOLEAN_CONSTRAINT --project PROJECT_ID
    

    该命令的输出将为:

    Deleted [<Empty>].
    
  4. 获取项目的有效政策,以验证其是否未强制执行:

    gcloud beta resource-manager org-policies describe \
      BOOLEAN_CONSTRAINT --effective \
      --project PROJECT_ID
    

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

    booleanPolicy: {}
    constraint: constraints/BOOLEAN_CONSTRAINT
    
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Resource Manager 文档