使用托管式工作负载身份的后端 mTLS 概览

您可以通过托管式工作负载身份或不通过托管式工作负载身份来实现后端 mTLS。 如需详细了解不使用托管式工作负载身份的后端 mTLS,请参阅后端经过身份验证的 TLS 和后端 mTLS 概览

本文档简要介绍了如何使用托管式工作负载身份在应用负载平衡器及其后端之间实现双向 TLS (mTLS)。托管式工作负载身份会自动预配和管理来自 Certificate Authority Service 的 X.509 证书。

本文档中的信息以以下文档中介绍的概念为基础:

负载平衡器的托管式工作负载身份简介

如果不使用托管式工作负载身份,设置后端 mTLS 需要配置多个资源。将托管式身份分配给负载平衡器的后端服务后,托管式工作负载身份会自动为 mTLS 创建必要的资源,例如客户端证书、信任配置和后端身份验证配置。

对于后端 mTLS,负载平衡器的后端服务资源充当向后端(即目标工作负载)验证自身身份的源工作负载

您可以为负载平衡器的后端服务分配由 SPIFFE ID 表示的托管式身份。Google Cloud Certificate Authority Service 会自动为 SPIFFE ID 预配 X.509 证书。此 SPIFFE ID 的 X.509 证书也称为 SPIFFE 可验证身份文档 (SVID)。负载平衡器的后端服务及其后端使用 SVID 通过 mTLS 身份验证相互进行身份验证。

下图展示了负载平衡器(源工作负载)和后端(目标工作负载)如何使用托管式工作负载身份相互进行身份验证。

使用托管式工作负载身份的后端 mTLS。
使用托管式工作负载身份的后端 mTLS(点击可放大)。

以下是一个 X.509-SVID 的示例,它充当 SPIFFE ID 的封装容器。SPIFFE ID 以 URI 的形式表示,并编码在 X.509 证书的主题备用名称 (SAN) 中。

Issuer:
    C=US
    O=Example Inc.
    CN=Example CA

Validity:
    Not Before: Jun 14 00:00:00 2025 GMT
    Not After : Jun 16 00:00:00 2025 GMT

Subject (Distinguished Name):
    C=US
    O=Example Inc.
    OU=Production
    CN=api.example.com

Subject Public Key Info:
    Public Key Algorithm: RSA Encryption
    RSA Public-Key: (2048 bit)

X.509v3 Extensions:
    Subject Alternative Name (SAN):
        DNS: api.example.com
        URI: spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

此输出包括以下值:

  • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池 ID
  • PROJECT_NUMBER:您的Google Cloud 项目的项目编号
  • NAMESPACE_ID:命名空间 ID
  • MANAGED_IDENTITY_ID:受管身份 ID

使用托管式工作负载身份的优势

以下是使用托管式工作负载身份进行后端 mTLS 的一些优势:

  • 增强安全性:通过加入工作负载身份池, Google Cloud 负载平衡器及其后端会成为信任网域的一部分。与后端 mTLS 结合使用时,负载平衡器和后端工作负载会相互进行身份验证。这种双向身份验证可防止未经授权的工作负载访问您的服务,并加密传输中的数据。

  • 自动证书管理:成功进行工作负载证明后,Google Cloud 会自动为参与工作负载身份池信任网域的工作负载预配和轮替 X.509 证书。这种 X.509 证书的自动管理功能可省去复杂且容易出错的手动证书管理流程。

  • 可互操作的身份:工作负载身份池使用 SPIFFE 框架(一种用于跨分布式系统管理身份的标准),可在基于微服务的现代架构中实现身份验证和授权。

  • 集中式治理:工作负载身份池提供了一个集中控制点。管理员可以定义信任网域并制定证明政策,以控制哪些工作负载可以接收托管式身份的 X.509 证书。

使用托管式工作负载身份的后端 mTLS 的架构

以下组件协同工作,以使用托管式工作负载身份实现后端 mTLS:

  • 负载平衡器的后端服务 (Compute Engine API)
  • Identity and Access Management 信任网域 (Identity and Access Management API)
  • 证书授权机构池(Certificate Authority Service API)
  • 后端身份验证配置(网络安全 API)
  • Certificate Manager 信任配置 (Certificate Manager API)
  • Certificate Manager 托管身份证书(Certificate Manager API)

