部署至 Google Kubernetes Engine (GKE) 時,預設的 Cloud Deploy 執行服務帳戶可存取目標叢集中的所有命名空間。您可以將該服務帳戶設定為僅部署至一個命名空間。
確認執行服務帳戶沒有
roles/container.developerIAM 角色。將
roles/container.clusterViewer角色授予服務帳戶。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT" \ --role="roles/container.clusterViewer"這個角色可讓服務帳戶在叢集上進行驗證,但無法執行其他作業。
建立 Kubernetes RBAC 角色,授予命名空間的管理員存取權。
本例中的 RBAC 角色具有廣泛的權限,相當於
clouddeploy.developerIAM 角色。為盡量降低權限提升的風險,建議您將這些權限變更為應用程式所需的最低權限。如需操作說明,請參閱 GKE 的 RBAC 說明文件。kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: admin namespace: NAMESPACE rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"]建立
RoleBinding,將所選命名空間中的 RBAC 角色繫結至 Cloud Deploy 執行服務帳戶:kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: admin namespace: NAMESPACE subjects: # Google Cloud user account - kind: User name: SERVICE_ACCOUNT roleRef: kind: Role name: admin apiGroup: rbac.authorization.k8s.io這個資訊清單會定義 RBAC 政策,將
adminRole 繫結至執行服務帳戶。NAMESPACE是要授予服務帳戶存取權的命名空間。服務帳戶無法存取叢集上的任何其他命名空間。將 RBAC 資訊清單套用至叢集:
kubectl apply -f YAML_NAME