本页介绍了如何在试运行模式下使用组织政策来监控政策变更在强制执行之前会对工作流产生哪些影响。
试运行模式下的组织政策的创建和强制执行方式与其他组织政策类似,并且系统会记录违反政策的行为,但不会拒绝违反政策的操作。
准备工作
如需在试运行模式下使用组织政策,您必须为 Google Cloud 项目启用结算功能。如需了解如何检查项目是否已启用结算功能,请参阅验证项目的结算状态。
如需详细了解组织政策和限制条件及其工作原理,请参阅组织政策服务简介。
所需的角色
如需获得管理组织政策所需的权限,请让管理员向您授予组织的以下 IAM 角色:
-
组织政策管理员 (
roles/orgpolicy.policyAdmin
) -
如需创建、删除或修改汇总接收器:Logs Configuration Writer (
roles/logging.configWriter
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
您可以通过向组织政策管理员角色绑定添加 IAM 条件来委托组织政策的管理权限。如需控制主账号可以管理组织政策的资源,您可以使角色绑定以特定标记为条件。如需了解详情,请参阅使用限制条件。
限制
可用于试运行组织政策的组织政策限制条件只有以下几种:
尝试使用任何其他限制在试运行模式下创建组织政策会导致错误。
在试运行模式下创建组织政策
使用列表参数
您可以使用Google Cloud 控制台或 Google Cloud CLI 以试运行模式为限制条件创建组织政策。以下示例展示了如何在试运行模式下创建组织政策,以审核 compute.managed.restrictProtocolForwardingCreationForTypes
受管限制条件的效果。
控制台
在 Google Cloud 控制台中,转到组织政策页面。
在项目选择器中,选择要为其设置组织政策的资源。
在组织政策页面上,从列表中选择限制协议转发的使用这一限制。
选择试运行标签页。
点击管理试运行政策。
在修改预演政策页面上,选择覆盖父资源的政策。
点击添加规则。
在实施下,选择开启。
在参数下,选择修改
。在修改形参值窗格中,选择用户定义。
在用户定义的值框中,输入
EXTERNAL
,然后点击保存。点击测试更改以模拟此组织政策的效果。如需了解详情,请参阅使用 Policy Simulator 测试组织政策更改。
如需在试运行模式下强制执行组织政策,请点击设置试运行政策。您还可以点击设置政策来设置直播政策。
您可以前往组织政策限制条件的试运行标签页,验证组织政策在试运行模式下的状态。
对于应用了处于试运行模式的组织政策的项目,您可以点击查看拒绝日志来查看审核日志。对于此组织政策,审核日志会显示违规情况,就好像强制执行了限制协议转发的使用限制条件,以仅允许 EXTERNAL
协议转发部署。
gcloud
如需在试运行模式下创建组织政策,请创建一个 YAML 文件,其中使用 dryRunSpec
定义限制条件。例如:
name: RESOURCE_TYPE/RESOURCE_ID/policies/compute.managed.restrictProtocolForwardingCreationForTypes dryRunSpec: rules: - enforce: true parameters: allowedSchemes: - EXTERNAL
替换以下内容:
将
RESOURCE_TYPE
替换为organizations
、folders
或projects
。RESOURCE_ID
替换为您的组织 ID、文件夹 ID、项目 ID 或项目编号,具体取决于在RESOURCE_TYPE
中指定的资源类型。
此组织政策不会强制执行 compute.managed.restrictProtocolForwardingCreationForTypes
限制条件,但审核日志会显示违规情况,就好像它强制执行了该限制条件一样。
如果您同时定义了 spec
和 dryRunSpec
,则可以在同一 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
仅以试运行模式更新组织政策。您还可以使用*
同时更新spec
和dryRunSpec
字段。如果在更新现有组织政策时未设置此字段,此命令将导致错误,并且组织政策不会更新。
您可以使用 org-policies describe
命令验证是否已设置处于试运行模式的组织政策。只有当组织政策中存在 dryRunSpec
字段时,该字段才会显示。
此组织政策将强制执行 compute.managed.restrictProtocolForwardingCreationForTypes
限制条件,以便允许所有值。不过,审核日志会显示违规情况,就好像只允许 INTERNAL
协议转发部署一样。
使用布尔值规则
您可以使用 Google Cloud 控制台或 Google Cloud CLI 为具有布尔值规则的限制条件创建处于预运行模式的组织政策。以下示例演示了如何在模拟运行模式下创建组织政策,以审核自定义组织政策的效果。
控制台
在 Google Cloud 控制台中,转到组织政策页面。
在项目选择器中,选择要为其设置组织政策的资源。
从组织政策页面上的列表中选择要强制执行的自定义组织政策。
选择试运行标签页。
点击管理试运行政策。
在修改试运行政策页面,选择覆盖父资源的政策。
点击添加规则。
在强制执行下,选择开启,然后点击完成。
如需在试运行模式下强制执行组织政策,请点击设置试运行政策。验证以预运行模式运行的组织政策是否按预期工作后,您可以点击设置政策来设置有效政策。
您可以前往组织政策限制条件的试运行标签页,验证组织政策在试运行模式下的状态。
对于应用了处于试运行模式的组织政策的项目,您可以点击查看拒绝日志来查看审核日志。对于此组织政策,审核日志会显示违规情况,就好像强制执行了自定义组织政策一样。
gcloud
如需在试运行模式下创建组织政策,请创建一个 YAML 文件,其中使用 dryRunSpec
定义限制条件。例如:
name: RESOURCE_TYPE/RESOURCE_ID/policies/CONSTRAINT_NAME dryRunSpec: rules: - enforce: true
替换以下内容:
将
RESOURCE_TYPE
替换为organizations
、folders
或projects
。RESOURCE_ID
替换为您的组织 ID、文件夹 ID、项目 ID 或项目编号,具体取决于在RESOURCE_TYPE
中指定的资源类型。将
CONSTRAINT_NAME
替换为自定义限制的名称。例如custom.disableGkeAutoUpgrade
。
此组织政策不会强制执行自定义限制条件,但审核日志会显示违规情况,就好像它强制执行了自定义限制条件一样。
如果您同时定义了 spec
和 dryRunSpec
,则可以在同一 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
仅以试运行模式更新组织政策。您还可以使用*
同时更新spec
和dryRunSpec
字段。如果在更新现有组织政策时未设置此字段,此命令将导致错误,并且组织政策不会更新。
您可以使用 org-policies describe
命令验证是否已设置处于预运行模式的组织政策。只有当组织政策中存在 dryRunSpec
字段时,该字段才会显示。
此组织政策不会强制执行自定义限制条件。不过,审核日志会显示违反自定义约束条件的情况。
在试运行模式下基于有效政策创建组织政策
您可以将现有组织政策用作处于试运行模式的组织政策的起点。您可能需要这样做,以了解对现有政策的更改会对您的环境产生哪些影响。
您可以使用 Google Cloud 控制台或 Google Cloud CLI 基于现有政策创建处于预运行模式的组织政策。
控制台
在 Google Cloud 控制台中,转到组织政策页面。
在项目选择器中,选择已配置限制资源服务使用情况限制条件的资源。
在组织政策页面上,选择列表中的限制资源服务使用这一限制。
选择直播标签页。
点击管理政策。
点击添加规则。
在政策值中,选择自定义。
在政策类型中,选择拒绝。
在自定义值框中,输入
appengine.googleapis.com
。点击完成,然后点击设置试运行政策。
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'
将此命令的输出复制到临时文件中。修改此文件以移除 etag
和 updateTime
字段,并将 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 以试运行模式删除组织政策。
控制台
在 Google Cloud 控制台中,转到组织政策页面。
在项目选择器中,选择要为其设置组织政策的资源。
在组织政策页面上,选择列表中的限制资源服务使用这一限制。
选择试运行标签页。
点击删除试运行政策。
gcloud
如需在试运行模式下删除组织政策,请创建一个 YAML 文件,用于定义不含试运行规范的组织政策。例如:
name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.restrictServiceUsage spec: rules: - values: allowedValues: - container.googleapis.com
替换以下内容:
将
RESOURCE_TYPE
替换为organizations
、folders
或projects
。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
替换为organizations
、folders
或projects
。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 项目、文件夹或组织的审核日志条目:
在 Google Cloud 控制台中,前往 Logging> 日志浏览器页面。
选择现有的 Google Cloud 项目、文件夹或组织。
在查询构建器窗格中,执行以下操作:
在资源类型中,选择要查看其审核日志的 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
替换为organization
、folder
或project
。RESOURCE_ID
替换为您的组织 ID、文件夹 ID、项目 ID 或项目编号,具体取决于在RESOURCE_TYPE
中指定的资源类型。
向命令添加 --freshness
标志可读取超过 1 天的日志。
如需详细了解如何使用 gcloud CLI,请参阅 gcloud logging read
。
汇总审核日志条目
如果您的组织下有许多项目,则可以使用聚合接收器将组织下所有项目的审核日志条目聚合并路由到 BigQuery 表中。
如需创建汇总接收器,请使用
logging sinks create
命令。在使用以下命令之前,请先替换以下内容:
SINK_NAME
:日志接收器的名称。一旦创建了接收器,便无法更改其名称。PROJECT_ID
:包含您的 BigQuery 数据集的项目的 ID。DATASET_ID
:具有写入权限的 BigQuery 数据集的 ID。ORGANIZATION_ID
:您组织的 ID。
运行
gcloud logging sinks create
命令:gcloud logging sinks create SINK_NAME \ bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID \ --include-children \ --organization=ORGANIZATION_ID \ --log-filter='logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy" AND protoPayload.metadata.@type:OrgPolicyDryRunAuditMetadata'
如需路由日志条目,您必须向与接收器关联的服务账号授予向其目标位置路由的权限。
如需查找需要向其授予权限的服务账号,请使用
gcloud logging sinks describe
命令。在使用以下命令之前,请将
SINK_NAME
替换为您之前创建的日志接收器的名称。运行
gcloud logging sinks describe
命令:gcloud logging sinks describe SINK_NAME
如果接收器详情包含标记为
writerIdentity
的字段,请继续执行下一步。如果详情不包含writerIdentity
字段,则无需为接收器配置目标位置权限。将接收器的写入者身份复制到剪贴板中。 下面展示了写入者身份:
serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
使用
gcloud projects add-iam-policy-binding
命令授予接收器的写入者身份向目标位置写入日志数据的权限。在使用以下命令之前,请先替换以下内容:
PROJECT_ID
:存储汇总接收器目标的项目的标识符。PRINCIPAL_ID
:您之前复制的接收器的写入者身份。
运行
gcloud projects add-iam-policy-binding
命令:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL_ID \ --role=roles/bigquery.dataEditor
如需详细了解如何创建汇总接收器,请参阅整理组织级日志并将其路由到支持的目标位置。
如需查看路由到 BigQuery 的日志,请执行以下操作:
-
在 Google Cloud 控制台中,前往 BigQuery 页面:
您也可以使用搜索栏查找此页面。
在浏览器面板中,展开您的项目并选择数据集。
日志条目显示在详细信息标签页中,您也可以通过查询表来返回数据。
创建查询以分析试运行组织政策。例如,以下查询会返回包含拒绝操作且在过去 7 天内生成的组织政策模拟运行审核日志。
SELECT protopayload_auditlog.serviceName as serviceName, protopayload_auditlog.methodName as methodName, JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, '$.constraint') as constraint, JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, '$.dryRunResult') as dryRunResult, JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, '$.liveResult') as liveResult FROM {PROJECT_ID}.{DATASET_ID}.cloudaudit_googleapis_com_policy_* WHERE JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, '$.dryRunResult') = "DENIED" AND `timestamp` > DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) LIMIT 1000
替换以下内容:
PROJECT_ID
:包含您的 BigQuery 数据集的项目的 ID。DATASET_ID
:具有写入权限的 BigQuery 数据集的 ID。
如需了解详情,请参阅查看路由到 BigQuery 的日志。
-
后续步骤
如需详细了解如何创建和管理组织政策限制条件,请参阅使用限制条件。