下图展示了负载平衡器后端服务上的受管身份,该身份可让负载平衡器向后端进行身份验证。在图中,步骤 1-3 表示明确创建的资源,而步骤 4-5 表示自动创建的资源。

  1. 配置 Certificate Authority Service CA 池,以便向托管式工作负载身份颁发证书。
  2. 通过创建工作负载身份池来配置信任网域。 此池需要命名空间、受管身份、证明政策、内嵌证书签发配置资源和内嵌信任配置资源。
  3. 使用受管身份配置负载平衡器的后端服务。
  4. 托管式工作负载身份会自动创建 Certificate Manager 管理的身份证书和 Certificate Manager 信任配置。

    Certificate Manager 托管式身份证书是根据工作负载身份池中的证书颁发配置创建的。 Certificate Manager 信任配置与工作负载身份池的内嵌信任配置保持同步。

  5. 托管式工作负载身份会自动创建后端身份验证配置。

    Certificate Manager 信任配置已附加到后端身份验证配置。Certificate Manager 管理的身份证书 (X.509-SVID) 也附加到后端身份验证配置,然后用于向后端进行身份验证。

如需详细了解如何使用托管式身份配置后端 mTLS,请参阅使用托管式工作负载身份设置后端 mTLS

使用托管式工作负载身份的后端 mTLS。
使用托管式工作负载身份的后端 mTLS 架构(点击可放大)。

使用托管式身份在后端 mTLS 期间创建的资源

如上图所示,在为后端服务分配受管身份时,您无需配置后端身份验证配置、Certificate Manager 信任配置和 Certificate Manager 证书。这些资源由托管式工作负载身份自动创建。

本部分将详细介绍受管身份配置流程的各个部分,重点介绍显式创建的资源和自动创建的资源。

明确创建的资源

使用托管式工作负载身份配置后端 mTLS 时,需要明确创建以下资源。

证书授权机构池

如需为负载平衡器配置托管式工作负载身份,您首先需要配置一个证书授权机构,还可以选择配置一个或多个从属 CA。此设置称为 CA 层次结构

您可以使用 CA Service 池来设置此层次结构。

通过使用内嵌证书颁发配置更新工作负载身份池,将工作负载身份池绑定到 CA 池。

托管式 Workload Identity

您需要在工作负载身份池命名空间中创建托管式工作负载身份。受管身份是负载平衡器工作负载所呈现的 SVID 中使用的完全指定的 SPIFFE ID。

证明政策

证明政策包含相关规则,供 Google Cloud IAM 验证后端服务是否符合条件,可以接收分配给该后端服务的受管身份的 X.509 证书。

如果证明政策验证通过,IAM 会向证书授权机构服务请求受管身份的 X.509 证书。X.509 证书是在绑定到受管身份的 CA 池中创建的。CA Service 通过身份反射来预配证书,其中配置的 SPIFFE ID 会反射到 X.509 证书上。

内嵌证书颁发配置

设置工作负载身份池时,您需要配置内嵌证书颁发配置。此配置用于指定使用 Certificate Authority Service 实例中的哪个 CA 池来为工作负载身份池中的身份生成 X.509 证书。配置文件还指定了证书的生命周期、轮替窗口百分比和密钥算法。

在成功强制执行证明政策后,CA 池会向托管式工作负载身份颁发 X.509 证书。

工作负载身份池的内嵌信任配置

默认情况下,同一信任网域中的工作负载可以使用托管式工作负载身份相互进行身份验证。如果您希望位于不同信任网域中的工作负载相互进行身份验证,则需要在工作负载身份池中明确声明信任关系。为此,您可以创建一个内嵌信任配置,用于识别和接受来自其他信任网域的证书。这些证书用于构建信任链并验证来自其他网域的工作负载的身份。

内嵌信任配置包含一组信任锚,托管式工作负载身份会使用这些信任锚来验证对等证书。Certificate Manager 信任配置封装了 SPIFFE 信任库,该信任库与工作负载身份池的内嵌信任配置保持同步。

由于工作负载身份池已绑定到 CA 池,因此工作负载身份池会自动信任同一 CA 池的根证书。您无需将池的 CA 根证书添加到内嵌信任配置中,因为该信任已内置。

后端服务 (Compute Engine API)

