設定 GKE 的受管理工作負載身分驗證

本文說明如何在 GKE 叢集集區管理的叢集中,為 Google Kubernetes Engine (GKE) 設定代管工作負載身分。本文也說明如何部署工作負載,以及驗證工作負載的身分和憑證。

如要設定及使用 GKE 的代管工作負載身分,請完成下列步驟:

  1. 選擇憑證授權單位 (CA) 選項

  2. 設定憑證授權單位

  3. 使用受管理的工作負載身分部署工作負載

  4. 選用:啟用工作負載身分集區之間的信任聯盟

Google 管理的 workload identity pool

將叢集新增至 GKE fleet 時,GKE 會自動建立 Google 管理的工作負載身分集區,做為信任根,也就是工作負載的 SPIFFE 信任網域。信任網域內的所有工作負載都會收到憑證和信任錨點,預設可在信任網域內進行驗證。如果您有多個信任網域,可以啟用信任同盟,讓這些網域之間能夠通訊。

Google 管理的 workload identity pool 具有下列特性:

  • 身分管理:Google 會全面管理集區。您無法建立任何子資源,例如命名空間、身分或身分識別提供者。

  • 工作負載支援:您只能將集區用於 GKE 工作負載。您無法將其他類型的工作負載 (例如 Compute Engine VM) 新增至集區。

  • 機群整合:集區中的所有叢集都適用標準 Kubernetes 命名空間相同性模型。這表示集區中的所有叢集都具有同等權限,且集區中任何叢集上的工作負載都可以使用該集區內的任何身分。

自行管理的 workload identity pool

在混合信任環境 (例如多租戶車隊) 中,您可以為部分工作負載和叢集設定個別的自行管理 workload identity pool。自行管理的 workload identity pool 具有下列特徵:

  • 身分管理:定義自己的 workload identity pool 後,您就能完全掌控集區中的身分管理作業。您可以在集區底下定義自己的身分階層,例如命名空間和身分。您可以定義驗證政策,指定哪些工作負載可以在集區或命名空間下驗證身分。

  • 工作負載支援:任何工作負載 (例如 VM、容器和無伺服器工作負載) 都可以放在集區中。

  • 機群整合:對於 GKE 機群管理的工作負載,機群提供整合式介面來管理身分。您可以將工作負載身分集區設定為機群範圍的租戶集區。機群會自動建立與機群命名空間對應的工作負載身分集區命名空間,並將身分指派給工作負載。

如要使用自行管理的工作負載身分集區,您必須設定機群團隊管理功能,例如團隊範圍和機群命名空間,並將自行管理的集區設為範圍租戶集區。如需建立及設定自行管理的集區的操作說明,請參閱「從混合信任機群工作負載向 Google Cloud API 進行驗證」。

多專案設定

Google Cloud 本文件中使用的資源 (例如 GKE 叢集、根 CA 和下層 CA) 可以位於不同專案。參照這些資源時,請使用 --project 旗標為每個資源指定正確的專案。

事前準備

  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. 瞭解受管理的工作負載身分

  3. 請確認叢集執行的是 1.33.0-gke.2248000 以上版本。

  4. 將叢集新增至 GKE 機群。如果叢集是 Autopilot 叢集,請省略 --enable-workload-identity 標記。Fleet 會自動建立 Google 管理的工作負載身分集區,做為信任網域

    執行下列指令,啟用 GKE 叢集機群:

    gcloud container clusters update CLUSTER_NAME \
    --workload-pool=PROJECT_ID.svc.id.goog \
    --enable-fleet \
    --fleet-project=PROJECT_ID
    

    替換下列值:

    • CLUSTER_NAME:要向 GKE 機群註冊的 GKE 叢集名稱
    • PROJECT_ID:GKE 機群 主機專案 ID
  5. 啟用 IAM 和憑證授權單位服務 API。

    啟用 API 時所需的角色

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

    啟用 API

  6. 將 Google Cloud CLI 設為使用帳單和配額專案。

    gcloud config set billing/quota_project PROJECT_ID
    

    PROJECT_ID 替換為機群專案的 ID。

