為代管型 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 憑證授權單位則沒有。
事前準備
本指南假設您已具備下列條件:
- Cloud 專案
- Cloud Billing 帳戶
- 取得必要權限,以便佈建 Cloud Service Mesh
- 在叢集和節點集區中啟用 Workload Identity Federation for GKE。
-
在支援的區域中,有一或多個叢集採用支援的 GKE 版本。如要瞭解如何建立啟用 Cloud Service Mesh 的 Google Kubernetes Engine 叢集,請參閱「在 Google Kubernetes Engine 中佈建代管的 Cloud Service Mesh 控制平面」文件中的叢集個別設定。啟用代管 Cloud Service Mesh 做為機群的預設設定,並在建立叢集時將叢集註冊至機群,僅支援Mesh CA。您必須為每個叢集設定 Cloud Service Mesh,並明確啟用每個叢集的 CA 服務。
需求條件
在要設定 CA 集區的專案中啟用必要 API。
gcloud services enable privateca.googleapis.com \
--project=CA_PROJECT_ID
設定 CA 服務
- 請在層級
DevOps
中建立 CA 集區,並與所服務叢集位於相同區域,以免發生過長的延遲問題或潛在的跨區停機情形。詳情請參閱「已最佳化調整工作負載的級別」。 - 建立 CA,在與 GKE 叢集相同的專案中,至少在 CA 集區中設有一個有效的憑證授權單位。使用子 CA 簽署 Cloud Service Mesh 工作負載憑證。記下對應於從屬 CA 的 CA 集區。
如果您只想為 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/") )
如要更新 CA 集區的核發政策,請使用下列指令:
gcloud privateca pools update CA_POOL --location ca_region --issuance-policy policy.yaml
如要瞭解如何在集區中設定政策,請參閱「使用憑證核發政策」。
如果您使用的是憑證範本,請立即設定。詳情請參閱 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 服務
確認
istio-system
命名空間是否存在,如果不存在,請建立這個命名空間:kubectl create ns istio-system
檢查
asm-options
ConfigMap 是否存在於istio-system
命名空間:kubectl get configmap/asm-options -n istio-system
如果 configmap 不存在,請建立:
kubectl create configmap -n istio-system asm-options
修補 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。