使用代管型 Workload Identity 的後端 mTLS 總覽

無論是否使用代管 Workload Identity,您都可以達成後端 mTLS。 如要進一步瞭解不使用代管 Workload Identity 的後端 mTLS,請參閱「後端驗證的 TLS 和後端 mTLS 總覽」。

本文概述如何使用受管理的工作負載身分,在應用程式負載平衡器與後端之間建立雙向 TLS (mTLS)。代管工作負載身分會自動佈建及管理憑證授權單位服務的 X.509 憑證。

本文內容是以下列文件介紹的概念為基礎:

負載平衡器的代管型 Workload Identity 簡介

如果沒有受管理的工作負載身分,設定後端 mTLS 就需要設定多個資源。將受管理的身分指派給負載平衡器的後端服務時,受管理的工作負載身分會自動建立 mTLS 所需的資源,例如用戶端憑證、信任設定和後端驗證設定。

如果是後端 mTLS,負載平衡器的後端服務資源會做為來源工作負載,向後端 (即目的地工作負載) 驗證自身。

您可以將受管理的身分 (以 SPIFFE ID 表示) 指派給負載平衡器的後端服務。Google Cloud 憑證授權單位服務會自動為 SPIFFE ID 佈建 X.509 憑證。這個 SPIFFE ID 的 X.509 憑證也稱為 SPIFFE 可驗證身分文件 (SVID)。負載平衡器的後端服務及其後端會使用 SVID,透過 mTLS 驗證機制相互驗證。

下圖顯示負載平衡器 (來源工作負載) 和後端 (目的地工作負載) 如何使用代管 Workload Identity 相互驗證。

使用受管理的工作負載身分進行後端 mTLS。
使用受管理的工作負載身分識別進行後端 mTLS (按一下即可放大)。

以下是 X.509-SVID 的範例,可做為 SPIFFE ID 的包裝函式。SPIFFE ID (以 URI 表示) 會編碼在 X.509 憑證的主體別名 (SAN) 中。

Issuer:
    C=US
    O=Example Inc.
    CN=Example CA

Validity:
    Not Before: Jun 14 00:00:00 2025 GMT
    Not After : Jun 16 00:00:00 2025 GMT

Subject (Distinguished Name):
    C=US
    O=Example Inc.
    OU=Production
    CN=api.example.com

Subject Public Key Info:
    Public Key Algorithm: RSA Encryption
    RSA Public-Key: (2048 bit)

X.509v3 Extensions:
    Subject Alternative Name (SAN):
        DNS: api.example.com
        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:您Google Cloud 專案的專案編號
  • NAMESPACE_ID:命名空間 ID
  • MANAGED_IDENTITY_ID:代管身分 ID

使用受管理的工作負載身分的好處

使用受管理的工作負載身分進行後端 mTLS 的好處包括:

  • 提升安全性:加入 workload identity pool 後,負載平衡器及其後端會成為信任網域的一部分。 Google Cloud 與後端 mTLS 搭配使用時,負載平衡器和後端工作負載會相互驗證。這項雙向驗證機制可防止未經授權的工作負載存取您的服務,並加密傳輸中的資料。

  • 自動管理憑證:工作負載驗證成功後,系統會自動為參與工作負載身分集區信任網域的工作負載佈建及輪替 X.509 憑證。Google Cloud 自動管理 X.509 憑證可免除複雜且容易出錯的手動憑證管理程序。

  • 可互通的身分:工作負載身分集區使用 SPIFFE 架構,這是管理分散式系統身分的標準,可在新式微服務架構中啟用驗證和授權。

  • 集中式控管:工作負載身分集區提供集中控管點。管理員可以定義信任網域,並建立認證政策,控管哪些工作負載可取得代管身分的 X.509 憑證。

使用受管理的工作負載身分進行後端 mTLS 的架構

下列元件會搭配運作,使用受管理的工作負載身分達成後端 mTLS:

  • 負載平衡器的後端服務 (Compute Engine API)
  • 身分與存取權管理信任網域 (Identity and Access Management API)
  • 憑證授權單位集區 (憑證授權單位服務 API)
  • 後端驗證設定 (Network Security API)
  • Certificate Manager 信任設定 (Certificate Manager API)
  • Certificate Manager 管理的身分識別憑證 (Certificate Manager API)

