组织政策的 Policy Simulator 可让您在生产环境中强制执行新的自定义限制条件或强制执行自定义或受管限制条件的组织政策之前,预览其影响。Policy Simulator 会提供一份资源列表,其中列出了在拟议政策强制执行之前违反该政策的资源,以便您重新配置这些资源、请求例外情况或更改组织政策的适用范围,而不会中断开发者的工作或导致环境停机。
本页面介绍了如何使用 Policy Simulator 测试组织政策的更改。此外,本页面还介绍了如何解读模拟结果以及如何应用测试的组织政策(如果您选择这样做)。
准备工作
-
如果您使用的是 Google Cloud CLI,请设置要用于进行 API 调用的项目:
gcloud config set project PROJECT_ID
将
PROJECT_ID
替换为项目的名称或 ID。 -
Enable the Policy Simulator and Resource Manager APIs.
- 可选: 组织政策服务简介。
所需的角色
如需获得运行和访问模拟所需的权限,请让您的管理员为您授予组织的 OrgPolicy Simulator Admin (roles/policysimulator.orgPolicyAdmin
) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含运行和访问模拟所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需运行和访问模拟,需要具备以下权限:
-
orgpolicy.constraints.list
-
orgpolicy.customConstraints.get
-
orgpolicy.policies.list
-
cloudasset.assets.searchAllResources
-
cloudasset.assets.listResource
-
cloudasset.assets.listOrgPolicy
-
policysimulator.orgPolicyViolationsPreviews.list
-
policysimulator.orgPolicyViolationsPreviews.get
-
policysimulator.orgPolicyViolationsPreviews.create
-
policysimulator.orgPolicyViolations.list
测试政策更改
您可以同时测试对自定义限制条件、强制执行自定义或受管理限制条件的组织政策的更改,也可以单独测试。
测试对自定义限制条件所做的更改
控制台
在 Google Cloud 控制台中,转到组织政策页面。
从组织选择器中,选择您的组织资源。
执行下列其中一项操作:
如需测试新的自定义限制条件,请点击
自定义限制条件。如需更改现有的自定义限制条件,请在组织政策页面上从列表中选择相应限制条件,然后点击
修改限制条件。
创建或更新要测试的自定义限制条件。
在显示名称框中,为限制条件输入一个易记的名称。此字段的最大长度为 200 个字符。 请勿在显示名称中使用 PII 或敏感数据,因为这类内容可能会在错误消息中公开。
在限制条件 ID 框中,为新的自定义限制条件输入所需的名称。自定义限制条件必须以
custom.
开头,只能包含大写字母、小写字母或数字,例如custom.disableGkeAutoUpgrade
。该字段的最大长度为 70 个字符,不计算前缀,例如organizations/123456789/customConstraints/custom.
。请勿在您的限制条件 ID 中包含个人身份信息或者敏感数据,因为它们可能会出现在错误消息中。自定义限制条件创建后,便无法更改限制条件 ID。
在说明框中,输入直观易懂的限制条件说明,在违反政策时此说明内容会以错误消息的形式显示。此字段的最大长度为 2000 个字符。 请勿在说明中包含个人身份信息或敏感数据,因为这类内容可能会在错误消息中公开。
在资源类型框中,选择包含要限制的对象和字段的 Google CloudREST 资源的名称,例如
container.googleapis.com/NodePool
。大多数资源类型每项资源最多可有 20 个自定义限制条件。如果您尝试为已具有最大数量的自定义限制条件的资源创建自定义限制条件,操作将失败。在强制执行方法部分中,选择是对 REST
CREATE
方法强制执行限制条件,还是同时对CREATE
和UPDATE
方法强制执行限制条件。并非所有 Google Cloud 服务都支持这两种方法。如需查看每种服务支持的方法,请在支持的服务中找到相应服务。如需定义条件,请点击
修改条件。在添加条件面板中,创建一个引用受支持的服务资源的 CEL 条件,例如
resource.management.autoUpgrade == false
。此字段的最大长度为 1,000 个字符。如需详细了解 CEL 用法,请参阅通用表达式语言。如需详细了解可在自定义限制条件中使用的服务资源,请参阅自定义限制条件支持的服务。点击保存。
在操作部分中,选择在满足您编写的条件时是允许还是拒绝评估的方法。
拒绝操作意味着,如果条件计算结果为 true,则系统会阻止创建或更新资源的操作。
“允许”操作意味着,只有当条件计算结果为 true 时,才允许执行创建或更新资源的操作。除了条件中明确列出的情况之外,其他所有情况都会被阻止。
点击测试限制条件。
如果这是新限制条件,系统会显示配置组织政策窗格。如需定义强制执行自定义限制条件的组织政策,请执行以下操作:
在选择范围框中,选择要测试自定义限制条件的资源。
点击覆盖父级资源的政策。
点击添加规则。
在强制执行部分中,选择开启。
(可选)如需使组织政策成为基于某个标记的条件政策,请点击添加条件。如果您向组织政策添加条件规则,则必须至少添加一个无条件规则,否则无法保存政策。如需了解详情,请参阅设置带有标记的组织政策。
点击完成,然后点击继续。
系统会显示模拟历史记录页面,其中列出了您在过去 14 天内执行的模拟。如需了解详情,请参阅本页面上的Policy Simulator 结果。
gcloud
如需测试强制执行新的或更新后的自定义限制条件,请创建一个 JSON 或 YAML 文件,用于定义您要测试的自定义限制条件。
如果您想测试对现有自定义限制条件的更改,可以使用
organizations.customConstraints.get
gcloud CLI 命令检索自定义限制条件的当前 JSON 或 YAML 表示形式,然后对该文件进行修改。用于定义自定义限制条件的 YAML 文件类似于以下内容:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME resourceTypes: - RESOURCE_NAME methodTypes: - METHOD1 - METHOD2 condition: "CONDITION" actionType: ACTION displayName: DISPLAY_NAME description: DESCRIPTION
替换以下内容:
ORGANIZATION_ID
:您的组织 ID,例如123456789
。CONSTRAINT_NAME
:新的自定义限制条件的名称。 自定义限制条件必须以custom.
开头,只能包含大写字母、小写字母或数字,例如custom.disableGkeAutoUpgrade
。该字段的最大长度为 70 个字符,不计算前缀,例如organizations/123456789/customConstraints/custom.
。RESOURCE_NAME
:包含要限制的对象和字段的Google Cloud REST 资源的完全限定名称。例如container.googleapis.com/NodePool
。大多数资源类型每项资源最多可有 20 个自定义限制条件。如果您尝试为已达到自定义限制条件数量上限的资源创建自定义限制条件,操作将失败。如需详细了解可在自定义限制条件中使用的服务资源,请参阅自定义限制条件支持的服务。METHOD1,METHOD2
:要对其强制执行限制条件的 RESTful 方法的列表。可以是CREATE
或CREATE
和UPDATE
。 并非所有 Google Cloud 服务都支持这两种方法。如需查看每种服务支持的方法,请在支持的服务中找到相应服务。CONDITION
:引用受支持的服务资源的 CEL 条件,例如"resource.management.autoUpgrade == false"
。此字段的最大长度为 1,000 个字符。如需详细了解 CEL 用法,请参阅通用表达式语言。ACTION
:满足condition
时要执行的操作。可以是ALLOW
或DENY
。拒绝操作意味着,如果条件计算结果为 true,则创建或更新资源的操作会被阻止。
“允许”操作意味着,如果条件的计算结果为 true,则允许执行创建或更新资源的操作。这也意味着,除了条件中明确列出的情况之外,其他所有情况都会被阻止。
DISPLAY_NAME
:限制条件的直观易记名称。 此字段的最大长度为 200 个字符。DESCRIPTION
:直观易懂的限制条件说明,在违反政策时显示为错误消息。 此字段的最大长度为 2000。如需详细了解如何创建自定义限制条件,请参阅创建和管理自定义限制条件。
创建或修改强制执行自定义限制条件的组织政策。
如需测试强制执行新的或更新的自定义限制条件,请创建一个 JSON 或 YAML 文件,用于定义要测试的组织政策:
name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true
替换以下内容:
将
ORGANIZATION_ID
替换为您的组织 ID,例如1234567890123
。将
CONSTRAINT_NAME
替换为您要测试的自定义限制的名称。例如custom.EnforceGKEBinaryAuthz
。
如需测试在存在特定标记时有条件地强制执行自定义限制条件,请创建一个定义组织政策的 JSON 或 YAML 文件:
name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME spec: rules: - condition: expression: CONDITION enforce: false - enforce: true
替换以下内容:
将
ORGANIZATION_ID
替换为您的组织 ID,例如1234567890123
。将
CONSTRAINT_NAME
替换为您要测试的自定义限制的名称。例如custom.EnforceGKEBinaryAuthz
。CONDITION
,其中包含引用受支持的服务资源的 CEL 条件,例如"resource.matchTag('env', 'dev')"
。
如需详细了解有条件的组织政策,请参阅设置带有标记的组织政策。
如需测试删除强制执行自定义限制条件的组织政策,请创建一个 JSON 或 YAML 文件,用于定义组织政策,其中未设置任何规则,仅从父资源继承政策:
name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME spec: inheritFromParent: true
替换以下内容:
将
ORGANIZATION_ID
替换为您的组织 ID,例如1234567890123
。将
CONSTRAINT_NAME
替换为您要测试的自定义限制的名称。例如custom.EnforceGKEBinaryAuthz
。
如需模拟对自定义限制条件和/或组织政策的更改,请运行
policy-intelligence simulate orgpolicy
命令:gcloud policy-intelligence simulate orgpolicy \ --organization=ORGANIZATION_ID \ --custom-constraints=CONSTRAINT_PATH \ --policies=POLICY_PATH
替换以下内容:
ORGANIZATION_ID
:您的组织 ID,例如1234567890123
。不支持模拟多个组织中的更改。CONSTRAINT_PATH
:您创建或更新的自定义限制条件的完整路径。例如tmp/constraint.yaml
。如果您设置了--policies
标志,则无需设置--custom-constraints
标志。POLICY_PATH
:您创建或更新的组织政策的完整路径。例如,tmp/policy.yaml
如果您设置了--custom-constraints
标志,则无需设置--policies
标志。
几分钟后,该命令会输出资源列表,其中列出了会违反自定义限制条件、组织政策或两者兼而有之的更改的资源。
您还可以在 Google Cloud 控制台的模拟历史记录页面上查看结果。请参阅本页面上的Policy Simulator 结果,了解如何解读结果。
以下是组织政策模拟的示例响应。
此模拟涉及一项自定义限制条件,该限制条件会限制创建未启用 Binary Authorization 的 Google Kubernetes Engine 集群资源。在这种情况下,如果应用了建议的更改,则会有两个集群资源违反该政策:项目 simulator-test-project
下的 orgpolicy-test-cluster
和项目 orgpolicy-test-0
下的 autopilot-cluster-1
。
Waiting for operation [organizations/012345678901/locations/global/orgPolic
yViolationsPreviews/85be9a2d-8c49-470d-a65a-d0cb9ffa8f83/operations/1883a83
c-c448-42e5-a7c5-10a850928f06] to complete...done.
---
customConstraint:
actionType: ALLOW
condition: resource.binaryAuthorization.enabled == true
methodTypes:
- CREATE
name: organizations/012345678901/customConstraints/custom.EnforceGKEBinaryAuthz
resourceTypes:
- container.googleapis.com/Cluster
name: organizations/012345678901/locations/global/orgPolicyViolationsPreviews/3dd47fd3-6df1-4156-8f10-413a3fc0ed83/orgPolicyViolations/b9fd23a5-7163-46de-9fec-7b9aa6af1113
resource:
ancestors:
- organizations/012345678901
- projects/456789012345
assetType: container.googleapis.com/Cluster
resource: //container.googleapis.com/projects/simulator-test-project/locations/us-central1/clusters/orgpolicy-test-cluster
---
customConstraint:
actionType: ALLOW
condition: resource.binaryAuthorization.enabled == true
methodTypes:
- CREATE
name: organizations/012345678901/customConstraints/custom.EnforceGKEBinaryAuthz
resourceTypes:
- container.googleapis.com/Cluster
name: organizations/012345678901/locations/global/orgPolicyViolationsPreviews/3dd47fd3-6df1-4156-8f10-413a3fc0ed83/orgPolicyViolations/e73896e6-7613-4a8d-8436-5df7a6455121
resource:
ancestors:
- organizations/012345678901
- folders/789012345678
- projects/456789012345
assetType: container.googleapis.com/Cluster
resource: //container.googleapis.com/projects/orgpolicy-test-0/locations/us-central1/clusters/autopilot-cluster-1
测试对受管理限制条件的更改
控制台
在 Google Cloud 控制台中,转到组织政策页面。
点击**选择项目**,然后选择要为其修改组织政策的组织、文件夹或项目资源。
从列表中选择要为其更新组织政策的受管理限制条件。在政策详情页面上,您可以查看相应组织政策的来源、此资源上的有效政策评估,以及有关受管理的限制条件的更多详细信息。
如需为该资源更新组织政策,请点击管理政策。
在修改政策页面,选择覆盖父资源的政策。
点击添加规则。
在强制执行部分中,选择开启还是关闭此组织政策的强制执行。
(可选)如需使组织政策成为基于某个标记的条件政策,请点击添加条件。如果您向组织政策添加条件规则,则必须至少添加一个无条件规则,否则无法保存政策。 如需了解详情,请参阅设置带有标记的组织政策。
点击测试更改。
系统会显示模拟历史记录页面,其中列出了您在过去 14 天内执行的模拟。如需了解详情,请参阅本页面上的Policy Simulator 结果。
gcloud
创建或修改强制实施受管理限制条件的组织政策。
如需测试创建或更新强制执行受管理限制条件的组织政策,请创建一个用于定义组织政策的 JSON 或 YAML 文件。
name: RESOURCE_TYPE/RESOURCE_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: ENFORCEMENT_STATE
替换以下内容:
将
RESOURCE_TYPE
替换为organizations
、folders
或projects
。RESOURCE_ID
替换为您的组织 ID、文件夹 ID、项目 ID 或项目编号,具体取决于在RESOURCE_TYPE
中指定的资源类型。将
CONSTRAINT_NAME
替换为您要测试的受管限制的名称。例如iam.managed.disableServiceAccountKeyCreation
。ENFORCEMENT_STATE
,其中true
表示在设置时强制执行此组织政策,false
表示在设置时停用此组织政策。
(可选)如需使组织政策成为基于某个标记的条件性政策,请向
rules
添加condition
块。如果您向组织政策添加条件规则,则必须至少添加一个无条件规则,否则无法保存政策。如需了解详情,请参阅设置带有标记的组织政策。如需测试对强制执行受管理限制条件的组织政策的删除操作,请创建一个 JSON 或 YAML 文件,用于定义组织政策,但该政策未设置任何规则,只是从父资源继承政策:
name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME spec: inheritFromParent: true
替换以下内容:
将
ORGANIZATION_ID
替换为您的组织 ID。将
CONSTRAINT_NAME
替换为您要删除的受管限制的名称。例如iam.managed.disableServiceAccountKeyCreation
。
运行
policy-intelligence simulate orgpolicy
命令:gcloud policy-intelligence simulate orgpolicy \ --organization=ORGANIZATION_ID \ --policies=POLICY_PATH
替换以下内容:
将
ORGANIZATION_ID
替换为您的组织 ID,例如1234567890123
。不支持模拟多个组织中的更改。POLICY_PATH
替换为组织政策 YAML 文件的完整路径。
几分钟后,该命令会输出资源列表,其中列出了会违反自定义限制条件、组织政策或两者兼而有之的更改的资源。
您还可以在 Google Cloud 控制台的模拟历史记录页面上查看结果。请参阅本页面上的Policy Simulator 结果,了解如何解读结果。
Policy Simulator 结果
Policy Simulator 会将自定义限制或组织政策的更改结果报告为模拟政策的违规列表。Google Cloud 控制台会存储您在过去 14 天内生成的模拟结果。
如需查看模拟结果,请前往模拟历史记录页面。
选择一个模拟练习即可查看详情。在模拟报告页面上,您可以查看违规行为预览,其中列出了新的自定义限制条件或组织政策导致的总违规次数、模拟范围内检查的资源数量,以及模拟完成的时间。
如果您模拟了自定义限制条件,可以点击限制条件详细信息,查看模拟的具体配置。如果您模拟了组织政策,政策详细信息标签页会显示模拟的配置。
所有违规行为都列在资源表中。系统会列出违反新自定义限制条件或组织政策的每个资源,并提供指向 Cloud Asset Inventory 中相应资源条目的链接。系统会显示项目、文件夹和组织资源,以及层次结构中违反新自定义限制或组织政策的资源总数。
应用经过测试的政策更改
测试完自定义限制条件和/或组织政策后,您可以设置自定义限制条件并强制执行组织政策。无论 Policy Simulator 结果是如何生成的,您都可以在 Google Cloud 控制台中查看所有结果。如果模拟报告中包含的组织政策更改不超过一项,您可以通过模拟结果直接强制执行组织政策。如需在多项组织政策中强制执行测试变更,请使用 Google Cloud CLI。
控制台
如需强制执行自定义限制条件 Policy Simulator 结果,请前往模拟运行的历史记录页面。
选择要应用的自定义限制条件或组织政策的模拟报告。
如果此模拟报告包含自定义约束条件,请点击保存约束条件。
如果此模拟报告包含不超过一项组织政策的更改,您可以点击设置试运行政策,将相应组织政策作为试运行政策应用,以便监控生产环境中的行为,而不会带来风险。系统随即会显示新组织政策的政策详情页面。
您可以点击
,然后点击设置政策,立即强制执行组织政策。
gcloud
如需强制执行自定义限制条件,您必须对其进行设置,以使其可用于组织中的组织政策。如需设置自定义限制条件,请使用 gcloud org-policies set-custom-constraint 命令:
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
将
CONSTRAINT_PATH
替换为自定义限制条件文件的完整路径。例如/home/user/customconstraint.yaml
。完成后,您的自定义限制条件会显示在 Google Cloud 组织政策列表中。
如需设置组织政策,请使用 gcloud org-policies set-policy 命令:
gcloud org-policies set-policy POLICY_PATH
将
POLICY_PATH
替换为组织政策 YAML 文件的完整路径。该政策最长需要 15 分钟才能生效。
保存模拟结果
控制台
如果您使用的是 Google Cloud 控制台,则可以将 Policy Simulator 结果另存为 CSV 文件。
如需保存 Policy Simulator 结果,请前往模拟历史记录页面。
选择要保存的模拟报告。
点击
Export full results(导出完整结果)。
gcloud
如果您使用的是 gcloud CLI,则可以将 Policy Simulator 结果另存为 JSON 或 YAML 文件。
默认情况下,Google Cloud CLI 中的测试结果以 YAML 格式输出。如需将测试结果另存为 YAML 文件,请在运行模拟时重定向 simulate orgpolicy
命令的输出:
> FILENAME
将 FILENAME
替换为输出文件的名称。
如需将测试结果另存为 JSON 文件,请在运行模拟时将以下标志添加到 simulate orgpolicy
命令:
--format=json > FILENAME
将 FILENAME
替换为输出文件的名称。