在试运行模式下创建组织政策

本页介绍了如何在试运行模式下使用组织政策来监控政策变更在强制执行之前会对工作流产生哪些影响。

试运行模式下的组织政策的创建和强制执行方式与其他组织政策类似,并且系统会记录违反政策的行为,但不会拒绝违反政策的操作。

准备工作

如需在试运行模式下使用组织政策,您必须为 Google Cloud 项目启用结算功能。如需了解如何检查项目是否已启用结算功能,请参阅验证项目的结算状态

如需详细了解组织政策和限制条件及其工作原理,请参阅组织政策服务简介

所需的角色

如需获得管理组织政策所需的权限,请让您的管理员为您授予组织的 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

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

您可以通过向组织政策管理员角色绑定添加 IAM 条件来委托组织政策的管理权限。如需控制主账号可以管理组织政策的资源,您可以使角色绑定以特定标记为条件。如需了解详情,请参阅使用限制条件

限制

可用于试运行组织政策的组织政策限制条件只有以下几种:

尝试使用任何其他限制在试运行模式下创建组织政策会导致错误。

在试运行模式下创建组织政策

使用列表参数

您可以使用Google Cloud 控制台或 Google Cloud CLI 以试运行模式为限制条件创建组织政策。以下示例演示了如何在试运行模式下创建组织政策,以审核 compute.managed.restrictProtocolForwardingCreationForTypes 受管限制条件的效果。

控制台

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

    转到组织政策

  2. 在项目选择器中,选择要为其设置组织政策的资源。

  3. 组织政策页面上,从列表中选择限制协议转发的使用这一限制。

  4. 选择试运行标签页。

  5. 点击管理试运行政策

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

  7. 点击添加规则

  8. 实施下,选择开启

  9. 参数下,选择修改

  10. 修改形参值窗格中,选择用户定义

  11. 用户定义的值框中,输入 EXTERNAL,然后点击保存

  12. 点击测试更改以模拟此组织政策的效果。如需了解详情,请参阅使用 Policy Simulator 测试组织政策更改

  13. 如需在试运行模式下强制执行组织政策,请点击设置试运行政策。您也可以点击设置政策来设置直播政策。

您可以前往组织政策限制条件的试运行标签页,验证组织政策在试运行模式下的状态。

对于应用了处于试运行模式的组织政策的项目,您可以点击查看拒绝日志来查看审核日志。对于此组织政策,审核日志会显示违规情况,就好像强制执行了限制协议转发的使用限制条件,以仅允许 EXTERNAL 协议转发部署。

gcloud

如需在试运行模式下创建组织政策,请创建一个 YAML 文件,其中使用 dryRunSpec 定义限制条件。例如:

  name: RESOURCE_TYPE/RESOURCE_ID/policies/compute.managed.restrictProtocolForwardingCreationForTypes
  dryRunSpec:
    rules:
    - enforce: true
      parameters:
       allowedSchemes:
        - EXTERNAL

替换以下内容:

  • RESOURCE_TYPE 替换为 organizationsfoldersprojects

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

此组织政策不会强制执行 compute.managed.restrictProtocolForwardingCreationForTypes 限制条件,但审核日志会显示违规情况,就好像它强制执行了该限制条件一样。

如果您同时定义了 specdryRunSpec,则可以在同一 YAML 文件中设置有效组织政策和试运行组织政策。例如:

name: RESOURCE_TYPE/RESOURCE_ID/policies/compute.managed.restrictProtocolForwardingCreationForTypes
spec:
  rules:
  - values:
      allowedValues:
      - INTERNAL
      - EXTERNAL

dryRunSpec:
  rules:
  - values:
      allowedValues:
      - INTERNAL

如需在试运行模式下强制执行组织政策,请使用 org-policies set policy 命令。如需在预运行模式下使用新限制条件更新现有组织政策,请使用 --update-mask 标志。例如:

gcloud org-policies set-policy POLICY_PATH \
  --update-mask=UPDATE_MASK

替换以下内容:

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

  • UPDATE_MASK,使用 spec 仅更新实时政策,或使用 dryRunSpec 仅以试运行模式更新组织政策。您还可以使用 * 同时更新 specdryRunSpec 字段。如果在更新现有组织政策时未设置此字段,此命令将导致错误,并且组织政策不会更新。

