Binary Authorization 概念

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

政策

Binary Authorization 政策(也称为项目单例政策)是一套用于管理容器映像部署的规则。

持续验证 (CV) 使用不同类型的政策,称为平台政策

政策包括以下几个部分:

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

  • Google Cloud 控制台
  • gcloud 命令

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

每个 Google Cloud 项目只能有一项政策。您必须在运行部署平台的项目中配置政策。在单项目配置中,政策和所有从属资源(证明者证明)都位于同一个项目。为实现职责分离,您可以使用多项目配置。在此配置中,部署平台可以在一个项目中运行,证明者可以位于另一个项目中,证明可以仍位于另一个项目中。

如需在受支持的平台上设置和使用 Binary Authorization,请参阅按平台设置

查看 GKE 的多项目设置示例。

规则

配置政策时,可以定义其规则。规则定义了映像在部署之前必须满足的限制条件。政策具有一条默认规则,并且可以包含特定规则,具体取决于平台。如需了解详情,请参阅按平台支持的规则类型

每条规则都可以配置有评估模式强制执行模式,例如,规则可以要求映像具有已签名的证明才能进行部署。

默认规则

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

如需详细了解如何配置默认规则,请参阅配置政策

专用规则

可以将一个或多个特定规则添加到政策。这种类型的规则适用于要部署到特定集群、服务账号或身份的映像。对特定规则的支持因平台而异。如需了解详情,请参阅按平台支持的规则类型

在 YAML 格式政策文件中,每个针对集群的规则均在 clusterAdmissionRule 节点中指定。

按平台支持的规则类型

下表展示了每个部署平台支持的规则类型。

平台 默认规则 特定规则
GKE 支持 集群
Kubernetes 命名空间
Kubernetes 服务账号
Cloud Run 支持 不支持
GKE 关联集群 支持 集群
Kubernetes 命名空间
Kubernetes 服务账号
GKE on AWS 支持 集群
Kubernetes 命名空间
Kubernetes 服务账号
Google Distributed Cloud 支持 集群
Kubernetes 命名空间
Kubernetes 服务账号
Google Distributed Cloud 支持 集群
Kubernetes 命名空间
Kubernetes 服务账号
Cloud Service Mesh 支持 Cloud Service Mesh 服务身份

评估模式

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

评估模式分为三种:

  • 允许所有映像:允许部署所有映像。
  • 禁止所有映像:禁止部署所有映像。
  • 要求提供证明:要求签名者对映像摘要进行数字签名,并在部署前创建证明。在部署时,Binary Authorization Enforcer 会使用证明者在部署关联的映像之前验证证明中的签名。

强制执行模式

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

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

  • 试运行:仅审核日志:试运行模式是政策中的一种强制执行模式,允许部署不符合规则的映像,但会将有关该部署的详细信息写入 Cloud Audit Logs 中。借助试运行模式,您可以在政策生效之前对其进行测试(例如在生产环境中)。

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

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

如需详细了解写入 Cloud Audit Logs 的消息,请参阅查看审核日志(GKE、Google Distributed Cloud、Cloud Service Mesh)查看审核日志 (Cloud Run)

持续验证

持续验证 (CV) 是 Binary Authorization 的一项功能,用于定期检查与正在运行的 Pod 关联的映像,以持续确保政策合规性。

详细了解 CV

豁免映像

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

如需将豁免映像添加到许可名单,请在政策文件中添加以下内容:

admissionWhitelistPatterns:
  - namePattern: EXEMPT_IMAGE_PATH

EXEMPT_IMAGE_PATH 替换为要排除的映像的路径。如需豁免其他映像,请添加其他 - namePattern 条目。详细了解 admissionWhitelistPatterns

许可名单模式

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

gcr.io/example-project/*

如需将注册表位置为指定路径的任意子目录(例如 gcr.io/example-project/my-directory/helloworld)的所有映像列入许可名单,请运行以下命令:

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:*

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

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

详细了解如何使用容器映像摘要

了解如何在 Google Cloud 控制台中、使用命令行工具或使用 REST API 管理豁免映像。

Google 维护的系统映像

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

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

gcloud alpha container binauthz policy export-system-policy

证明

证明是一种数字文档,用于为映像提供证明。在部署期间,Binary Authorization 会在允许部署映像之前先验证证明。

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

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

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

了解如何创建和使用证明者和证明

签名者

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

了解如何创建和使用证明者和证明

证明者

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

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

证明者拥有以下各项:

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

了解如何创建和使用证明者和证明

加密密钥

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

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

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

在尝试部署映像时,Binary Authorization 会使用政策中的证明者来验证映像的证明。如果证明可以验证,则系统会部署映像。

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

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

创建加密密钥和证明者

Artifact Analysis 备注

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

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