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

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

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

  • 如果需要不同的憑證授權單位,在不同叢集上簽署工作負載憑證。
  • 如需在受管理 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。