您可以使用 org-policies describe 命令验证是否已设置处于试运行模式的组织政策。只有当组织政策中存在 dryRunSpec 字段时,该字段才会显示。

此组织政策将强制执行 compute.managed.restrictProtocolForwardingCreationForTypes 限制条件,以便允许所有值。不过,审核日志会显示违规情况,就好像只允许 INTERNAL 协议转发部署一样。

使用布尔值规则

您可以使用 Google Cloud 控制台或 Google Cloud CLI 为具有布尔值规则的限制条件创建处于预运行模式的组织政策。以下示例演示了如何在模拟运行模式下创建组织政策,以审核自定义组织政策的效果。

控制台

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

    转到组织政策

  2. 在项目选择器中,选择要为其设置组织政策的资源。

  3. 组织政策页面上的列表中选择要强制执行的自定义组织政策。

  4. 选择试运行标签页。

  5. 点击管理试运行政策

  6. 修改试运行政策页面,选择覆盖父资源的政策

  7. 点击添加规则

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

  9. 如需在试运行模式下强制执行组织政策,请点击设置试运行政策。验证以预运行模式运行的组织政策是否按预期工作后,您可以点击设置政策来设置有效政策。

您可以前往组织政策限制条件的试运行标签页,验证组织政策在试运行模式下的状态。

对于应用了处于试运行模式的组织政策的项目,您可以点击查看拒绝日志来查看审核日志。对于此组织政策,审核日志会显示违规情况,就好像强制执行了自定义组织政策一样。

gcloud

如需在试运行模式下创建组织政策,请创建一个 YAML 文件,其中使用 dryRunSpec 定义限制条件。例如:

  name: RESOURCE_TYPE/RESOURCE_ID/policies/CONSTRAINT_NAME
  dryRunSpec:
    rules:
    - enforce: true

替换以下内容:

  • RESOURCE_TYPE 替换为 organizationsfoldersprojects

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

  • CONSTRAINT_NAME 替换为自定义限制的名称。例如 custom.disableGkeAutoUpgrade

此组织政策不会强制执行自定义限制条件,但审核日志会显示违规情况,就好像它强制执行了自定义限制条件一样。

如果您同时定义了 specdryRunSpec,则可以在同一 YAML 文件中设置实时组织政策和处于试运行模式的组织政策。例如:

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

dryRunSpec:
  rules:
  - enforce: true

如需在试运行模式下强制执行组织政策,请使用 org-policies set policy 命令。如需在预运行模式下使用新限制条件更新现有组织政策,请使用 --update-mask 标志。例如:

gcloud org-policies set-policy POLICY_PATH \
  --update-mask=UPDATE_MASK

替换以下内容:

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

  • UPDATE_MASK,使用 spec 仅更新实时政策,或使用 dryRunSpec 仅以试运行模式更新组织政策。您还可以使用 * 同时更新 specdryRunSpec 字段。如果在更新现有组织政策时未设置此字段,此命令将导致错误,并且组织政策不会更新。

您可以使用 org-policies describe 命令验证是否已设置处于模拟运行模式下的组织政策。只有当组织政策中存在 dryRunSpec 字段时,该字段才会显示。

此组织政策不会强制执行自定义限制条件。不过,审核日志会显示自定义约束条件的违规情况。

在试运行模式下基于有效政策创建组织政策

您可以将现有组织政策用作处于试运行模式的组织政策的起点。您可能需要这样做,以了解对现有政策的更改会对您的环境产生哪些影响。

您可以使用 Google Cloud 控制台或 Google Cloud CLI 基于现有政策创建处于预运行模式的组织政策。

控制台

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

    转到组织政策

  2. 在项目选择器中,选择已配置限制资源服务使用情况限制条件的资源。

  3. 组织政策页面上,选择列表中的限制资源服务使用这一限制。

  4. 选择直播标签页。

  5. 点击管理政策

  6. 点击添加规则

  7. 政策值中,选择自定义

  8. 政策类型中,选择拒绝

  9. 自定义值框中,输入 appengine.googleapis.com

  10. 点击完成,然后点击设置试运行政策

gcloud

如需基于现有的有效组织政策以试运行模式创建组织政策,请使用 org-policies describe 命令获取资源的当前政策。例如:

gcloud org-policies describe gcp.restrictServiceUsage \
  --project=PROJECT_ID