必要的角色

如要取得建立受管理 Workload Identity 和佈建受管理 Workload Identity 憑證所需的權限,請要求系統管理員在專案中授予您下列 IAM 角色:

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

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

選擇 CA 選項

如要簽署工作負載憑證,請選擇最符合您用途的憑證授權單位 (CA) 選項:

  • Google 代管的預設 CA:使用這個選項可獲得全代管的免費解決方案。預設 CA 會為所有Google Cloud 使用者提供共用的信任根。

  • 自訂 CA:選取這個選項,透過憑證授權單位服務設定自己的公用金鑰基礎架構 (PKI)。如果您需要自訂信任根,或必須將簽署金鑰儲存在硬體安全模組 (HSM) 中,以符合法規遵循規定,則適合使用這個選項。憑證授權單位服務的費用與代管工作負載身分分開計算。 詳情請參閱「CA 服務定價」。

設定 CA

預設 CA

如要將預設 CA 繫結至 Workload Identity 集區,請使用 use-default-shared-ca 旗標更新 Workload Identity 集區。

  gcloud iam workload-identity-pools update TRUST_DOMAIN_NAME \
      --location="global" \
      --use-default-shared-ca \
      --project=PROJECT_ID

更改下列內容:

  • TRUST_DOMAIN_NAME

    信任網域的名稱。請根據集區類型,將名稱格式設為:

    • Google 管理的集區: PROJECT_ID.svc.id.goog
    • 自行管理的集區: POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
  • PROJECT_ID: 機群主專案的專案 ID。

自訂 CA

  1. 設定 CA 服務,為代管工作負載身分核發憑證
  2. 將 CA 繫結至 workload identity pool
  3. 授權受管理的工作負載身分,向 CA 集區要求憑證

設定 CA 服務,為受管理的工作負載身分核發憑證

如要為 GKE 設定代管工作負載身分,請先設定憑證授權單位 (CA) 和一或多個從屬 CA。這項設定稱為「CA 階層」

您可以使用 CA 服務集區設定這個階層。透過這個階層,下層 CA 集區會將 X.509 工作負載身分憑證核發給工作負載。

設定為使用受管理工作負載身分核發工作負載憑證的 CA 集區,必須與工作負載位於相同區域。如要設計多區域架構,以因應區域性服務中斷,建議您為執行工作負載的每個區域設定從屬的憑證授權單位服務 CA 集區。這樣一來,每個工作負載都能參照區域內的從屬憑證授權單位服務 CA 集區。

設定根 CA 集區

如要建立根 CA 集區,請按照下列步驟操作:

Enterprise 層級中,使用 gcloud privateca pools create 建立根 CA 集區。這個層級適用於長期、低用量的憑證核發作業。

gcloud privateca pools create ROOT_CA_POOL_ID \
    --location=REGION \
    --project=CA_PROJECT_ID \
    --tier=enterprise

更改下列內容:

  • ROOT_CA_POOL_ID:根 CA 集區的專屬 ID。ID 長度上限為 64 個字元,且只能包含大小寫英數字元、底線或連字號。集區 ID 在區域內不得重複。

  • REGION:根 CA 集區所在的區域。

  • CA_PROJECT_ID:您要在當中建立根 CA 的專案 ID。

如要進一步瞭解 CA 集區、層級和區域,請參閱「建立 CA 集區」一文。

設定根 CA

使用 gcloud privateca roots create 在根 CA 集區中建立根 CA。如果這是根 CA 集區中唯一的 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=CA_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:金鑰演算法,例如 ec-p256-sha256
  • REGION:根 CA 集區所在的區域。
  • CA_PROJECT_ID:您建立根 CA 的專案 ID。

如要進一步瞭解 CA 的 subject 欄位,請參閱「主體」。

您也可以選擇在根 CA 集區中建立其他根 CA。這項操作有助於輪替根 CA

設定從屬 CA

