將部署作業限制在 GKE 命名空間中

部署至 Google Kubernetes Engine (GKE) 時,預設的 Cloud Deploy 執行服務帳戶可存取目標叢集中的所有命名空間。您可以將該服務帳戶設定為僅部署至一個命名空間。

  1. 確認執行服務帳戶沒有 roles/container.developer IAM 角色。

  2. roles/container.clusterViewer 角色授予服務帳戶。

    gcloud projects add-iam-policy-binding PROJECT_ID \
     --member="serviceAccount:SERVICE_ACCOUNT" \
     --role="roles/container.clusterViewer"
    

    這個角色可讓服務帳戶在叢集上進行驗證,但無法執行其他作業。

  3. 建立 Kubernetes RBAC 角色,授予命名空間的管理員存取權。

    本例中的 RBAC 角色具有廣泛的權限,相當於 clouddeploy.developer IAM 角色。為盡量降低權限提升的風險,建議您將這些權限變更為應用程式所需的最低權限。如需操作說明,請參閱 GKE 的 RBAC 說明文件

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    
  4. 建立 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 政策,將 admin Role 繫結至執行服務帳戶。NAMESPACE 是要授予服務帳戶存取權的命名空間。服務帳戶無法存取叢集上的任何其他命名空間。

  5. 將 RBAC 資訊清單套用至叢集:

    kubectl apply -f YAML_NAME