使用受管理的工作負載身分設定後端 mTLS

本文說明如何在負載平衡器的後端服務上設定代管工作負載身分。指派受管理的身分後,負載平衡器及其後端即可使用後端 mTLS 相互驗證。

如要使用受管理的工作負載身分設定後端 mTLS,請完成下列步驟:

  1. 設定憑證授權單位服務憑證授權單位 (CA) 集區,為代管工作負載身分核發 X.509 憑證。
  2. 建立工作負載身分集區,並包含命名空間、受管理的身分、驗證政策、內嵌憑證核發設定資源,以及內嵌信任設定資源,即可設定信任網域。1
  3. 使用內嵌憑證核發設定,將 CA 繫結至 workload identity pool。
  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. 瞭解如何使用憑證授權單位服務核發憑證。

  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 服務,為受管理的工作負載身分核發憑證

您可以使用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 憑證。工作負載身分是在 workload identity pool 中定義,並整理到稱為「命名空間」的管理邊界。

建立 workload identity pool

您必須在 TRUST_DOMAIN 模式下建立集區,才能建立受管理的工作負載身分。如要為受管理的工作負載身分建立 workload identity pool,請使用 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 個字元之間,只能包含小寫英數字元和連字號,且開頭和結尾必須為英數字元。建立 Workload Identity 集區後,就無法變更其 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:Workload Identity Pool ID

建立命名空間

您可以使用 gcloud iam workload-identity-pools namespaces create 指令在 workload identity pool 中建立命名空間。

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:您先前建立的 Workload Identity Pool ID。

建立代管型 Workload Identity

您可以使用 gloud iam workload-identity-pools managed-identities create 指令,在 workload identity pool 命名空間中建立受管理的工作負載身分。

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 個字元之間,只能使用小寫英數字元和連字號,且開頭和結尾須為英數字元。代管 Workload Identity 建立後,就無法變更其 ID。
  • NAMESPACE_ID:您先前建立的命名空間 ID。
  • WORKLOAD_IDENTITY_POOL_ID:您先前建立的 Workload Identity Pool ID。

受管理的工作負載身分 ID 是 SPIFFE ID,格式如下:

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 個字元之間,只能使用小寫英數字元和破折號,且開頭和結尾須為英數字元。代管 Workload Identity 建立後,就無法變更其 ID。
  • NAMESPACE_ID:您先前建立的命名空間 ID。
  • WORKLOAD_IDENTITY_POOL_ID:您先前建立的 Workload Identity Pool ID。
  • PROJECT_NUMBER: Google Cloud 專案的專案編號。

建立內嵌憑證核發設定

如要將 CA 繫結至 workload identity pool,該 pool 必須具有內嵌憑證核發設定

如要設定內嵌憑證核發設定,請建立 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 為選用項目。

建立內嵌信任設定

在這個範例設定中,負載平衡器和後端都屬於同一個信任網域,共用相同的根憑證。因此,內嵌信任設定的設定為選用項目。信任的共同根層級可用於建構信任鏈,並驗證信任網域內工作負載的身分。

代管型 Workload Identity 資源階層。
受管理的工作負載身分識別資源階層 (按一下即可放大)。

根據預設,同一信任網域內的工作負載可以使用受管理的工作負載身分相互驗證。如要讓不同信任網域中的工作負載相互驗證,您必須在工作負載身分集區中明確宣告信任關係。如要這麼做,請建立內嵌信任設定,以辨識及接受來自其他信任網域的憑證。

如要建立內嵌信任設定,請按照下列步驟操作:

  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 信任網域。

      工作負載身分集區信任網域的信任網域名稱格式如下:

      WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog
      

      在格式中,請替換下列項目:

      • WORKLOAD_IDENTITY_POOL_ID:Workload Identity Pool 的 ID
      • PROJECT_NUMBER:Workload Identity Pool 所在專案的專案編號
    • CERTIFICATE_MATERIAL:PEM 格式的 CA 憑證,信任網域中核發憑證時會信任該憑證。您可以使用下列指令,將 PEM 格式的憑證檔案編碼為單行字串:

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

將 CA 繫結至 workload identity pool

