透過 mTLS 向其他工作負載驗證工作負載

本文說明如何設定 Compute Engine 受管理的工作負載身分自動佈建和生命週期管理。您可以設定 CA 集區,透過憑證授權單位服務 (CA) 核發憑證。這項服務可用性高且可擴充 Google Cloud ,能簡化及自動化 CA 服務的部署、管理和安全防護作業。系統會從設定的 CA 集區,為每個 VM 佈建 X.509 憑證。之後可使用這些憑證建立 mTLS 連線。

事前準備

  • 請參閱受管理的工作負載身分總覽說明文件。
  • 啟用 Compute Engine API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable compute.googleapis.com

必要的角色

如要取得建立 VM 的權限,以便使用受管理的工作負載身分識別憑證向其他工作負載進行驗證,請要求管理員在專案中授予下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

總覽

有了 Compute Engine 的受管理工作負載身分,您就能在任意兩個 Compute Engine VM 之間,實作經過相互驗證及加密的通訊。在設定的 VM 上執行的工作負載應用程式,可以使用 X.509 憑證進行 VM 專屬的mTLS訪客代理程式會自動輪替這些 mTLS 憑證,並更新 VM 上的憑證。

使用受管理的工作負載身分,即可集中管理工作負載的身分。系統可根據執行個體 ID、執行個體名稱或附加的服務帳戶等重要屬性,授權 Compute Engine VM 接收工作負載身分。如要驗證工作負載,運算管理員或開發人員必須為工作負載建立 VM 執行個體,並提供相符的執行個體名稱、執行個體 ID、服務帳戶名稱或服務帳戶 ID。

受管理的工作負載身分符合開放原始碼的適用於所有人的安全生產身分架構 (SPIFFE) 標準。工作負載的 SPIFFE ID 格式如下: spiffe://<TRUST_DOMAIN/ns/NAMESPACE/sa/WORKLOAD_ID。 Google Cloud TRUST_DOMAIN 對應於 Identity and Access Management (IAM) 工作負載身分集區。

受管理的工作負載身分是在工作負載身分集區中定義,這個集區是頂層容器,用於保存具有共同信任邊界的工作負載身分。在 workload identity pool 中,身分會整理成稱為「命名空間」的管理邊界。如要讓工作負載取得受管理的身分,您必須定義驗證政策來授權。工作負載驗證政策可確保只有信任的工作負載能聲明受管理的身分。

如要為應用程式使用受管理的工作負載身分,請執行下列工作:

  1. 安全管理員

  2. 運算管理員

在 Identity and Access Management 中設定受管理的工作負載身分

  • 請按照「設定受管理的工作負載身分驗證 」一文中的操作說明進行設定。

    這些操作說明詳細介紹如何完成下列事項:

    • 建立 workload identity pool。
    • 在 workload identity pool 中建立命名空間。您可以使用命名空間為受管理的工作負載身分建立管理界線,例如為貴機構擁有的每個應用程式建立命名空間。
    • 在 workload identity pool 的命名空間中,建立代管型 workload identity。舉例來說,您可以為應用程式建立命名空間,並在該命名空間中為支援該應用程式的微服務建立受管理的身分。
    • (選用) 建立服務帳戶,根據服務帳戶 ID 建立認證規則。
    • 建立工作負載驗證政策,允許工作負載取得受管理工作負載身分的憑證。系統可根據執行個體 ID、執行個體名稱或附加的服務帳戶等重要屬性,授權 Compute Engine VM 接收代管工作負載身分。
    • 設定憑證授權單位服務,為受管理的工作負載身分核發憑證:
      • 設定根 CA 集區
      • 設定下層 CA
      • 授權代管 workload identity pool 向 CA 集區要求憑證

為個別運算執行個體啟用受管理的工作負載身分

您可以在建立運算執行個體時啟用代管 Workload Identity,也可以更新現有執行個體的設定。

建立啟用受管理工作負載身分的執行個體

建立運算執行個體時,如要為執行個體啟用受管理的工作負載身分功能,請按照下列步驟操作:

  • 如果工作負載身分執行個體的認證是以服務帳戶為依據,請指定該服務帳戶
  • 加上 --identity--identity-certificate 旗標

gcloud

使用 gcloud alpha compute instances create 指令建立新的執行個體。

  1. 如果您使用服務帳戶進行驗證,請在建立執行個體時加入服務帳戶資訊。

    您可以在指令中新增其他行,設定執行個體 (例如機型和映像檔),而非使用預設值。詳情請參閱「建立及啟動 VM 執行個體」。

    gcloud alpha compute instances create INSTANCE_NAME \
       --zone=INSTANCE_ZONE \
       --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --identity=TRUST_DOMAIN/ns/NAMESPACE/sa/WORKLOAD_IDENTIFIER \
    
       --identity-certificate \
    ...
    

    更改下列內容:

    • INSTANCE_NAME:執行個體的專屬名稱。如要瞭解有效的執行個體名稱,請參閱「命名資源」。
    • INSTANCE_ZONE:要建立執行個體的可用區。
    • SERVICE_ACCOUNT_NAME:允許接收代管工作負載身分識別的服務帳戶名稱。
    • PROJECT_ID:服務帳戶建立所在專案的 ID。
    • TRUST_DOMAIN:信任網域的 ID,格式如下:
        $POOL_ID.global.$PROJECT_NUMBER.workload.id.goog
        

      信任網域值會使用下列預留位置:

      • POOL_ID:Workload Identity Pool 的名稱
      • PROJECT_NUMBER:建立 Workload Identity Pool 的專案專案編號
    • NAMESPACE:包含授權工作負載聲明代管工作負載身分的工作負載驗證政策的命名空間名稱
    • WORKLOAD_IDENTIFIER:在 Workload Identity Pool 的命名空間中建立的受管理 Workload Identity 名稱