您也可以選擇設定下層 CA。設定下層 CA 可協助您執行下列操作:

  • 多個憑證核發情境:如果您有多個憑證核發情境,可以為每個情境建立從屬 CA。

  • 更完善的負載平衡:在 CA 集區中新增多個從屬 CA,有助於更完善地平衡分配憑證要求負載。

如要建立從屬 CA 集區和從屬 CA,請按照下列步驟操作:

  1. DevOps 層級中建立從屬 CA 集區,這個層級適用於大量核發短期憑證。

    gcloud privateca pools create SUBORDINATE_CA_POOL_ID \
        --location=REGION \
        --project=CA_PROJECT_ID \
        --tier=devops
    

    更改下列內容:

    • SUBORDINATE_CA_POOL_ID:下層 CA 集區的專屬 ID。ID 長度上限為 64 個字元,且只能包含大小寫英數字元、底線或連字號。集區 ID 在區域內不得重複。
    • REGION:要建立從屬 CA 集區的區域。
    • CA_PROJECT_ID:您建立下層 CA 的專案 ID。

    詳情請參閱建立憑證授權單位集區

  2. 在從屬 CA 集區中建立從屬 CA。請勿變更預設的以設定為準的核發模式

    gcloud privateca subordinates create SUBORDINATE_CA_ID \
        --pool=SUBORDINATE_CA_POOL_ID \
        --location=REGION \
        --issuer-pool=ROOT_CA_POOL_ID \
        --issuer-location=REGION \
        --subject="CN=SUBORDINATE_CA_CN, O=SUBORDINATE_CA_ORGANIZATION" \
        --key-algorithm="KEY_ALGORITHM" \
        --use-preset-profile=subordinate_mtls_pathlen_0 \
        --project=CA_PROJECT_ID \
        --auto-enable
    

    更改下列內容:

    • SUBORDINATE_CA_ID:下層 CA 的專屬名稱。名稱長度上限為 64 個字元,且只能包含大小寫英數字元、底線或連字號。集區名稱在區域內不得重複。
    • SUBORDINATE_CA_POOL_ID:下層 CA 集區的名稱。
    • REGION:從屬 CA 集區所在的區域。
    • ROOT_CA_POOL_ID:根 CA 集區的 ID。
    • REGION:根 CA 集區的區域。
    • SUBORDINATE_CA_CN:下層 CA 的一般名稱。
    • SUBORDINATE_CA_ORGANIZATION:核發機構的下層 CA 名稱。
    • KEY_ALGORITHM:金鑰演算法,例如 ec-p256-sha256
    • CA_PROJECT_ID:您建立下層 CA 的專案 ID。

    如要進一步瞭解 CA 的 subject 欄位,請參閱「主體」。

建立憑證核發設定檔

將 CA 繫結至 workload identity pool 時,需要憑證核發設定。 如要讓工作負載跨多個信任網域進行驗證,請參閱「啟用工作負載身分集區之間的信任聯盟 (選用)」。

如要設定憑證核發設定,請建立名為 cic.json 的憑證核發設定檔。檔案格式類似於下列內容:

{
  "inlineCertificateIssuanceConfig": {
      "caPools": {
        "REGION1": "projects/CA_PROJECT_NUMBER1/locations/REGION1/caPools/SUBORDINATE_CA_POOL_ID1",
        "REGION2": "projects/CA_PROJECT_NUMBER2/locations/REGION2/caPools/SUBORDINATE_CA_POOL_ID2"
      },
      "lifetime": "DURATION",
      "rotationWindowPercentage": ROTATION_WINDOW_PERCENTAGE,
      "keyAlgorithm": "ALGORITHM"
  }
}

