設定代管 Cloud Service Mesh 的憑證授權單位服務
將憑證授權單位服務與代管 Cloud Service Mesh 整合,即可使用私人 CA 核發工作負載憑證,而非預設的 Cloud Service Mesh 憑證授權單位。這項設定可協助您在 Cloud HSM 中備份簽署金鑰、將憑證鏈結至自訂企業根,並符合多個叢集的法規遵循要求。
與預設網格 CA 不同,CA 服務有明確的服務水準協議,且另外收費。建立叢集時,機群預設設定不支援 CA 服務,因此您必須為每個叢集設定 Cloud Service Mesh。如為叢集內控制層,請參閱「安裝預設功能和憑證授權單位 (CA) 服務」。
必要條件
本指南假設您已具備下列條件:
- 雲端專案
- 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 集區。
如果 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
如要瞭解如何為集區設定政策,請參閱「使用憑證核發政策」。
如果您使用憑證範本,請立即設定。詳情請參閱 Workload Identity 憑證的 CA 服務指南。請確認憑證範本與 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 以使用 CA 服務
確認
istio-system命名空間是否存在,如果不存在,請建立該命名空間:kubectl create ns istio-system檢查
istio-system命名空間中是否有asm-optionsconfigmap: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。