使用 Policy Simulator 测试组织政策更改

借助组织政策的 Policy Simulator,您可以先预览新的自定义限制条件或强制执行某个自定义限制条件的组织政策的影响,然后再在生产环境中实施该限制条件。Policy Simulator 提供在强制执行建议的政策之前违反建议的政策的资源列表,让您可以重新配置这些资源、请求例外情况或更改组织政策的适用范围,这一切都不会干扰开发者或关闭您的环境。

本页面介绍如何使用 Policy Simulator 测试对组织政策的更改。它还说明了如何解读模拟结果,以及如何应用经过测试的组织政策(如果您选择这样做)。

准备工作

  • 如果您使用的是 Google Cloud CLI,请设置要用于进行 API 调用的项目:

    gcloud config set project PROJECT_ID

    PROJECT_ID 替换为项目的名称或 ID。

  • 启用 Policy Simulator and Resource Manager API。

    启用 API

  • 可选:获取 组织政策服务简介

所需的角色

如需获取运行和访问模拟所需的权限,请让管理员向您授予组织的 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

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

测试政策更改

您可以测试对自定义限制条件的更改和/或强制执行自定义限制条件的组织政策的更改。

控制台

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

    转到“组织政策”

  2. 选择页面顶部的项目选择器。

  3. 从项目选择器中,选择要测试组织政策更改的资源。如需测试对自定义限制条件的更改,您必须选择组织资源。

  4. 如果您要测试新的自定义限制条件,请点击 自定义限制条件。如果要更改现有的自定义限制条件,请从组织政策页面上的列表中选择该限制条件,然后点击 修改限制条件

  5. 创建或更新您要测试的自定义限制条件。

    例如,如需定义一个自定义限制条件来限制未启用 Binary Authorization 的 Google Kubernetes Engine 集群资源的创建,请执行以下操作:

    1. Resource type 框中,选择 container.googleapis.com/Cluster

    2. 强制执行方法下,选择在创建时强制执行

    3. 点击 修改条件

    4. 添加条件面板中,输入 resource.binaryAuthorization.enabled == true

    5. 点击保存

    6. 操作下,选择允许

    如需了解详情,请参阅创建和管理自定义限制条件

  6. 点击测试限制条件

  7. 如果这是新限制条件或组织政策未强制执行的限制条件,您必须定义组织政策。

    1. 选择范围框中,选择要针对哪项资源测试此自定义限制条件。

    2. 点击自定义

    3. 点击添加规则

    4. 强制执行下,选择开启,然后点击完成

    5. 点击继续

此时将显示模拟历史记录页面,其中包含您在过去 14 天内执行的模拟的列表。如需了解详情,请参阅本页中的Policy Simulator 结果

gcloud

  1. 如需测试自定义限制条件,请创建一个 JSON 或 YAML 文件来定义要测试的自定义限制条件。

    例如,在未启用 Binary Authorization 的情况下,限制创建 Google Kubernetes Engine 集群资源的自定义限制条件与以下类似:

    name: "organizations/ORGANIZATION_ID/customConstraints/custom.EnforceGKEBinaryAuthz"
    resource_types: "container.googleapis.com/Cluster"
    method_types: CREATE
    condition: "resource.binaryAuthorization.enabled == true"
    action_type: ALLOW
    

    ORGANIZATION_ID 替换为您的组织 ID,例如 1234567890123

    如需详细了解如何创建自定义限制条件,请参阅创建和管理自定义限制条件

  2. 如需测试组织政策,以便根据特定标记的存在有条件地强制执行自定义限制条件,请创建一个 JSON 或 YAML 文件来定义要测试的组织政策。

    例如,以下组织政策限制了未启用 Binary Authorization 的 Google Kubernetes Engine 集群资源的创建,但附加了 env=dev 标记的资源除外。

    name: "organizations/ORGANIZATION_ID/policies/custom.EnforceGKEBinaryAuthz"
    spec:
        rules:
       - condition:
           expression: resource.matchTag('env', 'dev')
         enforce: false
       - enforce: true
    

    ORGANIZATION_ID 替换为您的组织 ID,例如 1234567890123

    如需详细了解条件组织政策,请参阅使用标记设置组织政策

  3. 如需测试强制执行自定义限制条件的组织政策,请创建一个 JSON 或 YAML 文件来定义要测试的组织政策。

    例如,在未启用 Binary Authorization 的情况下,限制创建的 Google Kubernetes Engine 集群资源的组织政策与以下类似:

    name: "organizations/ORGANIZATION_ID/policies/custom.EnforceGKEBinaryAuthz"
    spec:
        rules:
        - enforce: true
    

    ORGANIZATION_ID 替换为您的组织 ID,例如 1234567890123

  4. 如需测试强制执行自定义限制条件的组织政策的删除情况,请创建一个 JSON 或 YAML 文件来定义该组织政策,但不设置任何规则,并从其父级资源继承该政策。

    例如,以下组织政策将模拟删除现有的 custom.EnforceGKEBinaryAuthz 自定义限制条件。

    name: "organizations/ORGANIZATION_ID/policies/custom.EnforceGKEBinaryAuthz"
    spec:
          inheritFromParent: true
    
  5. 运行以下命令以模拟对自定义限制条件和/或组织政策的更改:

    gcloud beta 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

