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

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

如要使用受管理的工作負載身分設定後端 mTLS,您必須已設定工作負載身分集區。

如果沒有已設定的工作負載身分集區,請設定工作負載身分集區,然後將受管理的工作負載身分附加至負載平衡器的後端服務。

  1. 設定 workload identity pool。

    1. 設定憑證授權單位服務憑證授權單位 (CA) 集區,為代管工作負載身分核發 X.509 憑證。
    2. 建立工作負載身分集區,並包含命名空間、受管理的身分、驗證政策、內嵌憑證核發設定資源,以及內嵌信任設定資源,即可設定信任網域。
    3. 授權受管理的工作負載身分,向 CA 集區要求憑證。
  2. 將受管理的工作負載身分連結至負載平衡器的後端服務。

本文中的範例會逐步說明如何設定新的工作負載身分集區,然後將受管理的工作負載身分附加至負載平衡器的後端服務。

如果您已有現有的工作負載身分池,可以採用下列方法:

  1. 您可以為負載平衡器的後端服務資源新增認證政策,加入工作負載身分集區。

  2. 將受管理的工作負載身分連結至負載平衡器的後端服務。

事前準備

  1. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
    • 建立專案:如要建立專案,您需要「專案建立者」角色 (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. 瞭解如何使用憑證授權單位服務核發憑證。

  4. 啟用 IAM、憑證授權單位服務、Compute Engine、Certificate Manager 和網路安全 API:

    啟用 API 時所需的角色

    如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色

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

您可以使用 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」。

設定 workload identity pool

使用代管工作負載身分時,「 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。

建立受管理的工作負載身分

您可以使用 gcloud 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)。

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 的憑證核發設定更新 workload identity pool

建立內嵌信任設定 (選用)

信任網域中的所有工作負載都會收到憑證和信任錨點,預設可在信任網域中進行驗證。如要讓不同信任網域中的工作負載相互驗證,您必須在工作負載身分集區中明確宣告信任關係。方法是建立內嵌信任設定, 以辨識及接受來自其他信任網域的憑證。

內嵌信任設定檔包含一組信任錨點,受管理的工作負載身分會使用這些錨點驗證對等互連憑證。信任設定檔會將 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 信任網域。

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

      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'
      

    建立內嵌信任設定後,您需要更新工作負載身分集區,加入信任設定。

更新 workload identity pool

如要將 CA 繫結至 workload identity pool,您需要使用 --inline-certificate-issuance-config-file 標記,以 CA 的憑證核發設定更新 workload identity pool。如果您已建立內嵌信任設定,請使用 --inline-trust-config-file 標記,透過信任設定更新 Workload Identity 集區。

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/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。

授權受管理的工作負載身分,從 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. 在「後端驗證」部分,選取「受管理的身分」選項。

  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 憑證是代管身分憑證

如要查看 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 管理的 ID 憑證資源會以 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 中的受管理身分。

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

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

確認 Certificate Manager 信任設定包含 spiffeTrustStores 欄位

Certificate Manager 信任設定包含名為 spiffeTrustStores 的欄位。spiffeTrustStores 欄位包含與 workload identity pool 信任網域相關聯的信任組合 (以輸出內容中的 WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog 表示),以及 workload identity pool 內嵌信任設定中 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:Workload Identity Pool ID
  • PROJECT_NUMBER:專案編號
  • MANAGED_IDENTITY_ID:代管身分 ID

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

後續步驟