托管式工作负载身份功能是 Identity and Access Management API 的一部分。托管式工作负载身份通过自动预配和管理来自 Certificate Authority Service 的 X.509 证书来简化 mTLS。
托管式工作负载身份基于 Secure Production Identity Framework For Everyone (SPIFFE) 标准,该标准提供了一个框架,用于使用唯一的 SPIFFE ID 识别工作负载、对其进行身份验证并保护其之间的通信。
本页讨论了在为负载平衡器分配托管式身份以进行 mTLS 身份验证的背景下,托管式工作负载身份的用法。如需详细了解其他工作负载的托管式工作负载身份,请参阅托管式工作负载身份概览。
SPIFFE ID
托管式身份由 SPIFFE ID 表示。SPIFFE ID 是一个 URI,用于唯一标识工作负载;在后端 mTLS 的情况下,工作负载是负载平衡器的后端服务。其格式如下所示:
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
以下部分介绍了不同的托管式工作负载身份资源。
托管式工作负载身份资源层次结构
如需为负载平衡器设置托管式工作负载身份,您需要创建以下资源。本文档的以下部分介绍了这些资源。
- 工作负载身份池
- 命名空间
- 托管式 Workload Identity
- 证明政策
工作负载身份池
托管式工作负载身份在工作负载身份池中定义,该池充当信任域。
信任网域表示一个逻辑安全边界,工作负载可以在该边界内使用其 SPIFFE ID 相互进行身份验证和授权。同一信任网域中的所有工作负载共享一个共同的信任根,这使得工作负载能够验证彼此的身份。
如需使用托管式身份,您需要以 TRUST_DOMAIN 模式配置工作负载身份池。池中的所有身份都包含一个命名空间和一个单独的工作负载标识符。
在下图中,负载平衡器和后端属于同一信任网域,共享同一根证书。根证书用于构建信任链并验证信任网域内工作负载的身份。
默认情况下,同一信任网域中的工作负载可以使用托管式工作负载身份相互进行身份验证。如果您希望位于不同信任网域中的工作负载相互进行身份验证,则需要在工作负载身份池中明确声明信任关系。为此,您可以创建一个内嵌信任配置,用于识别和接受来自其他信任网域的证书。
命名空间
在工作负载身份池中,托管式工作负载身份被整理到称为“命名空间”的管理边界中。命名空间可帮助您整理和授予对相关工作负载身份的访问权限。
托管式 Workload Identity
托管式工作负载身份或托管式身份是在工作负载身份池中配置的工作负载标识符。它附加到 Google Cloud资源。每个受管身份都由命名空间和单独的工作负载标识符唯一标识。
在实现后端 mTLS 的背景下,受管身份会附加到负载平衡器的后端服务资源。
受管身份的值是完全指定的 SPIFFE ID,必须符合以下格式:
spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
证明政策
Compute Engine 资源的托管式工作负载身份要求您配置证明政策。
工作负载证明政策包含一些规则,用于指定哪些工作负载可以获得托管式工作负载身份的 X.509 证书。证明政策使用可验证的工作负载属性(例如项目 ID 或资源名称)来确保只有可信工作负载才能使用特定的托管式身份。