本指南介绍如何创建包含特定限制条件的组织政策。本页面上的示例中使用的限制条件不是真实的限制条件,而是用于教育目的的通用样本。
如需详细了解限制条件及其解决的问题,请参阅所有组织政策服务限制条件的列表。
准备工作
所需的角色
如需获得管理组织政策所需的权限,请让您的管理员为您授予组织的 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 对组织设置强制执行,请按照以下提示操作: 具体步骤:
使用
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.
使用
set-policy
命令针对组织设置政策。这会覆盖附加到该资源的所有政策。创建临时文件
/tmp/policy.yaml
以存储政策:name: organizations/ORGANIZATION_ID/policies/LIST_CONSTRAINT spec: rules: - values: deniedValues: - VALUE_A
运行
set-policy
命令:gcloud org-policies set-policy /tmp/policy.yaml
使用
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 存储。
使用
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.
使用
set-policy
命令针对项目设置政策。under:
前缀设置限制条件以拒绝命名资源及其所有子资源。创建临时文件
/tmp/policy.yaml
以存储政策:name: organizations/ORGANIZATION_ID/policies/LIST_CONSTRAINT spec: rules: - values: deniedValues: - under:folders/VALUE_A
运行
set-policy
命令:gcloud org-policies set-policy /tmp/policy.yaml
其中:
under:
是一个前缀,表示后面跟一个子树字符串。folders/VALUE_A
是要拒绝的根资源的文件夹 ID。将拒绝该资源及其在资源层次结构中的所有子级。
如下列示例所示,您还可以将
under:
前缀应用于组织和项目:under:organizations/VALUE_X
under:projects/VALUE_Y
使用
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 分钟才能完全实施。
合并项目的组织政策
您可以在资源上设置组织政策,该政策将与从其父级资源继承的任何政策合并。然后,系统将对合并后的政策进行评估,根据继承规则创建新的有效政策。
使用
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.
使用
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
使用
set-policy
命令针对项目设置政策。创建临时文件
/tmp/policy.yaml
以存储政策:name: projects/PROJECT_ID/policies/LIST_CONSTRAINT spec: inheritFromParent: true rules: - values: deniedValues: - VALUE_B - VALUE_C
运行
set-policy
命令:gcloud org-policies set-policy /tmp/policy.yaml
再次使用
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
命令重置政策,以便使用限制条件的默认行为。如需查看所有可用限制条件及其默认值的列表,请参阅组织政策限制条件。以下示例假定默认限制条件行为是允许所有值。
获取项目的有效政策,以显示当前合并后的政策:
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
使用
reset
命令重置组织政策。gcloud org-policies reset LIST_CONSTRAINT \ --project=PROJECT_ID
获取有效政策,以验证默认行为:
gcloud org-policies describe \ LIST_CONSTRAINT --effective \ --project=PROJECT_ID
该命令的输出将允许所有值:
name: projects/PROJECT_ID/policies/LIST_CONSTRAINT spec: rules: - allowAll: true
对组织政策的更改最长可能需要 15 分钟才能完全实施。
删除组织政策
您可以删除资源中的组织政策。未设置组织政策的资源将继承其父级资源的任何政策。如果您删除组织资源上的组织政策,则有效政策将为限制条件的默认行为。
以下步骤描述了如何删除组织的组织政策。
使用
delete
命令删除组织资源的政策:gcloud org-policies delete \ LIST_CONSTRAINT \ --organization=ORGANIZATION_ID
替换 ORGANIZATION_ID 替换为组织资源的唯一标识符。模型的输出 该命令将是:
Deleted policy [organizations/ORGANIZATION_ID/policies/LIST_CONSTRAINT]. {}
获取组织的有效政策,以验证其是否未强制执行:
gcloud org-policies describe \ LIST_CONSTRAINT --effective \ --organization=ORGANIZATION_ID
该命令的输出将为:
name: organizations/ORGANIZATION_ID/policies/LIST_CONSTRAINT spec: rules: - allowAll: true
以下步骤描述了如何删除项目的组织政策:
使用
delete
命令删除项目的政策:gcloud org-policies delete \ LIST_CONSTRAINT \ --project=PROJECT_ID
其中,
PROJECT_ID
是项目的唯一标识符。该命令的输出将为:Deleted policy [projects/PROJECT_ID/policies/LIST_CONSTRAINT]. {}
获取项目的有效政策,以验证其是否未强制执行:
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 控制台设置组织政策,请参阅 创建和管理政策。
使用
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.
使用
set-policy
命令针对项目设置政策。创建临时文件
/tmp/policy.yaml
以存储政策:name: organizations/ORGANIZATION_ID/policies/BOOLEAN_CONSTRAINT spec: rules: - enforce: true
运行
set-policy
命令:gcloud org-policies set-policy /tmp/policy.yaml
使用
describe --effective
查看当前的有效政策:gcloud org-policies describe \ BOOLEAN_CONSTRAINT --effective \ --organization=ORGANIZATION_ID
该命令的输出将为:
name: organizations/ORGANIZATION_ID/policies/BOOLEAN_POLICY spec: rules: - enforce: true
对组织政策的更改最长可能需要 15 分钟才能完全实施。
替换项目的组织政策
要替换项目的组织政策,请设置一项政策,以停止对项目下方层次结构中的所有资源强制执行布尔值限制条件。
获取资源的当前政策,以显示其为空。
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.
获取项目的有效政策,以确认对在该项目强制执行限制条件。
gcloud org-policies describe \ BOOLEAN_CONSTRAINT --effective \ --project=PROJECT_ID
该命令的输出将为:
name: projects/PROJECT_ID/policies/BOOLEAN_POLICY spec: rules: - enforce: true
使用
set-policy
命令针对项目设置政策。创建临时文件
/tmp/policy.yaml
以存储政策:name: projects/PROJECT_ID/policies/BOOLEAN_CONSTRAINT spec: rules: - enforce: false
运行
set-policy
命令:gcloud org-policies set-policy /tmp/policy.yaml
获取有效政策,以显示不再对项目强制执行该政策。
gcloud org-policies describe \ BOOLEAN_CONSTRAINT --effective \ --project=PROJECT_ID
该命令的输出将为:
name: organizations/ORGANIZATION_ID/policies/BOOLEAN_POLICY spec: rules: - enforce: false
对组织政策的更改最长可能需要 15 分钟才能完全实施。
删除组织政策
您可以删除资源中的组织政策。未设置组织政策的资源将继承其父级资源的任何政策。如果您删除组织资源上的组织政策,则有效政策将为限制条件的默认行为。
以下步骤描述了如何删除组织和项目的组织政策。
使用
delete
命令删除组织资源中的政策:gcloud org-policies delete \ BOOLEAN_CONSTRAINT \ --organization=ORGANIZATION_ID
替换
ORGANIZATION_ID
替换为组织资源的唯一标识符。模型的输出 该命令将是:Deleted policy [organizations/ORGANIZATION_ID/policies/BOOLEAN_CONSTRAINT]. {}
获取组织的有效政策,以验证其是否未强制执行:
gcloud org-policies describe \ BOOLEAN_CONSTRAINT --effective \ --organization=ORGANIZATION_ID
如果未设置政策,则会返回
NOT_FOUND
错误:ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
使用
delete
命令删除项目中的组织政策:gcloud org-policies delete \ BOOLEAN_CONSTRAINT \ --project=PROJECT_ID
该命令的输出将为:
Deleted policy [organizations/ORGANIZATION_ID/policies/BOOLEAN_CONSTRAINT]. {}
获取项目的有效政策,以验证其是否未强制执行:
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 分钟才能完全强制执行。