本页面介绍了如何使用 Google Cloud CLI 配置 Binary Authorization 政策。作为替代方案,您还可以使用 Google Cloud 控制台或 REST API 来执行这些任务。这个步骤是设置 Binary Authorization 的一部分。
如需使用命令行工具配置政策,请将现有政策导出为 YAML 文件。修改文件后,您便可以导入该文件来更新政策,如本指南后面的部分所述。如需详细了解 YAML 格式的政策,请参阅 YAML 格式政策参考文档。
准备工作
- 启用 Binary Authorization。
- 创建集群。
- 如果您打算使用证明,我们建议您先创建证明者,然后再配置政策。您可以使用命令行工具或通过 Google Cloud 控制台来创建证明者。
将项目 ID 设置为启用了 Binary Authorization 的项目:
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
导出 YAML 格式的政策文件
本部分适用于 GKE、GKE 集群、Cloud Run 和 Cloud Service Mesh。
如需更新政策,请先将其导出为本地 YAML 文件,如下所示:
gcloud container binauthz policy export > /tmp/policy.yaml
默认情况下,该文件内容类似于以下内容:
defaultAdmissionRule: enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG evaluationMode: ALWAYS_ALLOW globalPolicyEvaluationMode: ENABLE name: projects/PROJECT_ID/policy
如需修改政策,请修改该文件并添加或更新某些部分,如本指南后面的部分所述。保存文件后,您便可以导入政策。
如需将豁免映像添加到许可名单,请在政策文件中添加以下内容:
admissionWhitelistPatterns: - namePattern: EXEMPT_IMAGE_PATH
将 EXEMPT_IMAGE_PATH
替换为要豁免的映像的路径。如需豁免其他映像,请添加其他 - namePattern
条目。详细了解 admissionWhitelistPatterns
。
设置默认规则
本部分适用于 GKE、GKE 集群、Cloud Run 和 Cloud Service Mesh。
规则是政策的一部分,用于规定容器映像必须满足哪些限制条件才能部署。默认规则规定了适用于所有没有其自身集群专用规则的非豁免映像的限制条件。每项政策都必须有一条默认规则。
默认规则在 YAML 格式的政策文件内的 defaultAdmissionRule
节点中指定。如需详细了解此规则的各个部分,请参阅 YAML 格式政策参考文档中的 ADMISSION_RULE。ADMISSION_RULE如需查看默认规则的示例,请参阅示例政策。
如需设置默认规则,请根据需要修改 policy.yaml
文件中的 defaultAdmissionRule
节点:
defaultAdmissionRule: evaluationMode: EVALUATION_MODE enforcementMode: ENFORCEMENT_MODE requireAttestationsBy: - ATTESTOR - ...
请替换以下内容:
EVALUATION_MODE:评估模式用于指定 Binary Authorization Enforcer 会在部署时强制执行的限制条件类型。将 EVALUATION_MODE 替换为以下某个选项:
ENFORCEMENT_MODE:强制执行模式指定在映像违反规则时 Enforcer 的响应方式。将 ENFORCEMENT_MODE 替换为以下项之一:
ENFORCED_BLOCK_AND_AUDIT_LOG
:阻止违反规则的映像,并将有关违规行为的信息记录到 Cloud Audit Logs 中(默认)。DRYRUN_AUDIT_LOG_ONLY
:允许部署所有映像,但会将强制执行信息(包括违规信息)记录到 Cloud Audit Logs 中。
ATTESTOR:如果将
EVALUATION_MODE
设置为REQUIRE_ATTESTATION
,则还必须添加一个 requireAttesationsBy 块。在该块中,您可以按资源 ID 列出一个或多个证明者。资源 ID 的格式如下:projects/PROJECT_ID/attestors/ATTESTOR_NAME
。如需详细了解如何创建证明者,请参阅创建证明者。
管理豁免映像
本部分适用于 GKE、GKE 集群、Cloud Run 和 Cloud Service Mesh。
豁免映像是一种无需遵守政策规则的映像。Binary Authorization 始终允许部署豁免映像。
如需指定豁免映像,请在 admissionWhitelistPatterns
中列出其注册表路径。路径是指 Container Registry 或其他映像注册表。在部署时,Binary Authorization 将在系统政策指定的映像列表之后显示 admissionWhitelistPatterns
指定的豁免映像列表。
如需添加豁免映像,请在 policy.yaml
文件中的 admissionWhitelistPatterns
列表下添加一个 namePattern
节点:
admissionWhitelistPatterns: - namePattern: MATCHING_PATTERN
将 MATCHING_PATTERN 替换为注册表中完全匹配的单个映像的路径,或者替换为使用通配符(*
、**
)与模式匹配的任何映像。
Cloud Run
本部分适用于 Cloud Run。
您无法直接指定包含标记的映像名称。例如,您不能指定 IMAGE_PATH
:latest。
如果要指定包含标记的映像名称,则必须按如下方式使用通配符来指定映像名称:
- 对于单个映像的所有版本,使用
*
;例如us-docker.pkg.dev/myproject/container/hello@*
- 对于项目中的所有映像,使用
**
;例如us-docker.pkg.dev/myproject/**
您可以使用路径名称指定 IMAGE_PATH
@DIGEST
格式的摘要。
系统政策评估模式
本部分适用于 GKE 和 GKE 集群。
系统政策评估模式政策设置会使 Binary Authorization 先评估系统政策,然后再评估配置的政策。Google 会管理用于豁免 GKE 使用的一系列 Google 维护的系统映像的系统政策。系统政策中列出的映像不会因政策强制执行而被阻止。如果您未启用此设置,则必须自行管理豁免映像列表。了解如何管理豁免映像。
您可以使用以下命令查看系统政策的内容:
gcloud alpha container binauthz policy export-system-policy
如需启用系统政策评估模式,请将以下行添加到 policy.yaml
文件中:
globalPolicyEvaluationMode: ENABLE
如需停用系统政策评估模式,请添加以下代码:
globalPolicyEvaluationMode: DISABLE
您可以导出与特定区域关联的系统政策,如下所示:
gcloud alpha container binauthz policy export-system-policy \
--location=REGION > /tmp/policy.yaml
将 REGION 替换为与您要导出的系统政策关联的区域(或“global”)。例如:asia-east1
、europe-west1
、us-central1
。
如果您省略 --location
或指定 --location=global
,该命令会从最后一个区域组中的一个区域中输出一项系统政策,以接收更新。由于对系统政策所做的大部分更改都是增加的,因此输出会显示当前允许在所有区域中使用的系统映像集。
设置针对集群的规则(可选)
本部分适用于 GKE 和 GKE 集群。
一个集群还可以有一条或多条针对集群的规则。这种类型的规则只适用于要部署到特定 GKE 集群的映像。针对集群的规则是政策的可选部分。
针对集群的规则在 YAML 格式的政策文件内的 clusterAdmissionRules
节点中定义。如需详细了解此规则的各个部分,请参阅 YAML 格式政策参考文档中的 ADMISSION_RULE。ADMISSION_RULE如需查看示例,请参阅示例政策中的使用针对集群的规则。
如需添加针对集群的规则,请执行以下操作:
在 policy.yaml
文件中,添加 clusterAdmissionRules
节点:
clusterAdmissionRules: CLUSTER_SPECIFIER: evaluationMode: EVALUATION_MODE enforcementMode: ENFORCEMENT_MODE requireAttestationsBy: - ATTESTOR - ...
请替换以下内容:
CLUSTER_SPECIFIER:规则适用的集群的资源 ID。规则的格式如下:
EVALUATION_MODE:评估模式用于指定 Binary Authorization Enforcer 会在部署时强制执行的限制条件类型。将 EVALUATION_MODE 替换为以下某个选项:
ENFORCEMENT_MODE:强制执行模式指定在映像违反规则时 Enforcer 的响应方式。将 ENFORCEMENT_MODE 替换为以下项之一:
ENFORCED_BLOCK_AND_AUDIT_LOG
:阻止违反规则的映像,并将有关违规行为的信息记录到 Cloud Audit Logs 中(默认)。DRYRUN_AUDIT_LOG_ONLY
:允许部署所有映像,但会将强制执行信息(包括违规信息)记录到 Cloud Audit Logs 中。
ATTESTOR:如果将
EVALUATION_MODE
设置为REQUIRE_ATTESTATION
,则还必须添加一个 requireAttesationsBy 块。在该块中,您可以按资源 ID 列出一个或多个证明者。资源 ID 的格式如下:projects/PROJECT_ID/attestors/ATTESTOR_NAME
。如需详细了解如何创建证明者,请参阅创建证明者。
设置专用规则(可选)
您可以创建范围限定为网格服务身份、Kubernetes 服务账号或 Kubernetes 命名空间的规则。
为 Cloud Service Mesh 服务身份设置规则
如需为 Cloud Service Mesh(预览版)服务身份设置规则,请修改 policy.yaml
文件并添加 istioServiceIdentityAdmissionRules
块,例如:
defaultAdmissionRule:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
istioServiceIdentityAdmissionRules:
SERVICE_IDENTITY_ID:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ENFORCEMENT_MODE
requireAttestationsBy:
- <var>ATTESTOR</var>
- ...
name: projects/PROJECT_ID/policy
请替换以下内容:
SERVICE_IDENTITY_ID:限定此规则范围的 Cloud Service Mesh 服务身份。服务身份采用以下格式: PROJECT_ID.svc.id.goog/ns/NAMESPACE/sa/SERVICE_ACCOUNT。 在服务身份 ID 中,替换以下内容:
- PROJECT_ID:您在其中定义 Kubernetes 资源的项目的 ID。
- NAMESPACE:Kubernetes 命名空间。
- SERVICE_ACCOUNT:服务账号。
EVALUATION_MODE:评估模式用于指定 Binary Authorization Enforcer 会在部署时强制执行的限制条件类型。将 EVALUATION_MODE 替换为以下某个选项:
ENFORCEMENT_MODE:强制执行模式指定在映像违反规则时 Enforcer 的响应方式。将 ENFORCEMENT_MODE 替换为以下项之一:
ENFORCED_BLOCK_AND_AUDIT_LOG
:阻止违反规则的映像,并将有关违规行为的信息记录到 Cloud Audit Logs 中(默认)。DRYRUN_AUDIT_LOG_ONLY
:允许部署所有映像,但会将强制执行信息(包括违规信息)记录到 Cloud Audit Logs 中。
ATTESTOR:如果将
EVALUATION_MODE
设置为REQUIRE_ATTESTATION
,则还必须添加一个 requireAttesationsBy 块。在该块中,您可以按资源 ID 列出一个或多个证明者。资源 ID 的格式如下:projects/PROJECT_ID/attestors/ATTESTOR_NAME
。如需详细了解如何创建证明者,请参阅创建证明者。
为 Kubernetes 服务账号设置规则
如需为 Kubernetes 服务账号设置规则,请修改 policy.yaml
文件并添加 kubernetesServiceAccountAdmissionRules
块,例如:
defaultAdmissionRule:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
kubernetesServiceAccountAdmissionRules:
KUBERNETES_SERVICE_ACCOUNT_ID:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ENFORCEMENT_MODE
requireAttestationsBy:
- <var>ATTESTOR</var>
- ...
name: projects/PROJECT_ID/policy
请替换以下内容:
KUBERNETES_SERVICE_ACCOUNT_ID:此规则适用范围限定的 Kubernetes 服务账号。此服务账号 ID 的格式为 NAMESPACE:SERVICE_ACCOUNT。在服务账号 ID 中,替换以下内容:
- NAMESPACE:Kubernetes 命名空间。
- SERVICE_ACCOUNT:服务账号名称。
EVALUATION_MODE:评估模式用于指定 Binary Authorization Enforcer 会在部署时强制执行的限制条件类型。将 EVALUATION_MODE 替换为以下某个选项:
ENFORCEMENT_MODE:强制执行模式指定在映像违反规则时 Enforcer 的响应方式。将 ENFORCEMENT_MODE 替换为以下项之一:
ENFORCED_BLOCK_AND_AUDIT_LOG
:阻止违反规则的映像,并将有关违规行为的信息记录到 Cloud Audit Logs 中(默认)。DRYRUN_AUDIT_LOG_ONLY
:允许部署所有映像,但会将强制执行信息(包括违规信息)记录到 Cloud Audit Logs 中。
ATTESTOR:如果将
EVALUATION_MODE
设置为REQUIRE_ATTESTATION
,则还必须添加一个 requireAttesationsBy 块。在该块中,您可以按资源 ID 列出一个或多个证明者。资源 ID 的格式如下:projects/PROJECT_ID/attestors/ATTESTOR_NAME
。如需详细了解如何创建证明者,请参阅创建证明者。
为 Kubernetes 命名空间设置规则
如需为 Kubernetes 命名空间设置规则,请修改 policy.yaml
文件并添加 kubernetesNamespaceAdmissionRules
块,例如:
defaultAdmissionRule:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
kubernetesNamespaceAdmissionRules:
KUBERNETES_NAMESPACE:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: EVALUATION_MODE
requireAttestationsBy:
- <var>ATTESTOR</var>
- ...
name: projects/PROJECT_ID/policy
请替换以下内容:
KUBERNETES_NAMESPACE:此规则适用范围限定的 Kubernetes 命名空间。
EVALUATION_MODE:评估模式用于指定 Binary Authorization Enforcer 会在部署时强制执行的限制条件类型。将 EVALUATION_MODE 替换为以下某个选项:
ENFORCEMENT_MODE:强制执行模式指定在映像违反规则时 Enforcer 的响应方式。将 ENFORCEMENT_MODE 替换为以下项之一:
ENFORCED_BLOCK_AND_AUDIT_LOG
:阻止违反规则的映像,并将有关违规行为的信息记录到 Cloud Audit Logs 中(默认)。DRYRUN_AUDIT_LOG_ONLY
:允许部署所有映像,但会将强制执行信息(包括违规信息)记录到 Cloud Audit Logs 中。
ATTESTOR:如果将
EVALUATION_MODE
设置为REQUIRE_ATTESTATION
,则还必须添加一个 requireAttesationsBy 块。在该块中,您可以按资源 ID 列出一个或多个证明者。资源 ID 的格式如下:projects/PROJECT_ID/attestors/ATTESTOR_NAME
。如需详细了解如何创建证明者,请参阅创建证明者。
导入 YAML 格式的政策文件
本部分适用于 GKE、GKE 集群、Cloud Run 和 Cloud Service Mesh。
输入以下命令,将 YAML 格式的政策文件重新导入 Binary Authorization:
gcloud container binauthz policy import /tmp/policy.yaml
后续步骤
- 使用
built-by-cloud-build
证明者仅部署由 Cloud Build 构建的映像(预览版)。 - 使用证明。
- 部署 GKE 映像。