使用托管式工作负载身份设置后端 mTLS

本文档介绍了如何在负载平衡器的后端服务上配置托管式工作负载身份。分配托管式身份后,负载平衡器及其后端可以使用后端 mTLS 相互进行身份验证。

如需使用托管式工作负载身份配置后端 mTLS,您需要执行以下操作:

  1. 配置 Certificate Authority Service 证书授权机构 (CA) 池,以便为托管式工作负载身份颁发 X.509 证书。
  2. 通过创建包含命名空间、受管身份、证明政策、内嵌证书签发配置资源和内嵌信任配置资源的工作负载身份池来配置信任域。1
  3. 使用内嵌证书颁发配置将 CA 绑定到工作负载身份池。
  4. 授权托管式工作负载身份从 CA 池请求证书。
  5. 创建负载平衡器并将受管身份附加到其后端服务。

1 仅当负载平衡器及其后端位于不同的信任网域中时,您才需要创建内嵌信任配置。在此示例中,负载平衡器和后端都属于同一信任网域,因此内嵌信任配置资源的配置是可选的。

如需为后端创建托管式身份,请参阅 托管式工作负载身份概览

准备工作

  1. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  2. 查看使用托管式工作负载身份的后端 mTLS 概览文档。

  3. 了解如何使用 Certificate Authority Service 颁发证书。

  4. Enable the IAM, Certificate Authority Service, Compute Engine, Certificate Manager, and Network Security APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable iam.googleapis.com privateca.googleapis.com compute.googleapis.com certificatemanager.googleapis.com  networksecurity.googleapis.com

  5. 配置 Google Cloud CLI 以使用添加到许可名单的项目进行结算和配额计算。

    gcloud config set billing/quota_project PROJECT_ID
    

    PROJECT_ID 替换为已添加到托管式工作负载身份预览版许可名单的项目的 ID。

  6. 为后端创建托管式身份。如需了解详情,请参阅托管式工作负载身份概览

所需的角色

如需获得创建托管式工作负载身份和预配托管式工作负载身份证书所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

配置 CA Service,以便为托管式工作负载身份颁发证书

您可以使用 CA 池来设置根 CA。CA 池向托管式工作负载身份颁发 X.509 证书。

创建根 CA 池

使用 gcloud privateca pools create 命令Enterprise 层级中创建根 CA 池。此层级用于颁发长期、少量的证书。

gcloud privateca pools create ROOT_CA_POOL_ID \
    --location=REGION \
    --project=PROJECT_ID \
    --tier=enterprise

替换以下内容:

  • ROOT_CA_POOL_ID:根 CA 池的唯一 ID

  • REGION:根 CA 池所在的区域

  • PROJECT_ID:项目 ID

如需详细了解 CA 池,请参阅创建 CA 池

创建根 CA

使用 gcloud privateca roots create 命令在根 CA 池中创建根 CA。

如需创建根 CA,请运行以下命令:

gcloud privateca roots create ROOT_CA_ID \
    --pool=ROOT_CA_POOL_ID \
    --subject="CN=ROOT_CA_CN, O=ROOT_CA_ORGANIZATION" \
    [--key-algorithm="KEY_ALGORITHM"] \
    --max-chain-length=1 \
    --location=REGION \
    --project=PROJECT_ID \
    --auto-enable

替换以下内容:

  • ROOT_CA_ID:根 CA 的唯一名称。CA 名称不得超过 64 个字符,并且只能包含小写和大写字母数字字符、下划线或连字符。CA 名称在区域内必须是唯一的。
  • ROOT_CA_POOL_ID:根 CA 池的 ID。
  • ROOT_CA_CN:根 CA 的通用名称。
  • ROOT_CA_ORGANIZATION:根 CA 的组织。
  • KEY_ALGORITHM:用于创建 Cloud KMS 密钥的算法。此标记是可选的。如果您不添加此标志,则密钥算法默认为 rsa-pkcs1-4096-sha256
  • REGION:根 CA 池所在的区域。
  • PROJECT_ID:项目 ID。

如需详细了解根 CA,请参阅创建根 CA

创建托管式工作负载身份

使用托管式工作负载身份时, Google Cloud 可以自动预配和管理来自证书颁发机构服务的 X.509 证书。工作负载身份在工作负载身份池中定义,并整理到称为“命名空间”的管理边界中。