如需为负载平衡器分配受管身份,您需要配置负载平衡器的后端服务,以使其 tlsSettings 属性指向新的 identity 属性 (backendService.tlsSettings.identity)。

请注意,在负载平衡器的后端服务中使用 identity 字段时,存在以下限制:

  • 如果您设置了 identity 属性,则无法在 tlsSettings 属性中手动设置以下字段:

    • tlsSettings.sni
    • tlsSettings.subjectAltNames
    • tlsSettings.authenticationConfig
  • identity 字段只能在创建后端服务期间分配。

  • identity 字段不可更改。将一个证书分配给负载平衡器的后端服务后,便无法更新或删除该证书。

自动创建的资源

在负载平衡器的后端服务上设置 identity 属性 (backendService.tlsSettings.identity) 后,受管工作负载身份会自动在 Certificate Manager API 和 Network Security API 中创建以下资源。

自动创建的资源与后端服务在同一项目中创建,并使用该项目中的标准配额。

Certificate Manager 信任配置 (Certificate Manager API)

证书管理器信任配置是自动创建的,无法直接修改或删除。

Certificate Manager 信任配置包含一个名为 spiffeTrustStores 的字段。spiffeTrustStores 字段包含与工作负载身份池的信任网域关联的信任包,以及工作负载身份池的内嵌信任配置中 additionalTrustBundles 字段指定的任何其他信任包。

为了验证 SPIFFE 证书,在使用托管式工作负载身份时,系统会自动启用 Certificate Manager 信任配置中的 spiffeTrustStores 字段。启用 spiffeTrustStores 字段后,trustStores 字段仍为空。

spiffeTrustStores 字段是一种映射数据结构,其中的键值对如下所示:

  • 该键可以是与工作负载身份池相关的信任网域(格式为以 .workload.id.goog 结尾),也可以是其他信任网域。
  • 是一个 TrustStore 对象。此对象包含一组受信任的根证书(称为信任软件包),用于验证来自特定信任网域的 SPIFFE 证书。

从本质上讲,此映射允许将负载平衡器配置为信任来自多个不同安全网域的信任库。当后端提供其证书时,负载平衡器会提取 SPIFFE ID,识别信任网域,并使用该映射查找验证该证书所需的正确信任库。

Certificate Manager 托管身份证书 (Certificate Manager API)

Certificate Manager 托管式身份证书由托管式工作负载身份自动创建。Certificate Manager 托管式身份证书是只读的,无法使用 Certificate Manager API 直接修改或删除。 证书管理器托管的身份证书基于内嵌证书颁发配置,该配置在工作负载身份池中定义。

Certificate Manager 代管式身份证书具有 managedIdentity 属性,用于将其标识为代管式身份证书。Certificate Manager 托管式身份证书资源以 PEM 编码格式存储 X.509-SVID。此 X.509-SVID 包含在 SAN 字段中编码为 URI 的 SPIFFE ID。 此 SPIFFE ID 对应于工作负载身份池中的托管式身份。

Certificate Manager 代管式身份证书的范围是 CLIENT_AUTH,这表示此证书在后端 mTLS 中用作客户端证书。

后端身份验证配置(网络安全 API)

后端身份验证配置由托管式工作负载身份自动创建。后端身份验证配置是只读的,无法使用 Network Security API 直接修改或删除。

Certificate Manager 信任配置已附加到后端身份验证配置。

Certificate Manager 管理的身份证书也会附加到后端身份验证配置,并用作负载平衡器与目标工作负载之间的后端 mTLS 请求中的 X.509-SVID。

限制

  • 后端 mTLS 与托管式工作负载身份只能针对全球外部应用负载平衡器进行配置。传统应用负载平衡器不支持后端 mTLS。

  • 全球互联网 NEG 后端不支持后端 mTLS。

  • 如果您为后端服务 (backendService.tlsSettings.identity) 分配了托管式身份,则无法在后端服务的 tlsSettings 属性中手动设置以下字段:

    • backendService.tlsSettings.sni
    • backendService.tlsSettings.subjectAltNames
    • backendService.tlsSettings.authenticationConfig
  • 只能在创建后端服务时分配托管式身份。

  • 受管身份不可变。为负载平衡器的后端服务分配托管式身份后,无法更新或删除该身份。

后续步骤