下圖顯示負載平衡器後端服務的受管理身分,可讓負載平衡器向後端驗證自身。在圖表中,步驟 1 至 3 代表明確建立的資源,步驟 4 至 5 則代表自動建立的資源。

  1. 設定憑證授權單位服務 CA 集區,以便向受管理的工作負載身分核發憑證。
  2. 建立 workload identity pool,設定信任網域。 這個集區需要命名空間、受管理的身分、驗證政策、內嵌憑證核發設定資源,以及內嵌信任設定資源。
  3. 使用代管身分設定負載平衡器的後端服務。
  4. 代管 Workload Identity 會自動建立 Certificate Manager 代管的身分憑證和 Certificate Manager 信任設定。

    Certificate Manager 管理的身分憑證是根據工作負載身分集區中的憑證核發設定建立。Certificate Manager 信任設定會與工作負載身分集區的內嵌信任設定同步。

  5. 代管型 Workload Identity 會自動建立後端驗證設定。

    Certificate Manager 信任設定會附加至後端驗證設定。Certificate Manager 管理的身分憑證 (X.509-SVID) 也會附加至後端驗證設定,然後用於向後端進行驗證。

如要進一步瞭解如何使用受管理的身分設定後端 mTLS,請參閱「使用受管理的工作負載身分設定後端 mTLS」。

使用代管型 Workload Identity 的後端 mTLS。
使用受管理工作負載身分識別的後端 mTLS 架構 (按一下即可放大)。

使用受管理身分在後端 mTLS 期間建立的資源

如上方的架構圖所示,將受管理的身分指派給後端服務時,您不需要設定後端驗證設定、Certificate Manager 信任設定和 Certificate Manager 憑證。這些資源是由受管理的工作負載身分自動建立。

本節將深入探討受管理的身分設定程序,重點在於明確建立的資源,以及自動建立的資源。

明確建立的資源

使用受管理的工作負載身分設定後端 mTLS 時,需要明確建立下列資源。

憑證授權單位集區

如要為負載平衡器設定受管理的工作負載身分,請先設定憑證授權單位,並視需要設定一或多個從屬 CA。這種設定稱為「CA 階層」

您可以使用 CA 服務集區設定這個階層。

如要將工作負載身分集區繫結至 CA 集區,請更新工作負載身分集區,並加入內嵌憑證核發設定

代管型 Workload Identity

您需要在 workload identity pool 命名空間中建立受管理的工作負載身分。代管身分是完整指定的 SPIFFE ID,用於負載平衡器工作負載提供的 SVID。

認證政策

認證政策包含 IAM 規則,可驗證後端服務是否符合資格,能為指派給後端服務的受管理身分接收 X.509 憑證。 Google Cloud

如果驗證通過,IAM 會向憑證授權單位服務要求受管理身分的 X.509 憑證。X.509 憑證是在繫結至受管理身分的 CA 集區中建立。CA 服務會透過身分反映佈建憑證,其中設定的 SPIFFE ID 會反映到 X.509 憑證上。

內嵌憑證核發設定

設定 workload identity pool 時,您會設定內嵌憑證核發設定。這項設定會指定要使用 Certificate Authority Service 執行個體的哪個 CA 集區,為 workload identity pool 中的身分產生 X.509 憑證。設定檔也會指定憑證效期、輪替視窗百分比和金鑰演算法。

通過認證政策強制執行後,CA 集區會將 X.509 憑證核發給代管工作負載身分。

Workload Identity Pool 的內嵌信任設定

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

內嵌信任設定包含一組信任錨點,受管理的工作負載身分會使用這些錨點驗證對等互連憑證。Certificate Manager 信任設定會封裝 SPIFFE 信任儲存庫,並與 workload identity pool 的內嵌信任設定保持同步。

由於 workload identity pool 會繫結至 CA pool,因此 workload identity pool 會自動信任該 CA pool 的根憑證。您不需要將集區的 CA 根憑證新增至內嵌信任設定,因為該信任已內建。

後端服務 (Compute Engine API)

如要將受管理的身分指派給負載平衡器,您必須設定負載平衡器的後端服務,讓其 tlsSettings 屬性指向新的 identity 屬性 (backendService.tlsSettings.identity)。