创建工作负载身份池

您必须在 TRUST_DOMAIN 模式下创建池才能创建托管式工作负载身份。如需为托管式工作负载身份创建工作负载身份池,请使用 gcloud iam workload-identity-pools create 命令。

gcloud iam workload-identity-pools create WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --mode="TRUST_DOMAIN"

WORKLOAD_IDENTITY_POOL_ID 替换为池的唯一 ID。ID 必须介于 4 到 32 个字符之间,只能包含小写字母数字字符和短划线,并且必须以字母数字字符开头和结尾。创建工作负载身份池后,无法再更改其 ID。

如需验证您的工作负载身份池是否是在 TRUST_DOMAIN 模式下创建的,请使用 gcloud iam workload-identity-pools describe 命令。

gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
    --location="global"

输出类似于以下内容:

mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID
state: ACTIVE

此输出包括以下值:

  • PROJECT_NUMBER:您的Google Cloud 项目的项目编号
  • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池 ID

创建命名空间

借助 gcloud iam workload-identity-pools namespaces create 命令,您可以在工作负载身份池中创建命名空间。

gcloud iam workload-identity-pools namespaces create NAMESPACE_ID \
    --workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
    --location="global"

替换以下内容:

  • NAMESPACE_ID:命名空间的唯一 ID。ID 必须介于 2 到 63 个字符之间,只能包含小写字母数字字符和短划线,并且必须以字母数字字符开头和结尾。创建命名空间后,无法更改其 ID。
  • WORKLOAD_IDENTITY_POOL_ID:您之前创建的工作负载身份池 ID。

创建托管式工作负载身份

借助 gloud iam workload-identity-pools managed-identities create 命令,您可以在工作负载身份池命名空间中创建托管式工作负载身份。

gcloud iam workload-identity-pools managed-identities create MANAGED_IDENTITY_ID \
    --namespace="NAMESPACE_ID" \
    --workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
    --location="global"

替换以下内容:

  • MANAGED_IDENTITY_ID:托管式身份的唯一 ID。ID 必须介于 2 到 63 个字符之间,只能包含小写字母数字字符和短划线,并且必须以字母数字字符开头和结尾。创建托管式工作负载身份后,无法再更改其 ID。
  • NAMESPACE_ID:您之前创建的命名空间 ID。
  • WORKLOAD_IDENTITY_POOL_ID:您之前创建的工作负载身份池 ID。

托管式工作负载身份 ID 是 SPIFFE 标识符,其格式如下:

spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

创建证明政策

在此示例中,证明政策包含一个证明规则,用于验证后端服务是否属于特定项目。如果证明政策验证通过,IAM 会向证书授权机构服务请求托管式身份的 X.509 证书。

如需创建证明政策,请运行以下命令以添加证明规则。

gcloud iam workload-identity-pools managed-identities add-attestation-rule MANAGED_IDENTITY_ID \
    --namespace=NAMESPACE_ID \
    --workload-identity-pool=WORKLOAD_IDENTITY_POOL_ID \
    --google-cloud-resource='//compute.googleapis.com/projects/PROJECT_NUMBER/type/BackendService/*' \
    --location=global

替换以下内容:

  • MANAGED_IDENTITY_ID:托管式身份的唯一 ID。ID 必须介于 2 到 63 个字符之间,只能包含小写字母数字字符和短划线,并且必须以字母数字字符开头和结尾。创建托管式工作负载身份后,无法再更改其 ID。
  • NAMESPACE_ID:您之前创建的命名空间 ID。
  • WORKLOAD_IDENTITY_POOL_ID:您之前创建的工作负载身份池 ID。
  • PROJECT_NUMBER: Google Cloud 项目的项目编号。

创建内嵌证书颁发配置

如需将 CA 绑定到工作负载身份池,工作负载身份池需要具有内嵌证书颁发配置

如需配置内嵌证书颁发配置,请创建 JSON 格式的配置文件 (cic.json)。该文件的格式类似于以下内容:

{
  "inlineCertificateIssuanceConfig": {
      "caPools": {
        "REGION": "projects/PROJECT_NUMBER/locations/REGION/caPools/ROOT_CA_POOL_ID",
      },
      ["lifetime": "CERTIFICATE_LIFETIME"],
      ["rotationWindowPercentage": ROTATION_WINDOW_PERCENTAGE],
      ["keyAlgorithm": "ALGORITHM"]
  }
}

替换以下内容:

  • REGION:CA 所在的区域。

  • PROJECT_NUMBER:项目编号。如需从 PROJECT_ID 变量指定的项目获取项目编号,请运行以下命令:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  • ROOT_CA_POOL_ID:根 CA 池的 ID。

  • CERTIFICATE_LIFETIME:由 CA 池颁发的工作负载证书的生命周期(以秒为单位),例如:86400 秒(24 小时)。 CERTIFICATE_LIFETIME 必须是介于 24 小时到 30 天之间的值。如果未指定 CERTIFICATE_LIFETIME,则证书有效期默认为 24 小时。CERTIFICATE_LIFETIME 为可选项。

  • ROTATION_WINDOW_PERCENTAGE:触发续订时证书生命周期的百分比。ROTATION_WINDOW_PERCENTAGE 的值必须介于 50 到 80 之间。 默认值为 50。ROTATION_WINDOW_PERCENTAGE 为可选项。

  • ALGORITHM:用于生成私钥的加密算法。ALGORITHM 的有效值包括 ECDSA_P256(默认值)、ECDSA_P384RSA_2048RSA_3072RSA_4096ALGORITHM 是可选的。

创建内嵌信任配置

在此配置示例中,负载平衡器和后端都属于同一信任网域,共享同一根证书。因此,内嵌信任配置的配置是可选的。 通用信任根用于构建信任链并验证信任网域内工作负载的身份。

托管式工作负载身份资源层次结构。
受管工作负载身份资源层次结构(点击可放大)。

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

如需创建内嵌信任配置,请执行以下操作:

  1. 下载证书。

    gcloud privateca pools get-ca-certs ROOT_CA_POOL_ID \
        --output-file=CERTIFICATE_PATH \
        --location=REGION
    

    替换以下内容:

    • ROOT_CA_POOL_ID:根 CA 池的 ID
    • CERTIFICATE_PATH:要将 PEM 编码的证书输出到的路径
    • REGION:根 CA 池的区域
  2. 创建一个 JSON 格式的配置文件 (tc.json),其中包含内嵌信任配置,并带有 PEM 格式的证书。

    该文件类似于以下内容:

    {
      "inlineTrustConfig": {
        "additionalTrustBundles": {
          "TRUST_DOMAIN_NAME1": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----"
              }
            ]
          },
          "TRUST_DOMAIN_NAME2": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL3\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL4\n-----END CERTIFICATE-----"
              }
            ]
          }
        }
      }
    }
    

    替换以下内容:

    • TRUST_DOMAIN_NAME:信任网域可以是任何信任网域(例如“example.com”),包括另一个(甚至相同的)工作负载身份池信任网域。

      对于工作负载身份池信任网域,信任网域名采用以下格式:

      WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog
      

      在该格式中,替换以下内容:

      • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池的 ID
      • PROJECT_NUMBER:包含工作负载身份池的项目的编号
    • CERTIFICATE_MATERIAL:PEM 格式的 CA 证书,受信任可在信任网域中颁发证书。 以下命令可用于将 PEM 格式的证书文件编码为一行字符串:

      cat trust-anchor.pem | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g'
      

将 CA 绑定到工作负载身份池

创建 CA 层次结构并为 CA 创建证书颁发配置后,您可以将 CA 绑定到工作负载身份池。如需将 CA 绑定到工作负载身份池,您需要使用 CA 的证书颁发配置来更新工作负载身份池。然后,您可以验证该池是否已更新。

更新工作负载身份池

如需将 CA 绑定到工作负载身份池,您可以使用 CA 的证书颁发配置来更新工作负载身份池。然后,您可以验证该池是否已更新。

如需更新池,请运行以下命令:

gcloud iam workload-identity-pools update WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --inline-certificate-issuance-config-file=CIC_JSON_FILE_PATH \
    [--inline-trust-config-file=TC_JSON_FILE_PATH] \
    --project=PROJECT_ID