PROJECT_ID 替换为配置相应组织政策的项目的 ID 或项目编号。

输出应类似如下所示:

  name: projects/123456789012/policies/gcp.restrictServiceUsage
  spec:
    etag: CJy93KEGEKCJw/QB
    rules:
    - values:
        allowedValues:
        - compute.googleapis.com
  updateTime: '2023-04-12T21:11:56.512804Z'

将此命令的输出复制到临时文件中。修改此文件以移除 etagupdateTime 字段,并将 spec 字段更改为 dryRunSpec。以试运行模式对组织政策中要测试的限制条件配置进行任何更改。

完成后的 YAML 文件应类似于以下内容:

  name: projects/123456789012/policies/gcp.restrictServiceUsage
  dryRunSpec:
    rules:
    - values:
        allowedValues:
        - compute.googleapis.com
        - appengine.googleapis.com

如需在试运行模式下强制执行组织政策,请使用带有 --update-mask 标志的 org-policies set policy。例如:

gcloud org-policies set-policy POLICY_PATH \
  --update-mask=dryRunSpec

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

在试运行模式下删除组织政策

您可以使用 Google Cloud 控制台或 Google Cloud CLI 以试运行模式删除组织政策。

控制台

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

    转到组织政策

  2. 在项目选择器中,选择要为其设置组织政策的资源。

  3. 组织政策页面上,选择列表中的限制资源服务使用这一限制。

  4. 选择试运行标签页。

  5. 点击删除试运行政策

gcloud

如需在试运行模式下删除组织政策,请创建一个 YAML 文件,用于定义不含试运行规范的组织政策。例如:

  name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.restrictServiceUsage
  spec:
    rules:
    - values:
        allowedValues:
        - container.googleapis.com

替换以下内容:

  • RESOURCE_TYPE 替换为 organizationsfoldersprojects

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

然后,使用 org-policies set policy 命令,并将 --update-mask 标志设置为 dryRunSpec。例如:

gcloud org-policies set-policy POLICY_PATH \
  --update-mask=dryRunSpec

此命令会更新现有组织政策,以移除试运行规范并忽略规范的实际运行部分。

如需同时删除有效的组织政策和处于预演模式的组织政策,请使用 org-policies delete 命令。例如:

gcloud org-policies delete CONSTRAINT_NAME \
  --RESOURCE_TYPE=RESOURCE_ID

替换以下内容:

  • CONSTRAINT_NAME 替换为您要删除的限制的名称。例如 gcp.restrictServiceUsage

  • RESOURCE_TYPE 替换为 organizationsfoldersprojects

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

在试运行模式下有效评估组织政策

处于试运行模式的组织政策的继承方式与其他组织政策类似。如果组织资源上设置了处于预演模式的组织政策,则所有后代资源都会继承该政策,除非该政策在层次结构中的较低级别被替换。

有效政策评估会显示在该资源上合并的组织政策的结果。因此,如果试运行模式政策是沿用而来的,而不是在本地设置的,那么对实时组织政策的调整会反映在试运行模式下的有效组织政策中。

修改项目的现行组织政策也会修改其在试运行模式下的有效组织政策。

例如,假设有一个组织资源 Organization A,其有效组织政策设置为 enforced: false,并且有一个处于预演模式的组织政策设置为 enforced: true。子级资源 Folder B 也将实时组织政策设置为 enforced: false,并继承试运行模式下的组织政策。在 Folder B 上,设置有效政策意味着,试运行模式下组织政策的有效政策评估结果也是 enforce: false,从而替换其父组织中设置的试运行模式下的组织政策。

Folder B 的子资源 Project X 将直播政策设置为 enforced: true。与 Folder B 上的行为类似,Project X 在试运行模式下对组织政策的有效评估为 enforced: true,因为已设置实时政策。

Folder B 的另一个子资源 Project Y 将组织政策在试运行模式下设置为 enforced: true。它会从父资源继承组织政策,因此有效评估结果为:对于实时政策,为 enforced: false;对于处于预演模式的组织政策,为 enforced: true

资源 设置实时组织政策 有效的实时组织政策 在试运行模式下设置组织政策 试运行模式下的有效组织政策
组织 A enforced: false enforced: false enforced: true enforced: true
文件夹 B enforced: false enforced: false enforced: false
文件夹 C enforced: false enforced: true
Project X enforced: true enforced: true enforced: true
Project Y enforced: false enforced: true enforced: true