在現有執行個體上啟用受管理的工作負載身分

如要為現有運算執行個體啟用代管 Workload Identity,請更新執行個體以設定下列項目:

  • 如果工作負載身分執行個體的驗證是以服務帳戶為依據,且執行個體尚未附加服務帳戶,請建立服務帳戶並附加至執行個體。
  • 使用 --identity-certificate 旗標啟用這項功能,並使用 --identity 旗標指定要使用的受管理工作負載身分。
  • 重新啟動 VM。

gcloud

使用 gcloud alpha compute instances update 指令更新執行個體的設定。

  1. 如果執行個體尚未附加服務帳戶,請將服務帳戶附加至執行個體

  2. 更新現有執行個體的設定,啟用受管理的工作負載身分。

    gcloud alpha compute instances update INSTANCE_NAME \
       --zone=ZONE \
       --identity-certificate \
       --identity=TRUST_DOMAIN/ns/NAMESPACE/sa/WORKLOAD_IDENTIFIER
    

    更改下列內容:

    • INSTANCE_NAME:執行個體名稱
    • ZONE:執行個體所在的可用區
    • TRUST_DOMAIN:信任網域的 ID,格式如下: none $POOL_ID.global.$PROJECT_NUMBER.workload.id.goog

    信任網域值會使用下列預留位置: * POOL_ID:工作負載身分集區的名稱 * PROJECT_NUMBER:專案的專案編號,工作負載身分集區是在該專案中建立 + NAMESPACE:包含工作負載證明政策的命名空間名稱,該政策授權工作負載聲明受管理的工作負載身分 + WORKLOAD_IDENTIFIER:在工作負載身分集區命名空間中建立的受管理工作負載身分名稱

  3. 停止 VM。

    gcloud alpha compute instances stop INSTANCE_NAME \
       --zone=ZONE
    

    更改下列內容:

    • INSTANCE_NAME:執行個體名稱
    • ZONE:執行個體所在的可用區
  4. 啟動 VM。

    gcloud alpha compute instances start INSTANCE_NAME \
       --zone=ZONE
    

    更改下列內容:

    • INSTANCE_NAME:執行個體名稱
    • ZONE:執行個體所在的可用區

在 Linux VM 上存取工作負載憑證

建立並啟動使用代管工作負載身分識別的運算執行個體後, Google Cloud 基礎架構 (包括 Guest Agent) 會自動為執行個體佈建及管理憑證輪換作業。

工作負載憑證 (包括私密金鑰和信任組合) 會放置在 VM 檔案系統的特定目錄中:/var/run/secrets/workload-spiffe-credentials。應用程式可以直接從檔案系統讀取憑證、私密金鑰和信任組合,建立 mTLS 連線。

客體 OS 上的 Compute Engine 客體代理程式會執行工作負載重新整理作業,並視需要建立 /var/run/secrets/workload-spiffe-credentials 目錄。目錄權限設為 0755 (rwxr-xr-x)

這個目錄包含以 0644 (rw-r--r--) 權限建立的下列檔案:

  • private_key.pem:PEM 格式的私密金鑰
  • certificates.pem:PEM 格式的 X.509 憑證組合,可做為用戶端憑證鏈提供給其他 VM,或做為伺服器憑證鏈使用。
  • :PEM 格式的 X.509 憑證組合,用於驗證對等互連裝置的憑證時,做為信任錨點。ca_certificates.pem

    spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog
    
  • config_status:包含錯誤訊息的記錄檔。

重新整理憑證和信任套件

Compute Engine 控制層會定期自動輪替受管理的工作負載身分憑證和信任錨點。

如果應用程式使用檔案系統存取工作負載憑證和信任組合,Compute Engine 客體代理程式會自動重新整理憑證和信任組合,例如在 mTLS 憑證輪替時。

更新憑證核發和信任設定

您可以修改使用代管 Workload Identity 的 VM 的憑證核發設定和信任設定。

更新個別 Compute Engine VM

如要更新憑證核發設定和信任設定,請更新 workload identity pool。使用 gcloud alpha iam workload-identity-pools update 指令,如下列範例所示:

gcloud alpha 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 設定。
  • PROJECT_ID:您的 Google Cloud 專案名稱。

疑難排解

如要瞭解如何診斷及解決擷取工作負載憑證的常見錯誤,請參閱「排解工作負載對工作負載驗證問題」一文。

如要排解集區或驗證政策設定錯誤的問題,請參閱workload identity pool 的稽核記錄

後續步驟