您可以使用或不使用 托管式工作负载身份来实现后端 mTLS。 如需详细了解不使用托管式工作负载身份的后端 mTLS,请参阅 后端经过身份验证的 TLS 和后端 mTLS 概览。
本文档简要介绍了如何使用托管式工作负载身份在应用负载平衡器及其后端之间实现双向 TLS (mTLS)。 托管式工作负载身份会自动预配和管理来自 Certificate Authority Service 的 X.509 证书。
本文档中的信息基于以下文档中介绍的概念:
- 托管式工作负载身份概览
- Secure Production Identity Framework For Everyone (SPIFFE)
- Certificate Authority Service
- 后端经过身份验证的 TLS 和后端 mTLS 概览
负载平衡器的托管式工作负载身份简介
如果不使用托管式工作负载身份,则需要配置多个资源才能设置后端 mTLS。当您将托管式身份分配给负载均衡器的后端服务时,托管式工作负载身份会自动为 mTLS 创建必要的资源,例如客户端证书、信任配置和后端身份验证配置。
对于后端 mTLS,负载均衡器的后端服务资源充当 源工作负载,向后端(即 目标工作负载)验证自身身份。
您可以将由 SPIFFE ID 表示的托管式身份分配给负载均衡器的后端服务。 Google Cloud Certificate Authority Service 会自动为 SPIFFE ID 预配 X.509 证书。此 SPIFFE ID 的 X.509 证书也称为 SPIFFE 可验证身份文档 (SVID)。 负载均衡器的后端服务及其后端使用 SVID 通过 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:工作负载身份池 IDPROJECT_NUMBER:您的 Google Cloud 项目的项目编号NAMESPACE_ID:命名空间 IDMANAGED_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)
- 后端身份验证配置 (Network Security API)
- Certificate Manager 信任配置 (Certificate Manager API)
- Certificate Manager 托管式身份证书 (Certificate Manager API)
下图展示了负载均衡器后端服务上的托管式身份,该身份可让负载均衡器向后端验证自身身份。在该图中,步骤 1-3 表示显式创建的资源,而步骤 4-5 表示自动创建的资源。
- 配置 Certificate Authority Service CA 池,以便向托管式工作负载身份颁发证书。
- 通过创建工作负载身份池来配置信任网域。 此池需要命名空间、托管式身份、证明政策、内嵌证书颁发配置资源和内嵌信任配置资源。
- 使用托管式身份配置负载均衡器的后端服务。
托管式工作负载身份会自动创建 Certificate Manager 托管式身份证书和 Certificate Manager 信任配置。
Certificate Manager 托管式身份证书是根据工作负载身份池中的证书颁发配置创建的。 Certificate Manager 信任配置与工作负载身份池的内嵌信任配置保持同步。
托管式工作负载身份会自动创建后端身份验证配置。
Certificate Manager 信任配置附加到后端身份验证配置。Certificate Manager 托管式身份证书 (X.509-SVID) 也附加到后端身份验证配置,然后用于向后端进行身份验证。
如需详细了解如何使用托管式身份配置后端 mTLS,请参阅 使用托管式工作负载身份设置后端 mTLS。
使用托管式身份的后端 mTLS 期间创建的资源
如上一个架构图所示,在将托管式身份分配给后端服务时,您无需配置后端身份验证配置、Certificate Manager 信任配置和 Certificate Manager 证书。这些资源由托管式工作负载身份自动创建。
本部分将详细介绍托管式身份配置流程的不同部分,重点介绍显式创建的资源和自动创建的资源。
显式创建的资源
在使用托管式工作负载身份配置后端 mTLS 时,需要显式创建以下资源。
证书授权机构池
如需为负载均衡器配置托管式工作负载身份,您首先需要配置证书授权机构,并且可以选择配置一个或多个从属 CA。此设置称为 CA 层次结构。
您可以使用 CA Service 池 来设置此层次结构。
通过使用内嵌证书颁发配置更新 工作负载身份池,将工作负载身份池绑定到 CA 池。
工作负载身份池
托管式工作负载身份在工作负载身份池中定义,该池充当信任网域。
信任网域表示一个逻辑安全边界,工作负载可以在其中使用其 SPIFFE ID 相互进行身份验证和授权。同一信任网域中的所有工作负载共享一个共同的信任根,这使得工作负载可以验证彼此的身份。
如需使用托管式身份,您需要在 TRUST_DOMAIN 模式下配置工作负载身份池。池中的所有身份都包含一个命名空间和一个单独的工作负载标识符。
命名空间
在工作负载身份池中,托管式工作负载身份被整理到称为“命名空间”的管理边界中。 命名空间可帮助您整理相关的工作负载身份并授予对这些身份的访问权限。
托管式工作负载身份
托管式工作负载身份基于 SPIFFE 标准,该标准提供了一个框架,用于使用唯一的 SPIFFE ID 标识工作负载、对工作负载进行身份验证并保护工作负载之间的通信。
托管式工作负载身份或 托管式身份是在工作负载身份池中配置的工作负载标识符。它附加到一 Google Cloud 资源。每个托管式身份都由命名空间和单独的工作负载标识符唯一标识。
在实现后端 mTLS 的上下文中,托管式身份附加到负载均衡器的后端服务资源。
托管式身份的值是完全指定的 SPIFFE ID,必须符合以下格式:
spiffe://TRUST_DOMAIN_NAME/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
TRUST_DOMAIN_NAME 进一步展开如下:
WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog
总而言之,Compute Engine 工作负载(例如负载均衡器的后端服务资源)可以具有如下托管式身份:
spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
证明政策
证明政策包含 Google Cloud IAM 规则,用于验证后端服务是否有资格接收托管式身份的 X.509 证书。
如果证明政策验证通过,IAM 会向 Certificate Authority Service 请求托管式身份的 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.snitlsSettings.subjectAltNamestlsSettings.authenticationConfig
只能在创建后端服务期间分配
identity字段。identity字段不可变。将该字段分配给负载均衡器的后端服务后,无法更新或删除。
自动创建的资源
在负载均衡器的后端服务上设置 identity 属性 (backendService.tlsSettings.identity)
后,
Certificate Manager API 和 Network Security API 中的以下资源将由托管式工作负载身份自动创建。
自动创建的资源在与后端服务相同的项目中创建,并使用该项目中的标准配额。
Certificate Manager 信任配置 (Certificate Manager API)
Certificate Manager 信任配置 会自动创建,无法直接修改或删除。
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 托管式身份证书基于内嵌证书颁发配置,该配置在工作负载身份池中定义。
Certificate Manager 托管式身份证书具有 managedIdentity 属性,该属性将其标识为托管式身份证书。Certificate Manager 托管式身份证书资源以 PEM 编码格式存储 X.509-SVID。此 X.509-SVID 包含在 SAN 字段中编码为 URI 的 SPIFFE ID。
此 SPIFFE ID 对应于工作负载身份池中的托管式身份。
Certificate Manager 托管式身份证书的范围是 CLIENT_AUTH,这表示此证书在后端 mTLS 中用作客户端证书。
后端身份验证配置 (Network Security API)
后端身份验证配置由托管式 工作负载身份自动 创建。后端身份验证配置是只读的,无法使用 Network Security API 直接修改或删除。
Certificate Manager 信任配置附加到后端身份验证配置。
Certificate Manager 托管式身份证书也附加到后端身份验证配置,并在负载均衡器和目标工作负载之间的后端 mTLS 请求中用作 X.509-SVID。
限制
使用托管式工作负载身份的后端 mTLS 只能针对全球外部应用负载平衡器进行配置。传统应用负载平衡器不支持后端 mTLS。
全球互联网 NEG 后端不支持后端 mTLS。
如果您将托管式身份分配给后端服务 (
backendService.tlsSettings.identity), 则无法在后端服务的tlsSettings属性上手动设置以下字段:backendService.tlsSettings.snibackendService.tlsSettings.subjectAltNamesbackendService.tlsSettings.authenticationConfig
只能在创建后端服务时分配托管式身份。
托管式身份不可变。将托管式身份分配给负载均衡器的后端服务后,无法更新或删除。