建立 CA 層級並為 CA 建立憑證核發設定後,即可將 CA 繫結至 workload identity pool。如要將 CA 繫結至工作負載身分集區,請使用 CA 的憑證核發設定更新工作負載身分集區。然後確認集區已更新。

更新工作負載身分集區

如要將 CA 繫結至 workload identity pool,請使用 CA 的憑證核發設定更新 workload identity pool。接著,您可以確認集區是否已更新。

如要更新集區,請執行下列指令:

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:Workload Identity Pool ID。

  • CIC_JSON_FILE_PATH:您先前建立的內嵌憑證核發設定,其 JSON 格式設定檔 (cic.json) 的路徑。

  • TC_JSON_FILE_PATH:您先前建立的內嵌信任設定,其 JSON 格式設定檔 (tc.json) 的路徑。如果工作負載會跨不同信任網域進行驗證,您就必須指定這個檔案。否則可以省略 --inline-trust-config

確認工作負載身分集區已更新

如要確認 workload identity pool 已更新,且一併更新了憑證核發設定和信任設定,請執行下列指令:

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

更改下列內容:

  • WORKLOAD_IDENTITY_POOL_ID:Workload Identity Pool 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」),包括另一個 (甚至是同一個) Workload Identity Pool 信任網域。
  • CERTIFICATE_MATERIAL:PEM 格式的 CA 憑證,信任網域中核發憑證時會信任該憑證
  • WORKLOAD_IDENTITY_POOL_ID:Workload Identity Pool ID

如果輸出內容中沒有 inlineCertificateIssuanceConfiginlineTrustConfig,請確認您已正確設定 gcloud CLI,以便使用正確的專案進行帳單和配額作業。您可能需要更新至新版 gcloud CLI。

授權代管型 Workload Identity 從 CA 集區要求憑證

將 CA 繫結至工作負載身分集區後,您必須授權受管理的工作負載身分,才能向 CA 集區要求憑證。

  1. CA 服務工作負載憑證要求者角色 (roles/privateca.workloadCertificateRequester) 授予信任網域。這個角色會授權信任網域,要求 CA 服務憑證鏈結中的憑證。

    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:Workload Identity Pool ID

    • PROJECT_ID:專案 ID

  2. CA 服務集區讀取者角色 (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:Workload Identity Pool ID
    • PROJECT_ID:專案 ID

建立負載平衡器,並將受管理的身分指派給後端服務

只有在建立後端服務時,才能指派受管理的身分。

本節中的步驟僅適用於將受管理的身分指派給負載平衡器的後端服務。這是負載平衡器的後端設定

如要設定全域外部應用程式負載平衡器,請按照「設定具備 VM 執行個體群組後端的全域外部應用程式負載平衡器」一文中的步驟操作。在設定負載平衡器的後端服務時,您還需要執行下列操作:

控制台

  1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。

    前往「Load balancing」(負載平衡)

  2. 在「後端設定」部分,新增相關詳細資料來建立後端服務

  3. 展開「進階設定」部分。

  4. 在「Backend authentication」(後端驗證) 部分中,選取「Managed Identity」(受管理的身分) 選項。

  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:Workload Identity Pool 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:Workload Identity Pool ID
  • PROJECT_NUMBER:專案編號
  • NAMESPACE_ID:命名空間 ID
  • MANAGED_IDENTITY_ID:代管身分 ID

系統會自動建立後端驗證設定,並附加至 backendService.tlsSettings.authenticationConfig 欄位。以 mi 前置字元開頭的後端驗證設定,在下節中稱為 MI_BACKEND_AUTHENTICATION_CONFIG_ID

代管型 Workload Identity 也會附加至 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 管理的憑證詳細資料,請使用 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:Workload Identity Pool 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 包含 SPIFFE ID,並以 URI 形式編碼在 SAN 欄位中。 這個 SPIFFE ID 對應於 workload identity pool 中的受管理身分。

如要以方便閱讀的格式列印憑證,請執行下列指令:

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:Workload Identity Pool 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:Workload Identity Pool ID
  • PROJECT_NUMBER:專案編號
  • MANAGED_IDENTITY_ID:代管身分 ID

如要進一步瞭解 Certificate Manager 信任設定,請參閱「Certificate Manager 信任設定」。

後續步驟