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

借助适用于组织政策的 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.

    Enable the 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

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

测试政策更改

您可以同时测试对自定义限制条件、强制执行自定义或受管限制条件的组织政策所做的更改。

测试对自定义限制条件所做的更改

控制台

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

    转到“组织政策”

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

  3. 在项目选择器中,选择您的组织资源。

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

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

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

    1. 资源类型框中,选择 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 集群资源的组织政策类似于以下内容:

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

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

    • 您可以测试组织政策,以确定该政策是否会根据特定标记的存在情况有条件地强制执行自定义限制条件,方法是在定义组织政策的 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

      如需详细了解基于条件的组织政策,请参阅设置带有标记的组织政策

    • 您可以通过创建 JSON 或 YAML 文件来定义组织政策,并在该文件中不设置任何规则(除了从其父级资源继承政策),以测试删除强制执行自定义限制条件的组织政策的影响。

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

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

    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

测试对托管限制条件所做的更改

控制台

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

转到组织政策

  1. 从项目选择器中,选择要修改其组织政策的项目、文件夹或组织。

  2. 组织政策页面会显示适用于此资源的可用组织政策限制条件的可过滤列表。

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

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

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

  6. 选择添加规则

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

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

  9. 点击测试更改

系统随即会显示模拟记录页面,其中列出了您在过去 14 天内执行的模拟。如需了解详情,请参阅Policy Simulator 结果

gcloud

  1. 如需测试对受管限制条件所做的更改,请创建一个 JSON 或 YAML 文件,用于定义要测试的受管限制条件。

    name: RESOURCE_TYPE/RESOURCE_ID/policies/CONSTRAINT_NAME
    spec:
      rules:
      - enforce: ENFORCEMENT_STATE
    

    替换以下内容:

    • RESOURCE_TYPE 替换为 organizationsfoldersprojects

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

    • CONSTRAINT_NAME 替换为您要测试的受管约束条件的名称。例如 iam.managed.disableServiceAccountKeyCreation

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

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

    如需测试删除强制执行受管限制条件的组织政策,定义组织政策的 JSON 或 YAML 文件中除了继承其父级资源的政策之外,不应设置任何规则。

    例如,以下组织政策会模拟删除现有的 iam.managed.disableServiceAccountKeyCreation 管理型约束条件。

    name: organizations/ORGANIZATION_ID/policies/iam.managed.disableServiceAccountKeyCreation
    spec:
      inheritFromParent: true
    
  2. 运行 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。

控制台

  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. 点击 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 替换为输出文件的名称。

后续步骤