使用 gcloud CLI 配置政策

本页面介绍了如何使用 Google Cloud CLI 配置 Binary Authorization 政策。作为替代方案,您还可以使用 Google Cloud 控制台REST API 来执行这些任务。这个步骤是设置 Binary Authorization 的一部分。

如需使用命令行工具配置政策,请将现有政策导出为 YAML 文件。修改文件后,您便可以导入该文件来更新政策,如本指南后面的部分所述。如需详细了解 YAML 格式的政策,请参阅 YAML 格式政策参考文档

准备工作

  1. 启用 Binary Authorization
  2. 创建集群
  3. 如果您打算使用证明,我们建议您先创建证明者,然后再配置政策。您可以使用命令行工具或通过 Google Cloud 控制台来创建证明者。
  4. 将项目 ID 设置为启用了 Binary Authorization 的项目:

    PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    

导出 YAML 格式的政策文件

本部分适用于 GKE、GKE 集群、Cloud Run 和 Anthos Service Mesh

如需更新政策,请先将其导出为本地 YAML 文件,如下所示:

gcloud container binauthz policy export > /tmp/policy.yaml

默认情况下,该文件内容类似于以下内容:

admissionWhitelistPatterns:
- namePattern: gcr.io/google_containers/*
- namePattern: gcr.io/google-containers/*
- namePattern: k8s.gcr.io/**
- namePattern: gke.gcr.io/**
- namePattern: gcr.io/stackdriver-agents/*
globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
  evaluationMode: EVALUATION_MODE
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/PROJECT_ID/policy

如需修改政策,请修改该文件并添加或更新某些部分,如本指南后面的部分所述。保存文件后,您便可以导入政策

设置默认规则

本部分适用于 GKE、GKE 集群、Cloud Run 和 Anthos Service Mesh

规则是政策的一部分,用于规定容器映像必须满足哪些限制条件才能部署。默认规则规定了适用于所有没有其自身集群专用规则的非豁免映像的限制条件。每项政策都必须有一条默认规则。

默认规则在 YAML 格式的政策文件内的 defaultAdmissionRule 节点中指定。如需详细了解此规则的各个部分,请参阅 YAML 格式政策参考文档中的 ADMISSION_RULE如需查看默认规则的示例,请参阅示例政策

如需设置默认规则,请根据需要修改 policy.yaml 文件中的 defaultAdmissionRule 节点:

defaultAdmissionRule:
  evaluationMode: EVALUATION_MODE
  enforcementMode: ENFORCEMENT_MODE
  requireAttestationsBy:
  - ATTESTOR
  - ...

请替换以下内容:

  • EVALUATION_MODE评估模式用于指定 Binary Authorization Enforcer 会在部署时强制执行的限制条件类型。将 EVALUATION_MODE 替换为以下某个选项:

    • ALWAYS_ALLOW:允许部署所有映像。
    • ALWAYS_DENY:禁止部署所有映像。
    • REQUIRE_ATTESTATION:如果映像具有一个或多个可由您添加到此规则的所有证明者验证的证明,则允许部署该映像。在部署时,Enforcer 会使用您在此规则中添加到 ATTESTOR 列表的证明者来验证证明。如需了解如何创建证明者,请参阅创建证明者。如果您指定了 REQUIRE_ATTESTATION,则还必须添加一个包含至少一个证明者的 requireAttestationsBy 块。如需了解如何创建证明者,请参阅创建证明者
  • 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 和 Anthos 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-east1europe-west1us-central1

如果您省略 --location 或指定 --location=global,该命令会从最后一个区域组中的一个区域中输出一项系统政策,以接收更新。由于对系统政策所做的大部分更改都是增加的,因此输出会显示当前允许在所有区域中使用的系统映像集。

设置针对集群的规则(可选)

本部分适用于 GKE 和 GKE 集群

一个集群还可以有一条或多条针对集群的规则。这种类型的规则只适用于要部署到特定 GKE 集群的映像。针对集群的规则是政策的可选部分。

针对集群的规则在 YAML 格式的政策文件内的 clusterAdmissionRules 节点中定义。如需详细了解此规则的各个部分,请参阅 YAML 格式政策参考文档中的 ADMISSION_RULE如需查看示例,请参阅示例政策中的使用针对集群的规则

如需添加针对集群的规则,请执行以下操作:

policy.yaml 文件中,添加 clusterAdmissionRules 节点:

clusterAdmissionRules:
  CLUSTER_SPECIFIER:
    evaluationMode: EVALUATION_MODE
    enforcementMode: ENFORCEMENT_MODE
    requireAttestationsBy:
    - ATTESTOR
    - ...

请替换以下内容:

  • CLUSTER_SPECIFIER:规则适用的集群的资源 ID。规则的格式如下:

    • 对于 GKE、GKE 关联集群和 GKE on AWS,格式为 CLUSTER_LOCATION.CLUSTER_NAME - 例如 us-central1-a.test-cluster
    • 对于 GKE on Bare Metal 和 GKE on VMware,格式为 FLEET_MEMBERSHIP_LOCATION.FLEET_MEMBERSHIP_ID - 例如 global.test-membership

      其他属性如本指南前面的设置默认规则部分中所述。如需查看针对集群的规则示例,请参阅示例政策

  • EVALUATION_MODE评估模式用于指定 Binary Authorization Enforcer 会在部署时强制执行的限制条件类型。将 EVALUATION_MODE 替换为以下某个选项:

    • ALWAYS_ALLOW:允许部署所有映像。
    • ALWAYS_DENY:禁止部署所有映像。
    • REQUIRE_ATTESTATION:如果映像具有一个或多个可由您添加到此规则的所有证明者验证的证明,则允许部署该映像。在部署时,Enforcer 会使用您在此规则中添加到 ATTESTOR 列表的证明者来验证证明。如需了解如何创建证明者,请参阅创建证明者。如果您指定了 REQUIRE_ATTESTATION,则还必须添加一个包含至少一个证明者的 requireAttestationsBy 块。如需了解如何创建证明者,请参阅创建证明者
  • 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 命名空间的规则。

为 Anthos Service Mesh 服务身份设置规则

如需为 Anthos 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:此规则适用范围限定的 Anthos 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 替换为以下某个选项:

    • ALWAYS_ALLOW:允许部署所有映像。
    • ALWAYS_DENY:禁止部署所有映像。
    • REQUIRE_ATTESTATION:如果映像具有一个或多个可由您添加到此规则的所有证明者验证的证明,则允许部署该映像。在部署时,Enforcer 会使用您在此规则中添加到 ATTESTOR 列表的证明者来验证证明。如需了解如何创建证明者,请参阅创建证明者。如果您指定了 REQUIRE_ATTESTATION,则还必须添加一个包含至少一个证明者的 requireAttestationsBy 块。如需了解如何创建证明者,请参阅创建证明者
  • 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 替换为以下某个选项:

    • ALWAYS_ALLOW:允许部署所有映像。
    • ALWAYS_DENY:禁止部署所有映像。
    • REQUIRE_ATTESTATION:如果映像具有一个或多个可由您添加到此规则的所有证明者验证的证明,则允许部署该映像。在部署时,Enforcer 会使用您在此规则中添加到 ATTESTOR 列表的证明者来验证证明。如需了解如何创建证明者,请参阅创建证明者。如果您指定了 REQUIRE_ATTESTATION,则还必须添加一个包含至少一个证明者的 requireAttestationsBy 块。如需了解如何创建证明者,请参阅创建证明者
  • 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 替换为以下某个选项:

    • ALWAYS_ALLOW:允许部署所有映像。
    • ALWAYS_DENY:禁止部署所有映像。
    • REQUIRE_ATTESTATION:如果映像具有一个或多个可由您添加到此规则的所有证明者验证的证明,则允许部署该映像。在部署时,Enforcer 会使用您在此规则中添加到 ATTESTOR 列表的证明者来验证证明。如需了解如何创建证明者,请参阅创建证明者。如果您指定了 REQUIRE_ATTESTATION,则还必须添加一个包含至少一个证明者的 requireAttestationsBy 块。如需了解如何创建证明者,请参阅创建证明者
  • 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 和 Anthos Service Mesh

输入以下命令,将 YAML 格式的政策文件重新导入 Binary Authorization:

gcloud container binauthz policy import /tmp/policy.yaml

后续步骤