認可ロールを構成する

このページは、インフラストラクチャ オペレーターを対象としています。

このページでは、Anthos プライベート モードの認証ロール、ロール バインディング、リソース アクセス権について説明します。

認可ロール

Anthos プライベート モードには、次の 4 つの認可ロールが備わっています。

役割名 Kubernetes ClusterRole (管理クラスタ) 権限
インフラストラクチャ オペレーター anthos-infrastructure-operator 全リソースに対する完全な読み取り / 書き込みアクセス権。
インフラストラクチャ オペレーター(読み取り専用) anthos-infrastructure-operator-read-only Anthos Management Center と ClusterRole/Role、ClusterRole/Role のバインディングのすべてに対する読み取り専用アクセス権と、Secret に対する制限付きの読み取りアクセス権。

ユーザーは 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} は管理クラスタの kubeconfig ファイルのパスです。

ADMIN_KUBECONFIG を使用したアクセスは、一般的なユーザー名 admin として認証されるため、コマンドを実行するユーザーを追跡しにくくなります。そのため、ADMIN_KUBECONFIG は、安全な場所に保管して必要なときにのみ(最初のプラットフォーム管理者のロールバインディングを設定する場合や、OIDC 障害から回復する場合など)使用することが重要です。

管理センターと指標へのアクセス

Anthos プライベート モードでは、これらの 4 つのロールにバインドされているユーザーは、Management Center と指標(Grafana)へのアクセス許可リストに自動的に反映されます。

読み取り専用アクセス権限を含むロールでは、Management Center で書き込み操作を行うと拒否されます。

ロール バインディング

Management Center Console で OIDC を設定するときに、プラットフォーム管理者ロールにバインドされた初期ユーザーを設定できます。Platform Engine の最初の管理者ユーザーの kubeconfig にログインして、プラットフォーム管理者のロールに別のユーザーをバインドする方法は 2 つあります。

(推奨)OIDC プロバイダでグループ メンバーを設定し、グループベースでロール バインディングを作成する

この方法では、グループの 1 つがプリセット ロールにバインドされ、グループ内のすべてのメンバーにプリセット ロールと同じアクセス権が付与されます。

始める前に

開始する前に次の点を確認してください。

  • グループの送信元の OIDC プロバイダを特定します。
  • [OIDC プロファイル] タブの [グループ クレーム] フィールドは、OIDC プロバイダ側のグループ メンバー情報を含むクレームの名前と同じである必要があります。Anthos プライベート モードでは、このフィールドにデフォルト値の groups が適用されますが、OIDC プロバイダに別の値がある場合は、[OIDC プロファイル] タブで設定していることを確認してください。
  • [OIDC プロファイル] タブの [グループ プレフィックス] をメモしておきます。すべてのグループ名の前にグループ プレフィックスを付ける必要があります。たとえば、OIDC プロバイダにグループ プレフィックスとして gid- とグループ「admin-group」がある場合は、gid-admin-group を使用する必要があります。- 区切り文字はグループ プレフィックスの一部であり、システムによって区切り文字は追加されません。

Management Center Console を使用してバインディングを管理する

Management Center Console の [アクセス] タブで、グループに基づいてロール バインディングを管理できます。 クラスタ作成時に ID プロファイルを適用する

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

kubectl を使用してバインディングを管理する

または、次のコマンドを実行して、グループに基づいてロール バインディングを作成します。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=anthos-infrastructure-operator --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=anthos-infrastructure-operator-read-only --group=gid-anthos-platform-operator-read-only-group --kubeconfig=${ADMIN_OIDC_KUBECONFIG}

ユーザーベースでロール バインディングを作成する

ロール バインディングは、ユーザーロール ベースで作成することもできます。ロール バインディングを作成するコマンドは、グループを使用する場合のコマンドに似ています。--group--user に置き換えます。