Policy Simulator 结果

Policy Simulator 会将自定义限制条件或组织政策的更改报告为违反模拟政策的行为列表。Google Cloud 控制台会存储您在过去 14 天内生成的模拟结果。

如需查看模拟结果,请前往模拟过程历史记录页面。

前往模拟运行的历史记录

选择一项模拟即可查看详细信息。在模拟报告页面上,您可以查看违规行为的预览,其中列出了由新的自定义限制条件或组织政策导致的违规总次数、模拟范围内检查的资源数量,以及模拟完成的时间。

如果您模拟了自定义限制条件,则可以点击限制条件详情以查看模拟的特定配置。如果您模拟了组织政策,政策详情标签页会显示模拟的配置。

所有违规问题都会列在资源表中。系统会列出违反新自定义限制条件或组织政策的每个资源,以及指向 Cloud Asset Inventory 中资源条目的链接。系统会显示项目、文件夹和组织资源,以及层次结构中位于其下方且违反新自定义限制条件或组织政策的资源的总和。

应用已测试的政策更改

测试自定义限制条件和/或组织政策后,您可以设置自定义限制条件并强制执行组织政策。您可以在 Google Cloud 控制台中查看所有 Policy Simulator 结果,无论结果是如何生成的。如果模拟报告包含的组织政策更改不超过一项,您可以通过模拟结果直接强制执行组织政策。如需在多个组织政策中强制执行测试更改,请使用 Google Cloud CLI。

控制台

  1. 如需强制执行自定义限制条件 Policy Simulator 结果,请转到模拟历史记录页面。

    前往模拟界面历史记录

  2. 选择要应用的自定义限制条件或组织政策的模拟报告。

  3. 如果此模拟报告包含自定义限制条件,请点击保存限制条件

  4. 如果此模拟报告包含的多项组织政策更改不超过一项,则您可以选择设置试运行政策,将该组织政策作为试运行政策来监控生产环境中的行为,而不会带来风险。随即会出现新组织政策页面的政策详情页面。

    您可以立即强制执行组织政策,方法是点击 ,然后选择设置政策

gcloud

  1. 如需强制执行自定义限制条件,您必须设置该限制条件,使其可用于组织中的组织政策。如需设置自定义限制条件,请使用 gcloud org-policies set-custom-constraint 命令:

    gcloud org-policies set-custom-constraint CONSTRAINT_PATH
    

    CONSTRAINT_PATH 替换为自定义限制条件文件的完整路径。例如 /home/user/customconstraint.yaml

    完成后,您的自定义限制条件将出现在您的 Google Cloud 组织政策列表中。

  2. 如需强制执行包含自定义限制条件的组织政策,请使用 gcloud org-policies set-policy 命令:

    gcloud org-policies set-policy POLICY_PATH
    

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

    此政策最多需要 15 分钟才能生效。

保存模拟结果

控制台

如果您使用的是 Google Cloud 控制台,则可以将 Policy Simulator 的结果另存为 CSV 文件。

  1. 如需保存 Policy Simulator 结果,请前往模拟历史记录页面。

    前往模拟界面历史记录

  2. 选择要保存的模拟报告。

  3. 点击 导出完整结果

gcloud

如果您使用的是 gcloud CLI,则可以将 Policy Simulator 结果另存为 JSON 或 YAML 文件。

默认情况下,Google Cloud CLI 中的测试结果以 YAML 格式输出。如需将测试结果保存为 YAML 文件,请在运行模拟时重定向 simulate orgpolicy 命令的输出:

> FILENAME

FILENAME 替换为输出文件的名称。

如需将测试结果保存为 JSON 文件,请在运行模拟时将以下标志添加到 simulate orgpolicy 命令:

--format=json > FILENAME

FILENAME 替换为输出文件的名称。

后续步骤