主要概念

本页面介绍了与 Binary Authorization 相关的主要概念。

政策

Binary Authorization 中的政策是一组规则,用于管理将容器映像部署到 Google Kubernetes Engine (GKE) 的过程。政策包括以下几个部分:

您可以使用以下方法之一配置政策:

  • Google Cloud Console
  • gcloud 命令

使用 gcloud 命令时,您需要先导出 YAML 格式的政策并修改其定义,然后再将其重新导入您的项目中。YAML 格式反映了 Binary Authorization 存储的政策的内部结构。如需详细了解此格式,请参阅 YAML 格式政策参考文档

每个 Google Cloud Platform (GCP) 项目只能有一项政策。在单项目配置中,此政策用于控制部署到 GKE 的过程,其中,部署流水线中的所有资源都属于同一项目。对于多项目配置,可以使用单项政策来管理将一个项目中 Container Registry 的映像部署到另一个项目中运行的 GKE 集群的过程。

如需了解详情,请参阅使用 CLI 配置政策使用控制台配置政策

规则

规则是政策的一部分,用于规定容器映像必须满足哪些限制条件才能部署。通常,规则需要一个或多个经过数字签名的证明。每个必需的证明上的签名验证完毕(表示所有必需的内部流程都已完成)后,即可部署容器。此外,规则还可以允许或拒绝从特定 Container Registry 路径进行的所有部署以及/或者到特定 GKE 集群的所有部署。

您可以在配置政策时定义规则。政策具有一条默认规则和任意数量的针对集群的规则

默认规则

每项政策都有一条默认规则。此规则适用于任何与针对集群的规则不匹配的部署请求。如果政策没有针对集群的规则,则默认规则始终适用。在 YAML 格式政策文件中,默认规则在 defaultAdmissionRule 节点中指定。

针对集群的规则

一个集群还可以有一条或多条针对集群的规则。这种类型的规则只适用于要部署到特定 GKE 集群的容器映像。在 YAML 格式政策文件中,每个针对集群的规则均在 clusterAdmissionRule 节点中指定。

评估模式

每条规则都有评估模式,用于规定 Binary Authorization对该规则强制执行的限制条件类型。规则的评估模式是使用 YAML 格式政策文件中的 evaluationMode 属性指定的。

评估模式分为三种:

  • 允许所有映像
  • 拒绝所有映像
  • 要求提供证明

要求提供证明规则要求签名者对容器映像摘要进行数字签名,并在部署前创建证明。在部署时,Binary Authorization Enforcer 使用证明者在部署关联的容器映像之前验证证明中的签名。

强制执行模式

每条规则还具有强制执行模式,用于指定映像不符合相应规则时 GKE 执行的操作。规则可以有以下强制模式:

  • 阻止和审核日志:阻止部署不符合相应规则的映像,并将消息写入审核日志以表明映像未部署的原因。

  • 试运行:仅审核日志:允许部署不符合规则的映像,但会将有关所有违规行为的详细信息写入审核日志中。

大多数生产规则都使用阻止和审核日志强制执行模式。试运行:仅审核日志主要用于在政策生效之前在环境中对其进行测试。

规则的强制执行模式是使用 YAML 格式政策文件中的 enforcementMode 属性指定的。

如需详细了解写入 Cloud Logging 的消息,请参阅查看审核日志

豁免映像