更改下列內容:

  • REGION:CA 所在的區域。

  • CA_PROJECT_NUMBER:您建立下層 CA 集區的專案專案編號。如要從CA_PROJECT_ID專案取得專案編號,請執行下列指令:

    gcloud projects describe CA_PROJECT_ID --format="value(projectNumber)"
    
  • SUBORDINATE_CA_POOL_ID:下層 CA 集區的名稱。

  • ALGORITHM:選用。用來產生私密金鑰的加密演算法。有效值為 ECDSA_P256ECDSA_P384RSA_2048RSA_3072RSA_4096。如未指定,系統會使用 ECDSA_P256 做為預設演算法。

  • DURATION:選用。分葉憑證效期 (以秒為單位)。這個值必須介於 86400 (1 天) 和 2592000 (30 天) 之間。如未指定,系統會使用預設值 86400 (1 天)。核發憑證的實際效期也取決於核發 CA,因為該 CA 可能會限制核發憑證的生命週期。

  • ROTATION_WINDOW_PERCENTAGE:(選用) 憑證效期達到這個百分比時,就會觸發更新。這個值必須介於 50 至 80 之間。如未指定,系統會使用 50 做為預設值。

將 CA 繫結至 workload identity pool

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

更新 workload identity pool

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

gcloud iam workload-identity-pools update TRUST_DOMAIN_NAME \
    --location="global" \
    --inline-certificate-issuance-config-file=CIC_JSON_FILE_PATH \
    --project=PROJECT_ID

更改下列內容:

  • TRUST_DOMAIN_NAME:信任網域的名稱。請根據集區類型,將名稱格式設為:

    • Google 管理的集區: PROJECT_ID.svc.id.goog
    • 自行管理的集區: POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
  • CIC_JSON_FILE_PATH:您先前建立的 JSON 格式憑證核發設定檔 (cic.json) 路徑。

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

如要確認工作負載身分集區已更新憑證核發設定,請執行下列指令:

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

TRUST_DOMAIN_NAME 替換為您先前在本文件中更新工作負載身分集區時使用的信任網域名稱。

指令會輸出類似以下的結果:

inlineCertificateIssuanceConfig:
    caPools:
      REGION1: projects/PROJECT_NUMBER1/locations/REGION1/caPools/SUBORDINATE_CA_POOL_ID1,
      REGION2: projects/PROJECT_NUMBER2/locations/REGION2/caPools/SUBORDINATE_CA_POOL_ID2
    keyAlgorithm: ALGORITHM
    lifetime: DURATION
    rotationWindowPercentage: ROTATION_WINDOW_PERCENTAGE
mode: TRUST_DOMAIN
name: TRUST_DOMAIN_NAME
state: ACTIVE

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

授權受管理的工作負載身分,從 CA 集區要求憑證

將 CA 繫結至 Workload Identity 集區後,請授權受管理的工作負載身分,從 CA 集區要求憑證。如要授權這些身分:

  1. 在每個下層 CA 集區中,將 CA 服務工作負載憑證要求者 (roles/privateca.workloadCertificateRequester) IAM 角色授予信任網域。下列 gcloud privateca pools add-iam-policy-binding 指令會授權信任網域,向 CA 服務要求憑證鏈結中的憑證。

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.workloadCertificateRequester \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/TRUST_DOMAIN_NAME" \
        --project=CA_PROJECT_ID
    

    更改下列內容:

    • SUBORDINATE_CA_POOL_ID:下層 CA 集區的 ID。
    • REGION:從屬 CA 集區的區域。
    • PROJECT_NUMBER:包含 GKE Workload Identity Pool 的專案編號。

      如要從工作負載身分集區專案取得 PROJECT_NUMBER,請執行下列指令。

      gcloud projects describe WORKLOAD_IDENTITY_POOL_PROJECT_ID --format="value(projectNumber)"
      
    • WORKLOAD_IDENTITY_POOL_PROJECT_ID:包含 Workload Identity Pool 的專案 ID。

    • TRUST_DOMAIN_NAME:信任網域的名稱。請根據集區類型,將名稱格式設為:

      • Google 管理的集區: PROJECT_ID.svc.id.goog
      • 自行管理的集區: POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
    • CA_PROJECT_ID:您建立下層 CA 的專案 ID。

  2. 將從屬 CA 集區的「CA Service Pool Reader」(CA 服務集區讀取者) (roles/privateca.poolReader) 角色授予受管理的工作負載身分。這樣做可授權代管工作負載身分,從 CA 的憑證鏈結取得已簽署的 X.509 憑證。

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.poolReader \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/TRUST_DOMAIN_NAME" \
        --project=CA_PROJECT_ID
    

    更改下列內容:

    • SUBORDINATE_CA_POOL_ID:下層 CA 集區的 ID。
    • REGION:從屬 CA 集區的區域。
    • PROJECT_NUMBER:包含 GKE Workload Identity Pool 的專案編號。
    • TRUST_DOMAIN_NAME:信任網域的名稱。請根據集區類型,將名稱格式設為:
      • Google 管理的集區: PROJECT_ID.svc.id.goog
      • 自行管理的集區: POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
    • CA_PROJECT_ID:您建立下層 CA 的專案 ID。

