為代管型 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 的基本價格中,須另外收費。此外,CA 服務還提供明確的服務水準協議,但 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"

限制

  • 在佈建 Cloud Service Mesh 控制層之前,請先設定及選取 CA。不支援變更 CA。

設定代管型 Cloud Service Mesh 以使用 CA 服務

  1. 確認 istio-system 命名空間是否存在,如果不存在,請建立這個命名空間:

      kubectl create ns istio-system
    
  2. 檢查 asm-options ConfigMap 是否存在於 istio-system 命名空間:

      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。