替换以下内容:

  • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池 ID。

  • CIC_JSON_FILE_PATH:您之前创建的内嵌证书颁发配置的 JSON 格式配置文件 (cic.json) 的路径。

  • TC_JSON_FILE_PATH:您之前创建的内嵌信任配置的 JSON 格式配置文件 (tc.json) 的路径。如果您的工作负载跨不同信任网域进行身份验证,则必须指定此文件。否则,您可以省略 --inline-trust-config

验证工作负载身份池是否已更新

如需验证工作负载身份池是否已随证书颁发配置和信任配置一起更新,请运行以下命令:

gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --project=PROJECT_ID

替换以下内容:

  • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池 ID。

  • PROJECT_ID:项目 ID

输出类似于以下内容:

inlineCertificateIssuanceConfig:
    caPools:
      REGION: projects/PROJECT_NUMBER/locations/REGION1/caPools/ROOT_CA_POOL_ID
    keyAlgorithm: ALGORITHM
    lifetime: CERTIFICATE_LIFETIME
    rotationWindowPercentage: ROTATION_WINDOW_PERCENTAGE
inlineTrustConfig:
    additionalTrustBundles:
      TRUST_DOMAIN_NAME1:
          trustAnchors:
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL1
            -----END CERTIFICATE-----
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL2
            -----END CERTIFICATE-----
      TRUST_DOMAIN_NAME2:
          trustAnchors:
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL3
            -----END CERTIFICATE-----
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL4
            -----END CERTIFICATE-----
mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID
state: ACTIVE

此输出包括以下值:

  • PROJECT_NUMBER:项目编号
  • REGION:根 CA 池所在的区域
  • ROOT_CA_POOL_ID:根 CA 池的 ID
  • ALGORITHM:用于生成私钥的加密算法
  • CERTIFICATE_LIFETIME:CA 池签发的工作负载证书的生命周期(以秒为单位)
  • ROTATION_WINDOW_PERCENTAGE:触发续订时证书生命周期的百分比。
  • TRUST_DOMAIN_NAME:信任网域可以是任何信任网域(例如“example.com”),包括另一个(甚至相同的)工作负载身份池信任网域。
  • CERTIFICATE_MATERIAL:PEM 格式的 CA 证书,受信任可在信任网域中颁发证书
  • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池 ID

如果输出中不存在 inlineCertificateIssuanceConfiginlineTrustConfig,请验证您是否已正确配置 gcloud CLI 以将正确的项目用于结算和配额。您可能需要更新到较新版本的 gcloud CLI。

授权托管式工作负载身份从 CA 池请求证书

将 CA 绑定到工作负载身份池后,您需要授权托管式工作负载身份从 CA 池请求证书。

  1. 向信任网域授予 CA Service Workload Certificate Requester 角色 (roles/privateca.workloadCertificateRequester)。此角色会授权信任网域从 CA Service 证书链请求证书。

    gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.workloadCertificateRequester \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \
        --project=PROJECT_ID
    

    替换以下内容:

    • ROOT_CA_POOL_ID:根 CA 池的 ID
    • REGION:根 CA 池的区域
    • PROJECT_NUMBER:项目编号

      如需从 PROJECT_ID 获取 PROJECT_NUMBER,请运行以下命令:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
      
    • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池 ID

    • PROJECT_ID:项目 ID

  2. CA Service Pool Reader 角色 (roles/privateca.poolReader) 授予给信任网域。此角色授权信任网域从 CA 的证书链获取已签名的 X.509 证书。

    gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.poolReader \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \
        --project=PROJECT_ID
    

    替换以下内容:

    • ROOT_CA_POOL_ID:根 CA 池的 ID
    • REGION:根 CA 池的区域
    • PROJECT_NUMBER:项目编号
    • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池 ID
    • PROJECT_ID:项目 ID

创建负载平衡器并将受管身份分配给后端服务

只能在创建后端服务时分配托管式身份。

本部分中的步骤仅适用于为负载平衡器的后端服务分配托管式身份。这是负载平衡器的后端配置的一部分。

