管理 Distributed Cloud 使用者

本頁說明如何管理 Distributed Cloud 中的使用者。

建立 Distributed Cloud 叢集時,只有用於建立叢集的使用者帳戶會獲得該叢集的存取權。如要授予更多使用者叢集存取權,請採取下列任一做法:

使用 Kubernetes RBAC 授予必要權限

本節說明如何使用 Kubernetes 角色式存取權控管 (RBAC),將使用者業務需求所需的權限授予使用者帳戶。這些權限會封裝在多個角色中。將適當角色授予使用者帳戶後,即可將該帳戶新增至目標 Distributed Cloud 叢集。

Distributed Cloud 不支援 Identity and Access Management 群組或第三方身分識別提供者,無法在 Distributed Cloud 叢集上搭配 Kubernetes RBAC 使用。

您需要使用下列 Kubernetes 資源,將角色授予使用者:

  • ClusterRole:可讓您將一組權限套用至叢集中的任何命名空間,並授予叢集範圍資源的存取權。
  • ClusterRoleBinding:將 ClusterRole 資源繫結至使用者帳戶。
  • Role:可讓您將一組權限套用至特定命名空間。
  • RoleBinding:將 RoleClusterRole 資源繫結至特定命名空間中的使用者帳戶。

授予叢集管理員權限

建立 Distributed Cloud 叢集時,您使用的使用者帳戶會自動成為叢集管理員。如要將叢集管理員權限授予其他使用者,請建立 ClusterRoleBinding 資源,將目標使用者帳戶繫結至 cluster-admin 角色,然後將該資源套用至叢集:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: BINDING_NAME
subjects:
  kind: User
  name: ACCOUNT_NAME
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io    

更改下列內容:

  • BINDING_NAME:可專屬識別這個角色繫結的名稱。
  • ACCOUNT_NAME:目標使用者帳戶的名稱。

您也可以使用下列 kubectl 指令:

kubectl create clusterrolebinding "BINDING_NAME" \
  --clusterrole cluster-admin --user "ACCOUNT_NAME"

更改下列內容:

  • BINDING_NAME:可專屬識別這個角色繫結的名稱。
  • ACCOUNT_NAME:目標使用者帳戶的名稱。

授予應用程式開發人員權限

如要授予應用程式開發人員在目標叢集上部署工作負載所需的權限,請按照下列步驟操作:

  1. 建立 Role 資源,授予在目標命名空間中建立及管理 Pod、Service 和部署項目的權限,並將其套用至叢集:

    apiVersion: rbac.authorization.k8s.io/v1
     kind: Role
     metadata:
       namespace: NAMESPACE
       name: ROLE_NAME
     rules:
       apiGroups: ["apps", ""]
       resources: ["pods", "deployments", "services"]
       verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    

    更改下列內容:

    • NAMESPACE:目標命名空間的名稱。
    • ROLE_NAME:可專屬識別這個角色的名稱。
  2. 建立 RoleBinding 資源,將目標使用者帳戶繫結至上一個步驟中建立的角色,並套用至叢集:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
     namespace: NAMESPACE
     name: BINDING_NAME
    subjects:
     kind: User
     name: ACCOUNT_NAME
     kind: User
     name: ACCOUNT_NAME
    roleRef:
     kind: Role
     name: ROLE_NAME
     apiGroup: rbac.authorization.k8s.io  
    

    更改下列內容:

    • BINDING_NAME:可專屬識別這個角色繫結的名稱。
    • NAMESPACE:目標命名空間的名稱。
    • ACCOUNT_NAME:目標使用者帳戶的名稱。
    • ROLE_NAME:目標角色的名稱。

授予 Cloud Build 服務代理程式的權限