豁免映像是一种无需遵守政策规则的容器映像。Binary Authorization 始终允许部署豁免映像。每个项目都有一个由注册表路径指定的豁免映像的许可名单。默认情况下,路径 gcr.io/google_containers/*k8s.gcr.io/* 和其他路径中的映像可以豁免,因为这些映像包含必需的资源,可供 GKE 成功启动集群并启用默认政策。

豁免映像的许可名单是使用 YAML 格式政策文件中的 admissionWhitelistPatterns 属性指定的。

许可名单模式

如需将注册表位置与指定路径匹配的所有容器映像列入许可名单,请运行以下命令:

gcr.io/example-project/*

要将特定映像列入许可名单,请运行以下命令:

gcr.io/example-project/helloworld

如需按标记将特定版本的映像列入许可名单,请运行以下命令:

gcr.io/example-project/helloworld:latest
gcr.io/example-project/helloworld:my-tag

如需按特定版本的映像的摘要将其列入许可名单,请运行以下命令:

gcr.io/example-project/helloworld@sha256:77b0b75136b9bd0fd36fb50f4c92ae0dbdbbe164ab67885e736fa4374e0cbb8c

Google 维护的系统映像

信任 Google 维护的所有系统映像会导致 Binary Authorization 不对 Google 维护的一系列系统映像进行进一步政策评估。启用此设置后,GKE 所需的映像不会因政策强制执行而被阻止。全局政策会在用户政策评估之前额外进行评估。

您可以使用 YAML 格式政策文件中的 globalPolicyEvaluationMode 属性来启用或停用此设置;还可以使用以下命令查看全局政策的内容:

gcloud container binauthz policy export --project=binauthz-global-policy

证明

证明是一种数字文档,用于证明 GKE 可以部署相应容器映像。

创建证明的过程有时被称为“对映像签名”。证明是在容器映像构建后创建的。每个此类容器都有一个全局唯一的摘要。签名者使用某个密钥对中的私钥对容器映像摘要签名,并使用该签名创建证明。在部署时,Binary Authorization Enforcer 会使用证明者公钥来验证证明中的签名。通常,每个证明者只与一个签名者对应。

证明可表明关联的容器映像是通过成功执行特定的必需进程来构建的。例如,如果签名者是您的质量保证 (QA) 功能的代表,则证明可能表明容器映像已通过预演环境中所有必需的端到端功能测试。

如需在 Binary Authorization 中启用证明,请将政策的 enforcementMode 设置为 REQUIRE_ATTESTATION

如需查看典型使用场景,请参阅 Binary Authorization 概览。

如需了解如何创建证明,请参阅创建证明

签名者

签名者是指通过用私钥对一个唯一的容器映像描述符签名来创建证明的个人或自动化流程。在部署时,通过存储在证明者中的相应公钥对证明进行验证,然后再部署关联的容器。

证明者

证明者是一种 GCP 资源,供 Binary Authorization 用于在容器映像部署时验证证明证明者包含的公钥与签名者用于对容器映像摘要签名及创建证明的私钥相对应。Binary Authorization Enforcer 会在部署时使用证明者,以限制哪些容器映像可以利用在部署前创建的可验证附带证明部署到集群。

因此,证明者可以由同时也管理公钥和私钥对的安全运维人员管理,而签名者通常是软件工程师或 DevOps 质量检查人员或合规人员,他们负责生成可部署的容器映像、用私钥对其签名,然后创建证明,最后再尝试部署。

证明者拥有以下各项:

在设置包含要求提供证明规则的政策时,必须为需要验证容器映像是否可供部署的每个人员或流程添加证明者。您可以使用 Google Cloud Console、gcloud 界面或 Binary Authorization REST API 添加证明者。

如需了解详情,请参阅使用 CLI 创建证明者使用控制台创建证明者

加密密钥

如果政策包含要求提供证明规则,Binary Authorization 会在映像部署时使用数字签名来验证映像。

生成密钥对。签名者会使用私钥对容器映像描述符签名。这将创建证明。

然后,证明者将创建完毕,并存储在政策中。与用于签名的私钥相对应的公钥将上传并附加到证明者。

在部署时,GKE 会调用 Binary Authorization Enforcer,后者需要使用政策中的证明者来验证关联证明的有效性,从而保证每个经过数字签名的容器映像都可以进行部署。

Binary Authorization 支持两种类型的密钥:

PKIX 密钥可以存储在本地、外部或 Cloud Key Management Service 中。

Container Analysis 备注

Binary Authorization 使用 Container Analysis 来存储在授权过程中使用的可信元数据。对于您创建的每个证明者,您都必须创建一个 Container Analysis 备注。每个证明都存储为此备注的一个发生实例。

当 Binary Authorization 评估要求证明者验证映像的规则时,它会检查 Container Analysis 存储空间,以了解是否存在必需的证明。