このページでは、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: 対象となるユーザー アカウントの名前。
アプリケーション デベロッパーに権限を付与する
アプリケーション デベロッパーにターゲット クラスタにワークロードをデプロイするために必要な権限を付与する手順は次のとおりです。
ターゲット 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: このロールを一意に識別する名前。
ターゲット ユーザー アカウントを前の手順で作成したロールにバインドし、クラスタに適用する
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 サービス エージェントに付与するには、次の操作を行います。
ターゲット 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: このロールを一意に識別する名前。
ターゲットの 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 コンソールでクラスタの詳細情報を表示するために必要な権限を付与するには、次の操作を行います。
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: 対象となるユーザー アカウントの名前。
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 コマンドライン ツールを使用して、クラスタ情報を表示するために必要な権限を次のように付与することもできます。
Google Cloud コンソールでクラスタ情報を表示する必要があるユーザーの権限を Connect Agent が借用できるようにする
ClusterRoleリソースを作成します。kubectl create clusterrole "ROLE_NAME" --verb impersonate \ --resource users --resource-name "ACCOUNT_NAME"
次のように置き換えます。
ROLE_NAME: ターゲット ロールの名前。ACCOUNT_NAME: 対象のサービス ユーザー アカウントの名前。
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 の使用方法については、以下をご覧ください。