認可ロールを構成する

認可ロール

Anthos プライベート モードには、次の 4 つの認可ロールがあらかじめ設定されています。

ロール名 Kubernetes ClusterRole (管理クラスタ) 権限
インフラストラクチャ オペレーター cluster-admin 全リソースに対する完全な読み取り / 書き込みアクセス権。
インフラストラクチャ オペレーター(読み取り専用) 表示 Management Center におけるほとんどのものに対する読み取り専用アクセス権(ロール、ロール バインディング、シークレットは除く)。

現在、ユーザーは Grafana への書き込みアクセス権を持ち、ダッシュボードを編集できます。

プラットフォーム管理者 anthos-platform-admin
  • ユーザー クラスタ、Anthos 機能管理、Anthos Identity Service、Anthos Config Management に対する読み取り / 書き込みアクセス権。
  • マシンに対する読み取り / 削除アクセス権。
  • Bootstrap Service に対する読み取り専用アクセス権。
プラットフォーム管理者

(読み取り専用)

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 つあります。

この方法では、グループの 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 の [アクセス管理] タブを使用すると、グループに基づいてロール バインディングを管理できます。クラスタ作成時に ID プロファイルを適用する

現在ログインしているアカウントよりも多くの権限を持つロールにバインディングを追加または更新することはできません。たとえば、プラットフォーム管理者としてログインしている場合、グループをインフラストラクチャ オペレーター ロールにバインドすることはできません。

別の方法では、次のコマンドを実行して、グループに基づいてロール バインディングを作成します。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 ロールに対応しており、RoleClusterRoleRoleBindingClusterRoleBindingSecret 以外のすべてのリソースを読み取りできます。

ユーザー クラスタ 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-systemlogmon ラベルが付いた secretsconfigmaps を読み書きすることもできます。

プラットフォーム管理者(読み取り専用)

プラットフォーム管理者(読み取り専用)には、プラットフォーム管理者と同じアクセス権が付与されますが、次の点が異なります。

  • すべての書き込み関連動詞(create、update、delete)は付与されません。
  • ユーザー クラスタへのアクセスについて、プラットフォーム管理者(読み取り専用)は、ユーザー クラスタで view ロールとして認証された kubeconfig のみを読み取ることができます。