使用受管理的工作負載身分部署工作負載

設定 CA 集區,為受管理的工作負載身分核發憑證後,您就能部署具有受管理工作負載身分的工作負載。

本節說明如何部署具有代管工作負載身分的測試工作負載。方法是部署 Pod、檢查是否已產生憑證,並查看憑證和 SPIFFE ID。

部署 Pod

您可以部署 Pod,從 Google 管理的 workload identity pool 或自行管理的 workload identity pool 取得受管理的工作負載身分。

Google 代管集區

如要在叢集中部署測試 Pod,請執行下列操作:

  1. 取得叢集憑證。

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CLUSTER_ZONE \
        --project=CLUSTER_PROJECT_ID
    
  2. 建立 Kubernetes 命名空間。

    kubectl create namespace KUBERNETES_NAMESPACE
    
  3. 部署測試 PodSpec。

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      namespace: KUBERNETES_NAMESPACE
      name: example-pod
    spec:
      containers:
      - name: main
        image: debian
        command: ['sleep', 'infinity']
        volumeMounts:
        - name: fleet-spiffe-credentials
          mountPath: /var/run/secrets/workload-spiffe-credentials
          readOnly: true
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
      volumes:
      - name: fleet-spiffe-credentials
        csi:
          driver: podcertificate.gke.io
          volumeAttributes:
            signerName: spiffe.gke.io/fleet-svid
            trustDomain: fleet-project/svc.id.goog
    EOF
    

自行管理的集區

如要使用自行管理的 workload identity 集區,在叢集中部署測試 Pod,請執行下列操作:

  1. 設定自行管理的工作負載身分集區,並將叢集機群設定為使用這個集區

  2. 取得叢集憑證。

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CLUSTER_ZONE \
        --project=CLUSTER_PROJECT_ID
    
  3. 建立 Kubernetes 命名空間。

    kubectl create namespace KUBERNETES_NAMESPACE
    
  4. 部署測試 PodSpec。

    下列 PodSpec 會為自行管理的工作負載身分集區設定 trustDomain 磁碟區屬性:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      namespace: KUBERNETES_NAMESPACE
      name: example-pod
    spec:
      containers:
      - name: main
        image: debian
        command: ['sleep', 'infinity']
        volumeMounts:
        - name: fleet-spiffe-credentials
          mountPath: /var/run/secrets/workload-spiffe-credentials
          readOnly: true
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
      volumes:
      - name: fleet-spiffe-credentials
        csi:
          driver: podcertificate.gke.io
          volumeAttributes:
            signerName: spiffe.gke.io/fleet-svid
            trustDomain: fleet-project/tenancy-scope
    EOF
    

列出工作負載憑證

如要列出工作負載憑證,請執行下列指令。建立憑證可能需要幾分鐘的時間。

kubectl exec -it example-pod -n KUBERNETES_NAMESPACE -- ls  /var/run/secrets/workload-spiffe-credentials

指令輸出內容會列出下列檔案:

  • ca_certificates.pem:包含簽署工作負載憑證的根 CA 憑證。
  • certificates.pem:包含工作負載的 X.509 憑證。
  • private_key.pem:包含工作負載的私密金鑰。
  • trust_bundles.json:包含信任網域和 CA 憑證的地圖,可供指定工作負載信任。每個項目都包含信任網域字串 (做為鍵),以及對應於該信任網域的 CA 憑證。
  • credential-bundle.pem:包含串聯的私密金鑰和憑證,提供 mTLS 憑證的單一檔案。這個檔案僅適用於 1.35.2-gke.1291000 以上的 GKE 版本。