請注意,在負載平衡器的後端服務上使用 identity 欄位時,須遵守下列限制:

  • 如果您設定 identity 屬性,就無法在 tlsSettings 屬性中手動設定下列欄位:

    • tlsSettings.sni
    • tlsSettings.subjectAltNames
    • tlsSettings.authenticationConfig
  • identity 欄位只能在建立後端服務時指派。

  • identity 欄位無法變更。指派給負載平衡器後端服務後,就無法更新或刪除。

自動建立的資源

在負載平衡器的後端服務上設定 identity 屬性 (backendService.tlsSettings.identity) 後,受管理的工作負載身分識別會自動建立 Certificate Manager API 和 Network Security API 中的下列資源。

系統會在與後端服務相同的專案中建立自動建立的資源,並使用該專案中的標準配額。

Certificate Manager 信任設定 (Certificate Manager API)

系統會自動建立 Certificate Manager 信任設定,無法直接編輯或刪除。

Certificate Manager 信任設定包含名為 spiffeTrustStores 的欄位。spiffeTrustStores 欄位包含與 workload identity pool 信任網域相關聯的信任組合,以及 workload identity pool 內嵌信任設定中 additionalTrustBundles 欄位指定的任何其他信任組合

如要驗證 SPIFFE 憑證,使用受管理的工作負載身分時,系統會自動啟用 Certificate Manager 信任設定中的 spiffeTrustStores 欄位。啟用 spiffeTrustStores 欄位後,trustStores 欄位會保持空白。

spiffeTrustStores 欄位是對應資料結構,鍵/值組合如下:

  • 這個金鑰可以是與工作負載身分池相關的信任網域 (格式結尾為 .workload.id.goog),也可以是額外的信任網域。
  • valueTrustStore 物件。這個物件包含一組用於驗證特定信任網域 SPIFFE 憑證的信任根憑證 (稱為信任組合)。

基本上,這張對應表可讓您設定負載平衡器,以信任來自多個不同安全網域的信任儲存區。後端出示憑證時,負載平衡器會擷取 SPIFFE ID、識別信任網域,並使用對應表查閱驗證該憑證所需的正確信任儲存庫。

Certificate Manager 管理的身分識別憑證 (Certificate Manager API)

憑證管理員管理的 ID 憑證是由代管型 Workload Identity 自動建立。Certificate Manager 管理的身分識別憑證為唯讀,無法使用 Certificate Manager API 直接編輯或刪除。Certificate Manager 管理的身分憑證是以內嵌憑證核發設定為依據,而該設定是在 workload identity pool 中定義。

Certificate Manager 代管的身分憑證具有 managedIdentity 屬性,可將其識別為代管的身分憑證。Certificate Manager 管理的身分憑證資源會以 PEM 編碼格式儲存 X.509-SVID。這個 X.509-SVID 包含 SPIFFE ID,並以 URI 形式編碼至 SAN 欄位。 這個 SPIFFE ID 對應於 workload identity pool 中的受管理身分。

Certificate Manager 代管的身分識別憑證範圍為 CLIENT_AUTH,表示這個憑證在後端 mTLS 中做為用戶端憑證。

後端驗證設定 (Network Security API)

後端驗證設定是由受管理的工作負載身分自動建立。後端驗證設定為唯讀,無法直接使用 Network Security API 編輯或刪除。

Certificate Manager 信任設定會附加至後端驗證設定。

憑證管理服務管理的身分憑證也會附加至後端驗證設定,並在負載平衡器與目的地工作負載之間的後端 mTLS 要求中,做為 X.509-SVID 使用。

限制

  • 您只能為全域外部應用程式負載平衡器設定後端 mTLS 和代管工作負載身分。傳統版應用程式負載平衡器不支援後端 mTLS。

  • 後端 mTLS 不適用於全域網際網路 NEG 後端。

  • 如果將受管理的身分指派給後端服務 (backendService.tlsSettings.identity),就無法手動設定後端服務 tlsSettings 屬性的下列欄位:

    • backendService.tlsSettings.sni
    • backendService.tlsSettings.subjectAltNames
    • backendService.tlsSettings.authenticationConfig
  • 受管理的身分只能在建立後端服務時指派。

  • 代管身分無法變更。將受管理的身分指派給負載平衡器的後端服務後,就無法更新或刪除。

後續步驟