如要授予 Cloud Build 服務代理在目標叢集上部署工作負載的必要權限,請按照下列步驟操作:

  1. 建立 Role 資源,授予在目標命名空間中建立及管理 Pod、Service 和部署項目的權限,並將其套用至叢集:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
     namespace: NAMESPACE
     name: ROLE_NAME
    rules:
     apiGroups: ["apps", ""]
     resources: ["pods", "deployments", "services"]
     verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    

    更改下列內容:

    • NAMESPACE:目標命名空間的名稱。
    • ROLE_NAME:可專屬識別這個角色的名稱。
  2. 建立 RoleBinding 資源,將目標 Cloud Build 服務代理人帳戶繫結至上一個步驟中建立的角色,並套用至叢集:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
     namespace: NAMESPACE
     name: BINDING_NAME
    subjects:
     kind: User
     name: PROJECT_ID@cloudbuild.gserviceaccount.com
    roleRef:
     kind: Role
     name: ROLE_NAME
     apiGroup: rbac.authorization.k8s.io  
    

    更改下列內容:

    • BINDING_NAME:可專屬識別這個角色繫結的名稱。
    • NAMESPACE:目標命名空間的名稱。
    • PROJECT_ID:目標 Google Cloud 專案的 ID。
    • ROLE_NAME:目標角色的名稱。

如要授予 Cloud Build 服務代理程式權限,在目標叢集的所有命名空間中部署及管理工作負載,請建立 ClusterRoleClusterRoleBinding 資源,而非 RoleRoleBinding 資源。

授予檢視叢集資訊的權限

如要授予必要權限,以便在 Google Cloud 控制台中查看叢集的詳細資訊,請按照下列步驟操作:

  1. 建立 ClusterRole 資源,讓 Connect 代理程式模擬需要在 Google Cloud 控制台中查看叢集資訊的使用者:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
     name: ROLE_NAME
    rules:
     apiGroups: [""]
     resources: ["users"]
     verbs: ["impersonate"]
     resourceNames: ["ACCOUNT_NAME"]
    

    更改下列內容:

    • ROLE_NAME:目標角色的名稱。
    • ACCOUNT_NAME:目標使用者帳戶的名稱。
  2. 建立 ClusterRoleBinding 資源,將 Connect 代理程式服務代理程式帳戶繫結至您在上一個步驟中建立的角色,並套用至叢集:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
     name: BINDING_NAME
    subjects:
     kind: ServiceAccount
     name: ACCOUNT_NAME
    roleRef:
     kind: ClusterRole
     name: ROLE_NAME
     apiGroup: rbac.authorization.k8s.io
    

    更改下列內容:

    • BINDING_NAME:可專屬識別這個角色繫結的名稱。
    • ACCOUNT_NAME:目標服務使用者帳戶的名稱。
    • ROLE_NAME:目標角色的名稱。

您必須為每位受影響的使用者建立個別的 ClusterRoleClusterRoleBinding 資源配對。

您也可以使用 kubectl 指令列工具,授予查看叢集資訊所需的權限,方法如下:

  1. 建立 ClusterRole 資源,讓 Connect 代理程式模擬需要在 Google Cloud 控制台中查看叢集資訊的使用者:

    kubectl create clusterrole "ROLE_NAME" --verb impersonate \
     --resource users --resource-name "ACCOUNT_NAME"
    

    更改下列內容:

    • ROLE_NAME:目標角色的名稱。
    • ACCOUNT_NAME:目標服務使用者帳戶的名稱。
  2. 建立 ClusterRoleBinding 資源,將 Connect 代理程式服務代理程式帳戶繫結至您在上一個步驟中建立的角色,並套用至叢集:

    kubectl create clusterrolebinding "BINDING_NAME" --clusterrole \
     "ROLE_NAME" --serviceaccount "ACCOUNT_NAME"
    

    更改下列內容:

    • BINDING_NAME:可專屬識別這個角色繫結的名稱。
    • ACCOUNT_NAME:目標服務使用者帳戶的名稱。
    • ROLE_NAME:目標角色的名稱。

使用連線閘道存取 Distributed Cloud 叢集

您可以選擇使用連線閘道存取 Distributed Cloud 叢集。視業務需求而定,連線閘道使用者需要下列一或多個角色:

  • Connect Gateway 管理員 (roles/gkehub.gatewayAdmin):授予 Connect Gateway API 的存取權。這樣就能使用 kubectl 指令列工具管理叢集。
  • 閘道閘道編輯者 (roles/gkehub.gatewayEditor):授予叢集的讀寫存取權。
  • Connect Gateway 讀取者 (roles/gkehub.gatewayReader):授予叢集的唯讀存取權。
  • GKE Hub 檢視者 (roles/gkehub.viewer):授予從叢集擷取 kubeconfig 檔案的權限。

如要進一步瞭解如何使用連線閘道,請參閱下列文章: