为负载平衡器创建托管式工作负载身份

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

如需使用托管式工作负载身份配置后端 mTLS,您必须拥有已配置的工作负载身份池。

如果您没有已配置的工作负载身份池,则需要设置工作负载身份池,然后将托管式工作负载身份附加到负载均衡器的后端服务。

  1. 设置工作负载身份池。

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

本文档中的此示例将引导您完成以下流程:设置新的工作负载身份池,然后将托管式工作负载身份附加到负载均衡器的后端服务。

如果您已有工作负载身份池,可以遵循以下方法:

  1. 您可以为负载平衡器的后端服务资源添加新的证明政策,以使其参与工作负载身份池。

  2. 将托管式工作负载身份附加到负载均衡器的后端服务。

准备工作

  1. 创建或选择 Google Cloud 项目

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

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

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

  4. 启用 IAM、Certificate Authority Service、Compute Engine、Certificate Manager 和 Network Security API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予角色

    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 替换为您的Google Cloud 项目名称。

  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" \
    --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 可以自动预配和管理来自Certificate Authority Service的 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。

创建托管式工作负载身份

借助 gcloud 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 会向 Certificate Authority Service 请求托管式身份的 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)。

cat << EOF > cic.json
{
  "inlineCertificateIssuanceConfig": {
      "caPools": {
        "REGION": "projects/PROJECT_NUMBER/locations/REGION/caPools/ROOT_CA_POOL_ID",
      },
      "lifetime": "CERTIFICATE_LIFETIME",
      "rotationWindowPercentage": ROTATION_WINDOW_PERCENTAGE,
      "keyAlgorithm": "ALGORITHM"
  }
}
EOF

替换以下内容:

  • 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 是可选的。

创建内嵌证书颁发配置文件后,您需要使用 CA 的证书颁发配置来更新工作负载身份池

创建内嵌信任配置(可选)

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

内嵌信任配置文件包含一组信任锚,托管式工作负载身份会使用这些信任锚来验证对等证书。信任配置文件会将 SPIFFE 信任网域映射到 CA 证书。

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

  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 格式的证书。

    cat << EOF > tc.json
    {
      "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-----"
              }
            ]
          }
        }
      }
    }
    EOF
    

    替换以下内容:

    • 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 绑定到工作负载身份池,您需要使用 --inline-certificate-issuance-config-file 标志,通过 CA 的证书颁发配置来更新工作负载身份池。如果您已创建内嵌信任配置,则需要使用 --inline-trust-config-file 标志通过信任配置更新工作负载身份池。

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/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 对应于工作负载身份池中的托管式身份。

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

echo -e \
"-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----" | openssl x509 -text -noout

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

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 信任配置是否包含 spiffeTrustStores 字段

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 trust-configs 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 信任配置

后续步骤