在试运行模式下分析组织政策的效果

处于试运行模式的组织政策在强制执行时不会阻止任何操作。如需查看组织政策会产生什么影响,您可以查看组织政策审核日志

系统会根据对给定资源强制执行的政策是否允许或拒绝相应操作,生成实时组织政策和试运行模式下的组织政策的组织政策审核日志。下表介绍了生成组织政策审核日志的情况:

有效的组织政策 处于试运行模式的组织政策 生成的审核日志
允许 允许
允许 拒绝 仅在试运行模式下记录审核日志
拒绝 允许 实时模式和试运行模式下的审核日志
拒绝 拒绝 实时模式和试运行模式下的审核日志

试运行模式下的组织政策违规行为会与实时模式下的违规行为一起显示在审核日志中。例如:

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 7,
      "message": "PERMISSION_DENIED"
    },
    "authenticationInfo": {},
    "requestMetadata": {
      "callerIp": "1.2.3.4",
      "requestAttributes": {},
      "destinationAttributes": {}
    },
    "serviceName": "appengine.googleapis.com",
    "methodName": "google.api.appengine.v1.appengine.apps.services.get",
    "resourceName": "projects/sur-project-test-3",
    "metadata": {
      "constraint": "constraints/gcp.restrictServiceUsage",
      "checkedValue": "appengine.googleapis.com",
      "liveResult": "ALLOWED",
      "@type": "type.googleapis.com/google.cloud.audit.OrgPolicyDryRunAuditMetadata",
      "dryRunResult": "DENIED"
    }
  },
  "insertId": "1f2bvoxcmg1",
  "resource": {
    "type": "audited_resource",
    "labels": {
      "project_id": "sur-project-test-3",
      "service": "appengine.googleapis.com",
      "method": "google.api.appengine.v1.appengine.apps.services.get"
    }
  },
  "timestamp": "2022-06-16T19:42:58.244990928Z",
  "severity": "WARNING",
  "logName": "projects/sur-project-test-3/logs/cloudaudit.googleapis.com%2Fpolicy",
  "receiveTimestamp": "2022-06-16T19:42:59.572025716Z"
}

您可以使用 Logs Explorer 仅查询处于预运行模式的组织政策违规情况。

控制台

在 Google Cloud 控制台中,您可以使用 Logs Explorer 来检索 Google Cloud 项目、文件夹或组织的审核日志条目:

  1. 在 Google Cloud 控制台中,前往 Logging> 日志浏览器页面。

    转到日志浏览器

  2. 选择现有的 Google Cloud 项目、文件夹或组织。

  3. 查询构建器窗格中,执行以下操作:

    • 资源类型中,选择要查看其审核日志的 Google Cloud 资源。

    • 日志名称中,选择政策审核日志类型。

    • 查询窗格中,输入以下内容: protoPayload.metadata.dryRunResult = "DENIED" AND \ protoPayload.metadata.liveResult = "ALLOWED"

    如果您在尝试从日志浏览器中查看日志时遇到问题,请参阅问题排查信息。

    如需详细了解如何使用日志浏览器进行查询,请参阅在日志浏览器中构建查询

gcloud

Google Cloud CLI 为 Logging API 提供了命令行界面。在每个日志名称中提供有效的资源标识符。例如,如果您的查询包含项目 ID,则您提供的项目标识符必须引用当前选定的项目名称。

如需读取模拟运行模式下组织政策违规的审核日志条目,请运行以下命令:

gcloud logging read protoPayload.metadata.dryRunResult = "DENIED" AND \
      protoPayload.metadata.liveResult = "ALLOWED" \
    --RESOURCE_TYPE=RESOURCE_ID \

替换以下内容:

  • RESOURCE_TYPE 替换为 organizationfolderproject

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

向命令添加 --freshness 标志可读取超过 1 天的日志。

如需详细了解如何使用 gcloud CLI,请参阅 gcloud logging read

如果您的组织下有许多项目,您可以使用聚合接收器将组织下所有项目的审核日志条目聚合并路由到 BigQuery 表中。如需详细了解如何创建汇总接收器,请参阅整理组织级日志并将其路由到支持的目标位置

后续步骤

如需详细了解如何创建和管理组织政策限制条件,请参阅使用限制条件