如需设置全球外部应用负载平衡器,请按照设置具有虚拟机实例组后端的全球外部应用负载平衡器中的步骤操作。 在设置负载平衡器的后端服务的阶段,您还需要执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往负载均衡页面。

    进入“负载均衡”

  2. 后端配置部分中,添加相关详细信息以创建后端服务

  3. 展开高级配置部分。

  4. 后端身份验证部分中,选择托管式身份选项。

  5. 如需向后端服务分配托管式身份,请在托管式身份字段中输入您之前创建的托管式工作负载身份

  6. 点击创建

  7. 按照设置负载平衡器中的步骤继续操作,以完成负载平衡器的配置。

gcloud

  1. 如需为后端服务分配托管式身份,请在使用 gcloud beta compute backend-services create 命令时添加 --identity 标志。

    gcloud beta compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTPS \
        --health-checks=HEALTH_CHECK_NAME \
        --identity='//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID' \
        --global
    

    替换以下内容:

    • BACKEND_SERVICE_NAME:后端服务的名称
    • HEALTH_CHECK_NAME:健康检查的名称
    • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池 ID
    • PROJECT_NUMBER:项目编号
    • NAMESPACE_ID:命名空间 ID
    • MANAGED_IDENTITY_ID:受管身份 ID

自动创建的资源

在负载平衡器的后端服务上配置托管式身份后,托管式工作负载身份会自动创建以下资源:

  • 后端身份验证配置:附加到负载平衡器的后端服务
  • Certificate Manager 托管式身份证书:附加到后端身份验证配置
  • Certificate Manager 信任配置:附加到后端身份验证配置

以下部分与验证配置相关,可用于检查自动创建的资源是否已配置。

验证配置

验证您的配置,以检查是否已配置自动创建的资源

自动创建的资源带有 mi 前缀,表示该资源是由托管式工作负载身份创建的。

验证后端身份验证配置和受管身份的创建

如需验证后端身份验证配置和受管身份是否已创建,请使用 gcloud beta compute backend-services describe 命令来描述后端服务。

gcloud beta compute backend-services describe BACKEND_SERVICE_NAME --global

输出类似于以下内容:

affinityCookieTtlSec: 0
connectionDraining:
  drainingTimeoutSec: 0
creationTimestamp: '2025-11-06T02:15:43.680-08:00'
description: ''
enableCDN: false
fingerprint: lTZwas8aylg=
healthChecks:
- https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/healthChecks/HEALTH_CHECK_NAME
id: '719352032'
kind: compute#backendService
loadBalancingScheme: EXTERNAL_MANAGED
name: BACKEND_SERVICE_NAME
port: 80
portName: PORT_NAME
protocol: HTTPS
selfLink: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
sessionAffinity: NONE
timeoutSec: 30
tlsSettings:
  authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/mi-bac-423b651f-d549-4a9f-a4f2-g2bcaa7108bd
  identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

此输出包括以下值:

  • PROJECT_ID:项目 ID
  • HEALTH_CHECK_NAME:健康检查的名称
  • BACKEND_SERVICE_NAME:后端服务的名称
  • PORT_NAME:端口名称
  • REGION:根 CA 池所在的区域
  • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池 ID
  • PROJECT_NUMBER:项目编号
  • NAMESPACE_ID:命名空间 ID
  • MANAGED_IDENTITY_ID:受管身份 ID

系统会自动创建后端身份验证配置,并将其附加到 backendService.tlsSettings.authenticationConfig 字段。以 mi 前缀开头的后端身份验证配置在以下部分中称为 MI_BACKEND_AUTHENTICATION_CONFIG_ID

托管式工作负载身份也会附加到 backendService.tlsSettings.identity 字段。其格式如下:

//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

验证 Certificate Manager 管理的身份证书和 Certificate Manager 信任配置是否已创建

如需验证 Certificate Manager 托管式身份证书和 Certificate Manager 信任配置是否已附加到后端身份验证配置资源,请使用 gcloud network-security backend-authentication-configs describe 命令

gcloud network-security backend-authentication-configs describe MI_BACKEND_AUTHENTICATION_CONFIG_ID \
    --location=global

输出类似于以下内容:

clientCertificate: projects/PROJECT_NUMBER/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d
createTime: '2025-11-06T10:15:56.237734973Z'
etag: xwyxl1VYVoh4QIwf3nhKhAVXgcuOqoN7xdqAiS8Esvs
name: projects//locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd
trustConfig: projects/PROJECT_NUMBER/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742
updateTime: '2025-11-06T10:16:01.964275141Z'