查看憑證

如要查看認證,請按照下列步驟操作:

  1. 將憑證匯出至憑證檔案。

    kubectl exec -it example-pod --namespace=KUBERNETES_NAMESPACE -- cat /var/run/secrets/workload-spiffe-credentials/certificates.pem | openssl x509 -noout -text > certfile
    
  2. 查看憑證檔案。

    cat certfile
    

    在憑證的 X509v3 Subject Alternative Name 屬性中,您會看到 SPIFFE ID,格式類似於下列內容,具體取決於 workload identity pool 類型:

    • Google 管理的集區: spiffe://PROJECT_ID.svc.id.goog/ns/KUBERNETES_NAMESPACE/sa/default
    • 自行管理的集區: spiffe://POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog/ns/KUBERNETES_NAMESPACE/sa/default

    default 是指預設的 Kubernetes ServiceAccount。

測試工作負載對工作負載的驗證

如要測試工作負載對工作負載的驗證,請參閱「使用 Go 測試 mTLS 驗證」。

存放區中的程式碼範例會建立用戶端伺服器工作負載。您可以使用本文件稍早產生的憑證,測試工作負載之間的雙向驗證。

啟用工作負載身分集區之間的信任聯盟 (選用)

如要為不同信任網域中的工作負載啟用相互驗證,您必須設定 workload identity pool 之間的信任聯盟。只有在工作負載需要向不同 workload identity pool 中的工作負載進行驗證時,才需要執行這個步驟。

如要啟用信任同盟,請完成下列步驟:

  1. 建立信任設定檔
  2. 更新工作負載身分集區的信任設定

建立信任設定檔

建立信任設定檔,並在 inlineTrustConfig 區段中指定每個網域的憑證。

信任設定檔包含一組信任錨點,受管理的工作負載身分會使用這些錨點驗證對等互連憑證。信任設定檔會將 SPIFFE 信任網域對應至 CA 憑證。

  1. 如果是自訂 CA,請下載使用自訂 CA 的信任網域憑證。

    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. 建立名為 tc.json 的檔案,其中包含內嵌信任設定。如果網域使用 Google 代管的預設 CA,請使用 trustDefaultSharedCa 欄位。如果網域使用自訂 CA,請使用先前下載的 PEM 編碼憑證。

    檔案內容應如下所示:

    在這個範例中,TRUST_DOMAIN_A 使用 Google 代管的預設 CA,TRUSTED_DOMAIN_B 則使用自訂 CA 和下載的根憑證。

    {
      "inlineTrustConfig": {
        "additionalTrustBundles": {
          "TRUST_DOMAIN_A": {
            "trustDefaultSharedCa": true
          },
          "TRUSTED_DOMAIN_B": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----"
              }
            ]
          }
        }
      }
    }
    

    更改下列內容:

    • TRUST_DOMAIN_A:使用 Google 管理預設 CA 的信任網域名稱。
    • TRUST_DOMAIN_B:使用自訂 CA 的信任網域名稱。
    • CERTIFICATE_MATERIAL:一組 PEM 格式的 CA 憑證,信任網域中核發的憑證都必須經過這組憑證驗證。

更新 workload identity pool 的信任設定

gcloud iam workload-identity-pools update TRUST_DOMAIN_NAME \
    --location="global" \
    --inline-trust-config-file=TC_JSON_FILE_PATH \
    --project=PROJECT_ID

更改下列內容:

  • TRUST_DOMAIN_NAME:信任網域的名稱。
  • TC_JSON_FILE_PATH:您建立的 JSON 格式信任設定檔 (tc.json) 路徑。
  • PROJECT_ID:專案 ID。

後續步驟

歡迎試用

如果您未曾使用過 Google Cloud,歡迎建立帳戶來評估我們的產品在實際工作環境中的成效。新客戶也能獲得價值 $300 美元的免費抵免額,可用於處理、測試及部署工作負載。

免費試用