為代管型 Cloud Service Mesh 設定憑證授權單位服務

本指南說明如何為受管理 Cloud Service Mesh 設定憑證授權單位服務。如要瞭解叢內 Cloud Service Mesh,請參閱「安裝預設功能和憑證授權單位 (CA) 服務」。

除了 Cloud Service Mesh 憑證授權單位,您也可以設定 Cloud Service Mesh 使用憑證授權單位服務。本指南提供整合 CA 服務的機會,建議用於下列用途:

  • 如果需要不同的憑證授權單位,在不同叢集上簽署工作負載憑證。
  • 如需在 Cloud HSM 中備份簽署金鑰。
  • 如果您所處的產業受到嚴格監管,且必須遵守法規。
  • 如要將 Cloud Service Mesh CA 鏈結至自訂企業根憑證,以便簽署工作負載憑證。

Cloud Service Mesh 憑證授權單位的費用包含在 Cloud Service Mesh 定價中。CA 服務不包含在 Cloud Service Mesh 基本價格中,且會另外收費。此外,憑證授權單位服務提供明確的服務水準協議,但 Cloud Service Mesh 憑證授權單位則無。

必要條件

本指南假設您已具備以下條件:

需求條件

在要設定 CA 集區的專案中,啟用必要的 API。

 gcloud services enable privateca.googleapis.com \
      --project=CA_PROJECT_ID

設定 CA 服務

  1. 在層級 DevOps 中建立 CA 集區,並與其服務的叢集位於相同區域,以免發生延遲時間過長的問題,或潛在的跨區域服務中斷。詳情請參閱「已最佳化調整工作負載的級別」。
  2. 建立 CA,確保 GKE 叢集所在的專案中,CA 集區至少有一個有效的憑證授權單位。使用下層 CA 簽署 Cloud Service Mesh 工作負載憑證。記下從屬 CA 對應的 CA 集區
  3. 如果只打算為 Cloud Service Mesh 工作負載提供服務憑證,請為 CA 集區設定下列核發政策:

    policy.yaml

    baselineValues:
      keyUsage:
        baseKeyUsage:
          digitalSignature: true
          keyEncipherment: true
        extendedKeyUsage:
          serverAuth: true
          clientAuth: true
      caOptions:
        isCa: false
    identityConstraints:
      allowSubjectPassthrough: false
      allowSubjectAltNamesPassthrough: true
      celExpression:
        expression: subject_alt_names.all(san, san.type == URI && san.value.startsWith("spiffe://PROJECT_ID.svc.id.goog/ns/") )
    
  4. 如要更新 CA 集區的簽發政策,請使用下列指令:

    gcloud privateca pools update CA_POOL --location ca_region --issuance-policy policy.yaml
    

    如要瞭解如何為集區設定政策,請參閱「使用憑證核發政策」。

  5. 如果您使用憑證範本,請立即設定。如要瞭解詳情,請參閱工作負載身分憑證的 CA 服務指南。請確認憑證範本與 CA 集區位於相同區域。如果 CA 集區有多個區域,請為每個區域建立憑證範本。

使用憑證授權單位服務所需的角色

如要整合,Cloud Service Mesh 中的所有工作負載都必須具備下列 IAM 角色。您必須明確套用這些角色繫結,才能用於 Cloud Service Mesh 工作負載:

    WORKLOAD_IDENTITY="FLEET_PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/"

    gcloud privateca pools add-iam-policy-binding CA_POOL \
      --project FLEET_PROJECT_ID \
      --location ca_region \
      --member "group:${WORKLOAD_IDENTITY}" \
      --role "roles/privateca.workloadCertificateRequester"

    gcloud privateca pools add-iam-policy-binding CA_POOL \
      --project FLEET_PROJECT_ID \
      --location ca_region \
      --member "group:${WORKLOAD_IDENTITY}" \
      --role "roles/privateca.auditor"

使用憑證範本時的做法:

    gcloud privateca templates add-iam-policy-binding CERT_TEMPLATE_ID \
        --member "group:${WORKLOAD_IDENTITY}" \
        --role "roles/privateca.templateUser"

限制

  • 請先設定並挑選 CA,再佈建 Cloud Service Mesh 控制層。不支援變更 CA。

設定代管型 Cloud Service Mesh 以使用憑證授權單位服務

  1. 確認 istio-system 命名空間是否存在,如果沒有,請建立該命名空間:

      kubectl create ns istio-system
    
  2. 檢查 istio-system 命名空間中是否有 asm-options configmap:

      kubectl get configmap/asm-options -n istio-system
    
  3. 如果沒有,請建立 configmap:

      kubectl create configmap -n istio-system asm-options
    
  4. 修補 ConfigMap,加入 CAS 設定:

      kubectl patch configmap/asm-options -n istio-system --type merge \
      -p '{"data":{"ASM_OPTS": "CA=PRIVATECA;CAAddr=projects/CA_PROJECT_ID/locations/ca_region/caPools/CA_POOL"}}'
    

    如需憑證範本,請使用 : 做為分隔符,將範本 ID 附加至 CA 集區地址:

      kubectl patch configmap/asm-options -n istio-system --type merge \
      -p '{"data":{"ASM_OPTS": "CA=PRIVATECA;CAAddr=projects/CA_PROJECT_ID/locations/ca_region/caPools/CA_POOL:projects/PROJECT_ID/locations/ca_region/certificateTemplates/CERT_TEMPLATE_ID"}}'
    

完成設定步驟後,請啟用自動管理功能,繼續安裝受管理 Cloud Service Mesh。