clientCertificatetrustConfig 由托管式工作负载身份自动创建,并附加到后端身份验证配置资源。

mi 前缀开头的 clientCertificate 在下文中称为 MI_CLIENT_CERTIFICATE_ID

mi 前缀开头的 trustConfig 在下文中称为 MI_TRUST_CONFIG_ID

验证 Certificate Manager 证书是否为受管身份证书

如需查看 Certificate Manager 管理的身份证书的详细信息,请使用 gcloud certificate-manager certificates describe 命令

gcloud certificate-manager certificates describe MI_CLIENT_CERTIFICATE_ID

输出类似于以下内容:

createTime: '2025-11-06T10:15:46.187892797Z'
expireTime: '2025-11-07T22:55:47Z'
extendedKeyUsage:
  clientAuth: true
managedIdentity:
  identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
  state: ACTIVE
name: projects/PROJECT_ID/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d
pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----
scope: CLIENT_AUTH
updateTime: '2025-11-06T10:15:49.427339950Z'
usedBy:
- name: //networksecurity.googleapis.com/projects/PROJECT_NUMBER/locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd

此输出包括以下值:

  • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池 ID
  • PROJECT_NUMBER:项目编号
  • NAMESPACE_ID:命名空间 ID
  • MANAGED_IDENTITY_ID:受管身份 ID
  • CERTIFICATE_MATERIAL:采用 PEM 编码格式的 X.509-SVID

Certificate Manager 代管式身份证书具有 managedIdentity 属性,用于将其标识为代管式身份证书。Certificate Manager 托管式身份证书资源以 PEM 编码格式存储 X.509-SVID。

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

验证 SPIFFE ID 是否是 X.509-SVID 中 SAN 的一部分

X.509-SVID 包含在 SAN 字段中编码为 URI 的 SPIFFE ID。 此 SPIFFE ID 对应于工作负载身份池中的托管式身份。

如需以人类可读的格式打印证书,请运行以下命令:

openssl x509 -text -noout \
<<< "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----"

输出类似于以下内容(已缩减):

Certificate:
    Data:
        Version: 3 (0x2)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: O = example.com, CN = Example CA
        Validity
            Not Before: Nov  6 10:15:48 2025 GMT
            Not After : Nov  7 10:15:47 2025 GMT
        Subject:
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
        X509v3 extensions:
            X509v3 Subject Alternative Name: critical
                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:项目编号
  • NAMESPACE_ID:命名空间 ID
  • MANAGED_IDENTITY_ID:受管身份 ID

验证 Certificate Manager 信任配置是否包含 spiffeTrustStore 字段

Certificate Manager 信任配置包含一个名为 spiffeTrustStores 的字段。spiffeTrustStores 字段包含与工作负载身份池的信任网域(在输出中以 WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog 表示)关联的信任包,以及工作负载身份池的内嵌信任配置中由 additionalTrustBundles 字段指定的任何其他信任包。

如需查看 Certificate Manager 信任配置的详细信息,请使用 gcloud certificate-manager trust-configs describe 命令

gcloud certificate-manager certificates describe MI_TRUST_CONFIG_ID

MI_TRUST_CONFIG_ID 替换为由受管身份自动创建的信任配置。

在以下示例输出中,主机 example.com 是信任扩展到的其他信任网域。

createTime: '2025-11-06T10:15:50.048030758Z'
etag: kDoKfm5W6Il2HPvduKZWpuYpyrKrNVq4jqMEICE-6rQ
name: projects/PROJECT_ID/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742
spiffeTrustStores:
  example.com:
    trustAnchors:
    - pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----
  WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog:
    trustAnchors:
    - pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----
updateTime: '2025-11-07T08:25:15.760754841Z'

此输出包括以下值:

  • PROJECT_ID:项目 ID
  • CERTIFICATE_MATERIAL:PEM 格式的 CA 证书,受信任可在信任网域中颁发证书
  • WORKLOAD_IDENTITY_POOL_ID:工作负载身份池 ID
  • PROJECT_NUMBER:项目编号
  • MANAGED_IDENTITY_ID:受管身份 ID

如需详细了解 Certificate Manager 信任配置,请参阅 Certificate Manager 信任配置

后续步骤