認可ロール
Anthos プライベート モードには、次の 4 つの認可ロールがあらかじめ設定されています。
ロール名 | Kubernetes ClusterRole 名
(管理クラスタ) |
権限 |
インフラストラクチャ オペレーター | cluster-admin | 全リソースに対する完全な読み取り / 書き込みアクセス権。 |
インフラストラクチャ オペレーター(読み取り専用) | 表示 | Management Center におけるほとんどのものに対する読み取り専用アクセス権(ロール、ロール バインディング、シークレットは除く)。 現在、ユーザーは Grafana への書き込みアクセス権を持ち、ダッシュボードを編集できます。 |
プラットフォーム管理者 | anthos-platform-admin |
|
プラットフォーム管理者 (読み取り専用) |
anthos-platform-admin-read-only | プラットフォーム管理者が表示できるすべてのリソースに対する読み取り専用アクセス権。 現在、ユーザーは Grafana への書き込みアクセス権を持ち、ダッシュボードを編集できます。 |
ADMIN_KUBECONFIG
へのアクセス権を持つユーザーは、Kubernetes system:master
グループのメンバーとして認証され、Kubernetes API サーバーに対するすべてのアクションが許可されます。たとえば、次のコマンドを実行してすべての Secret を一覧表示できます。
kubectl get secrets --all-namespaces --kubeconfig=${ADMIN_KUBECONFIG}
ADMIN_KUBECONFIG
を使用したアクセスは、汎用ユーザー名の admin
として認証されるため、コマンドを実行するユーザーの追跡が困難になります。そのため、ADMIN_KUBECONFIG
は、安全な場所に保管して必要なときにのみ(最初のプラットフォーム オペレータのロールバインディングを設定する場合や、OIDC 障害から回復する場合など)使用することが重要です。
重要: ユーザーやグループの先頭には、system:
を付けないようにしてください。system:
接頭辞は、Kubernetes システム用に予約されています。
ウェブ コンソールと指標へのアクセス
Anthos プライベート モードでは、これらの 4 つのロールにバインドされているユーザーは、Management Center と指標(Grafana)へのアクセス許可リストに自動的に反映されます。
読み取り専用アクセス権限を含むロールでは、Management Center で書き込み操作を行うと拒否されます。
ロール バインディング
ウェブ コンソールで OIDC を設定する際、プラットフォーム管理者ロールにバインドされる初期ユーザーを設定できます。Platform Engine の最初の管理者ユーザーの kubeconfig にログインして、プラットフォーム管理者のロールに別のユーザーをバインドする方法は 2 つあります。
方法 I: (推奨)OIDC プロバイダでグループ メンバーシップを設定し、グループベースでロール バインディングを作成する
この方法では、グループの 1 つがプリセット ロールにバインドされ、グループ内のすべてのメンバーにプリセット ロールと同じアクセス権が付与されます。
開始する前に次の点を確認してください。
- グループの送信元の OIDC プロバイダを特定します。
- [OIDC Profile] タブの [Groups Claim] フィールドは、OIDC プロバイダ側のグループ メンバーシップ情報を含むクレームの名前と同じであることが必要です。Anthos プライベート モードはデフォルト値の
groups
を渡しますが、OIDC プロバイダに別の値が設定されている場合は、[OIDC Profile] タブで値を設定済みであることを確認してください。 - [OIDC Profile] タブの [Group Prefix] をメモしておきます。すべてのグループ名の前にグループ プレフィックスを付ける必要があります。たとえば、OIDC プロバイダにグループ プレフィックスとして
gid-
と、グループ「admin-group」がある場合は、gid-admin-group
を使用する必要があります。区切り文字「-
」は、グループ プレフィックスの一部です。システムは、どのような区切り文字も追加しません。
Management Center UI の [アクセス管理] タブを使用すると、グループに基づいてロール バインディングを管理できます。
現在ログインしているアカウントよりも多くの権限を持つロールにバインディングを追加または更新することはできません。たとえば、プラットフォーム管理者としてログインしている場合、グループをインフラストラクチャ オペレーター ロールにバインドすることはできません。
別の方法では、次のコマンドを実行して、グループに基づいてロール バインディングを作成します。group=
に渡される値は、グループ接頭辞が付いた OIDC プロバイダのグループ名と同じである必要があります。
kubectl create clusterrolebinding anthos-platform-admin-group-binding \
--kubeconfig=${ADMIN_OIDC_KUBECONFIG} --clusterrole=anthos-platform-admin \
--group=gid-anthos-platform-admin-group
これで、OIDC プロバイダの anthos-platform-admin-group
に追加したユーザーは、プラットフォーム管理者としてのすべての権限を持ちます。
同様に、次のコマンドを使用すると、グループをプラットフォーム管理者(読み取り専用)ロールにバインドできます。
kubectl create clusterrolebinding anthos-platform-admin-read-only-group-binding \
--kubeconfig=${ADMIN_OIDC_KUBECONFIG} --clusterrole=anthos-platform-admin-read-only \
--group=gid-anthos-platform-admin-read-only-group
権限昇格させないようにするため、プラットフォーム管理者はグループをプラットフォーム オペレーター ロールまたはプラットフォーム オペレーター(読み取り専用)ロールにバインドできません。インフラストラクチャ オペレーターの最初のグループを初期化するには、ADMIN-KUBECONFIG
が必要です。
kubectl create clusterrolebinding anthos-platform-operator-group-binding \
--kubeconfig=${ADMIN_KUBECONFIG} --clusterrole=cluster-admin --group=gid-anthos-platform-operator-group
その後、ログインしているインフラストラクチャ オペレーター アカウントで KUBECONFIG
を使用して、他のグループを任意のロールにバインドできます。
# Bind a group to Infrastructure Operator (Read Only):
kubectl create clusterrolebinding anthos-platform-operator-read-only-binding \
--clusterrole=view --group=gid-anthos-platform-operator-read-only-group --kubeconfig=${ADMIN_OIDC_KUBECONFIG}
方法 II: ユーザーベースでロール バインディングを作成する
ロール バインディングは、ユーザーロール ベースで作成することもできます。ロール バインディングを作成するコマンドは、グループを使用する場合のコマンドに似ています。--group
は、--user
に置き換える必要があります。
また、すべてのユーザー名に OIDC プロファイルのユーザー接頭辞を追加する必要があります。たとえば、OIDC プロバイダにユーザー接頭辞 uid-
が設定され、joedoe@example.com
をロールにバインドする場合は、uid-joedoe@example.com
を使用します。
[アクセス管理] タブを使用して、ユーザーに対するロール バインディングを管理することもできます。
次のコマンド例では、charlie@example.com のロール バインディングを作成し、プラットフォーム管理者権限を付与します。
kubectl create clusterrolebinding charlie-platform-admin-binding \
--clusterrole=anthos-platform-admin --user=uid-charlie@example.com --kubeconfig=${ADMIN_OIDC_KUBECONFIG}
1 つのロールバインディングを削除して、ユーザーのアクセス権を削除する場合は、削除する代わりに既存のバインディングを更新します(charlie@example.com
のプラットフォーム管理者の権限を取り消すなど)。
kubectl patch clusterrolebinding charlie-platform-admin-binding \
-p '{"subjects":[]}' --kubeconfig=${ADMIN_OIDC_KUBECONFIG}
また、インフラストラクチャ オペレーターに ClusterRoleBinding
の削除を依頼することもできます。
ベスト プラクティス: Kubernetes は、アクセス権が付与されたユーザーが、アクセス権がさらに付与されたユーザーのバインディングの削除を防止しないため、プラットフォーム管理者には ClusterRoleBinding
に対する削除の権限が付与されません。代わりに対応するグループからユーザーを削除できるため、OIDC プロバイダのグループを使用してユーザーを管理することをおすすめします。
注
- 詳細については、公式ドキュメントでロールベースのアクセス制御(RBAC)をご覧ください。
- ユーザー クラスタには、あらかじめ設定された認可ロールはありません。各ユーザー クラスタ アクセス権の Kubernetes API サーバー アクセス権は、kubeconfig を持っているすべてのユーザーが持っています。
- プラットフォーム管理者が、より大きな権限を持つユーザーのバインディングを削除できないようにするためにロール バインディングを削除することはできません。ユーザーのアクセス権を取り消すには、空の件名リストにユーザーをバインドするロール バインディングを更新します。 アクセス管理 UI の削除アクションでは、同じ理由でバインディングを削除する代わりに、空の件名リストへのロール バインディングも更新します。
- ClusterRoleBinding の名前は一意であることが必要です。同じ名前のクラスタのロール バインディングが複数存在する場合は、適用または作成された最新のクラスタのみが有効になります。
各プリセット ロールに対する Kubernetes リソースのアクセス権
このセクションでは、各プリセット ロールに対するすべての Kubernetes リソースのアクセス権について詳しく説明します。
インフラストラクチャ オペレーター
インフラストラクチャ オペレーターは Kubernetes の組み込みの cluster-admin
ロールに対応し、あらゆるリソースに対して任意の動詞を実行できます。
インフラストラクチャ オペレーター(読み取り専用)
インフラストラクチャ オペレーター(読み取り専用)は k8s の組み込みの view
ロールに対応しており、Role
、ClusterRole
、RoleBinding
、ClusterRoleBinding
、Secret
以外のすべてのリソースを読み取りできます。
ユーザー クラスタ kubeconfig などの有用な情報の多くは Secrets
として保存されているため、インフラストラクチャ オペレーター(読み取り専用)は完全には機能していません。
プラットフォーム管理者
プラットフォーム管理者には次のアクセス権を付与できます。
リソース | 動詞 |
---|---|
namespaces | get、list、watch、create、update |
ポッド | get、list、watch |
個のサービス | get、list、watch |
イベント | get、list、watch |
ConfigMap | get、list、watch |
デプロイ | get、list、watch |
DaemonSet | get、list、watch |
ReplicaSet | get、list、watch |
StatefulSet | get、list、watch |
ジョブ | get、list、watch |
CronJob | get、list、watch |
memberships.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
onpremuserclusters.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
clusters.baremetal.cluster.gke.io | get、list、watch、create |
nodepools.baremetal.cluster.gke.io | get、list、watch、create |
clusters.cluster.x-k8s.io | get、list、watch |
machines.baremetal.cluster.gke.io | get、list、watch |
inventorymachines.baremetal.cluster.gke.io | get、list、watch |
addresspools.managementcenter.anthos.cloud.google.com | get、list、watch |
bootstrapservicebindings.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
bootstrapservices.managementcenter.anthos.cloud.google.com | get、list、watch |
bootstrapservicebindingitems.managementcenter.anthos.cloud.google.com | get、list、watch |
adminoperators.managementcenter.anthos.cloud.google.com | get、list、watch |
clientconfigs.authentication.gke.io | get、list、watch、create、update、delete |
configmanagementbindings.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
configmanagementfeaturespecs.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
configmanagementbindingitems.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
servicemeshbindings.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
servicemeshfeaturespecs.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
servicemeshbindingitems.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
identityservicebindings.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
identityservicefeaturespecs.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
identityservicebindingitems.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
updatablecomponents.managementcenter.anthos.cloud.google.com | get、list、watch |
domainidpmappings.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
domainidpmappings.managementcenter.anthos.cloud.google.com | get、list、watch、create、update、delete |
logmons.addons.gke.io | get、list、watch、create、update、delete |
clusterrolebindings.rbac.authorization.k8s.io | get、list、watch、create、update |
プラットフォーム管理者には、ユーザー クラスタに対する cluster-admin
ロールとして認証される kubeconfig を取得できるように、secrets
に対する読み取りアクセス権も付与されます。
プラットフォーム管理者は、Logmon を構成するために、kube-system
で logmon
ラベルが付いた secrets
と configmaps
を読み書きすることもできます。
プラットフォーム管理者(読み取り専用)
プラットフォーム管理者(読み取り専用)には、プラットフォーム管理者と同じアクセス権が付与されますが、次の点が異なります。
- すべての書き込み関連動詞(create、update、delete)は付与されません。
- ユーザー クラスタへのアクセスについて、プラットフォーム管理者(読み取り専用)は、ユーザー クラスタで
view
ロールとして認証された kubeconfig のみを読み取ることができます。