また、すべてのユーザー名に OIDC プロファイルのユーザー接頭辞を追加する必要があります。たとえば、OIDC プロバイダにユーザー接頭辞 uid- が設定され、joedoe@example.com をロールにバインドする場合は、uid-joedoe@example.com を使用します。

Management Center Console の [アクセス] タブで、ユーザーのロール バインディングを管理できます。

以下は、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 の削除を依頼することもできます。

  • 認証の詳細については、RBAC 認証の使用をご覧ください。
  • ユーザー クラスタに事前設定された認可ロールは設定されていません。各ユーザー クラスタ アクセス権の Kubernetes API サーバー アクセス権は、kubeconfig を持っているすべてのユーザーが持っています。
  • プラットフォーム管理者が、より大きな権限を持つユーザーのバインディングを削除できないようにするためにロール バインディングを削除することはできません。ユーザーのアクセス権を取り消すには、空の件名リストにユーザーをバインドするロール バインディングを更新します。Management Center Console の [ID とアクセス] ページにある削除アクションでは、同じ理由でバインディングを削除する代わりに、空の件名リストへのロール バインディングも更新します。
  • ClusterRoleBinding リソースの名前は一意である必要があります。同じ名前を持つクラスタロール バインディングが複数存在する場合は、適用または作成された最新のバインディングのみが有効になります。

各プリセット ロールに対する Kubernetes リソースのアクセス権

このセクションでは、各プリセット ロールに対するすべての Kubernetes リソースのアクセス権について詳しく説明します。

インフラストラクチャ オペレーター

インフラストラクチャ オペレーターのロールは、任意のリソースで任意の動詞を実行できる Kubernetes anthos-infrastructure-operator ロールに対応します。

インフラストラクチャ オペレーター(読み取り専用)

インフラストラクチャ オペレーター(読み取り専用)ロールは、Kubernetes の anthos-infrastructure-operator-read-only ロールに対応し、ここに記載されている ApiGroup 内のすべてのリソースを、Secret に対する制限付きの読み取りアクセス権で読み取ることができます。Secret に対する読み取りアクセス権は、ロギングとモニタリングのために、管理クラスタのアクセス トークン、ユーザー クラスタの kubeconfig、kube-system 内の logmon ラベルを持つ Secret に限定されます。

ApiGroup リソース 動詞
"" ConfigMap get、list、watch
"" endpoints get、list、watch
"" persistentvolumeclaims get、list、watch
"" persistentvolumeclaims/status get、list、watch
"" ポッド get、list、watch
"" replicationcontrollers get、list、watch
"" replicationcontrollers/scale get、list、watch
"" serviceaccounts get、list、watch
"" 個のサービス get、list、watch
"" services/status get、list、watch
"" バインディング get、list、watch
"" イベント get、list、watch
"" limitranges get、list、watch
"" namespaces/status get、list、watch
"" pods/log get、list、watch
"" pods/status get、list、watch
"" replicationcontrollers/status get、list、watch
"" resourcequotas get、list、watch
"" resourcequotas/status get、list、watch
"" namespaces get、list、watch
アプリ * get、list、watch
自動スケーリング * get、list、watch
バッチ * get、list、watch
cert-manager.io * get、list、watch
extensions * get、list、watch
metrics.k8s.io * get、list、watch
networking.k8s.io * get、list、watch
ポリシー * get、list、watch
rbac.authorization.k8s.io * get、list、watch
addons.gke.io * get、list、watch
authentication.gke.io * get、list、watch
baremetal.cluster.gke.io * get、list、watch
cluster.x-k8s.io * get、list、watch
managementcenter.anthos.cloud.google.com * get、list、watch

プラットフォーム管理者

プラットフォーム管理者ロールには、以下のアクセス権があります。

リソース 動詞
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
domainconfigs.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 に対する読み取りアクセス権が付与されます。

プラットフォーム管理者は、kube-systemlogmon ラベル付きの secretsconfigmaps を読み書きして、Logmon を構成できます。

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

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

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