Distributed Cloud ユーザーを管理する

このページでは、Distributed Cloud でユーザーを管理する方法について説明します。

Distributed Cloud クラスタを作成すると、クラスタの作成に使用したユーザー アカウントにのみ、そのクラスタへのアクセス権が付与されます。クラスタへのアクセス権を他のユーザーに付与するには、次のいずれかを行います。

Kubernetes RBAC を使用して必要な権限を付与する

このセクションでは、Kubernetes ロールベース アクセス制御(RBAC)を使用して、ユーザーのビジネスニーズに必要な権限をユーザーのアカウントに付与する方法について説明します。これらの権限は、複数のロールによってカプセル化されます。ユーザー アカウントに適切なロールを付与したら、そのアカウントをターゲットの Distributed Cloud クラスタに追加できます。

Distributed Cloud は、Distributed Cloud クラスタで Kubernetes RBAC とともに使用する Identity and Access Management グループまたはサードパーティの ID プロバイダをサポートしていません。

ユーザーにロールを付与するには、次の Kubernetes リソースを使用する必要があります。

  • ClusterRole: クラスタ内の任意の Namespace に一連の権限を適用できます。また、クラスタ全体のリソースへのアクセス権も付与します。
  • ClusterRoleBinding: ClusterRole リソースをユーザー アカウントにバインドします。
  • Role: 特定の Namespace に一連の権限を適用できます。
  • RoleBinding: Role または ClusterRole リソースを特定の Namespace のユーザー アカウントにバインドします。

クラスタ管理者の権限を付与する

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. ターゲット Namespace で Pod、Service、Deployment の作成と管理を行う権限を付与する Role リソースを作成し、クラスタに適用します。

    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: ターゲット 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: ターゲット Namespace の名前。
    • ACCOUNT_NAME: 対象となるユーザー アカウントの名前。
    • ROLE_NAME: ターゲット ロールの名前。

Cloud Build サービス エージェントの権限を付与する

ターゲット クラスタにワークロードをデプロイするために必要な権限を Cloud Build サービス エージェントに付与するには、次の操作を行います。

  1. ターゲット Namespace で Pod、Service、Deployment の作成と管理を行う権限を付与する Role リソースを作成し、クラスタに適用します。

    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: ターゲット Namespace の名前。
    • ROLE_NAME: このロールを一意に識別する名前。
  2. ターゲットの Cloud Build サービス エージェント アカウントを前の手順で作成したロールにバインドし、クラスタに適用する RoleBinding リソースを作成します。

    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: ターゲット Namespace の名前。
    • PROJECT_ID: ターゲット Google Cloud プロジェクトの ID。
    • ROLE_NAME: ターゲット ロールの名前。

Cloud Build サービス エージェントに、ターゲット クラスタのすべての Namespace でワークロードをデプロイして管理する権限を付与する必要がある場合は、Role リソースと RoleBinding リソースではなく、ClusterRole リソースと ClusterRoleBinding リソースを作成します。

クラスタ情報を表示する権限を付与する

Google Cloud コンソールでクラスタの詳細情報を表示するために必要な権限を付与するには、次の操作を行います。

  1. Google Cloud コンソールでクラスタ情報を表示する必要があるユーザーの権限を Connect Agent が借用できるようにする ClusterRole リソースを作成します。

    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. Connect Agent サービス エージェント アカウントを前の手順で作成したロールにバインドする ClusterRoleBinding リソースを作成し、クラスタに適用します。

    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: ターゲット ロールの名前。

影響を受けるユーザーごとに、個別の ClusterRole リソースと ClusterRoleBinding リソースのペアを作成する必要があります。

kubectl コマンドライン ツールを使用して、クラスタ情報を表示するために必要な権限を次のように付与することもできます。

  1. Google Cloud コンソールでクラスタ情報を表示する必要があるユーザーの権限を Connect Agent が借用できるようにする ClusterRole リソースを作成します。

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

    次のように置き換えます。

    • ROLE_NAME: ターゲット ロールの名前。
    • ACCOUNT_NAME: 対象のサービス ユーザー アカウントの名前。
  2. Connect Agent サービス エージェント アカウントを前の手順で作成したロールにバインドする ClusterRoleBinding リソースを作成し、クラスタに適用します。

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

    次のように置き換えます。

    • BINDING_NAME: このロール バインディングを一意に識別する名前。
    • ACCOUNT_NAME: 対象のサービス ユーザー アカウントの名前。
    • ROLE_NAME: ターゲット ロールの名前。

Connect Gateway を使用して Distributed Cloud クラスタにアクセスする

接続ゲートウェイを使用して Distributed Cloud クラスタにアクセスすることもできます。Connect Gateway ユーザーは、ビジネス要件に応じて次のロールの 1 つ以上を必要とします。

  • Connect Gateway 管理者(roles/gkehub.gatewayAdmin): Connect Gateway API へのアクセス権を付与します。これにより、kubectl コマンドライン ツールを使用してクラスタを管理できるようになります。
  • Gateway Gateway 編集者(roles/gkehub.gatewayEditor): クラスタに対する読み取りと書き込みアクセス権を付与します。
  • Connect Gateway 読み取り(roles/gkehub.gatewayReader): クラスタに対する読み取り専用アクセス権を付与します。
  • GKE Hub 閲覧者(roles/gkehub.viewer): クラスタから kubeconfig ファイルを取得する権限を付与します。

Connect Gateway の使用方法については、以下をご覧ください。