このページは、インフラストラクチャ オペレーターを対象としています。
このページでは、切断モードで実行される 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-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 の [アクセス] タブで、グループに基づいてロール バインディングを管理できます。
現在ログインしているアカウントよりも多くの権限を持つロールにバインディングを追加または更新することはできません。たとえば、プラットフォーム管理者としてログインしている場合、グループをインフラストラクチャ オペレーター ロールにバインドすることはできません。
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 |
apiextensions.k8s.io | customresourcedefinitions | 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 |
customresourcedefinitions.apiextensions.k8s.io | get、list、watch |
プラットフォーム管理者には、ユーザー クラスタに対する cluster-admin
ロールとして認証される kubeconfig を取得できるように、secrets
に対する読み取りアクセス権が付与されます。
プラットフォーム管理者は、kube-system
で logmon
ラベル付きの secrets
と configmaps
を読み書きして、Logmon を構成できます。
プラットフォーム管理者(読み取り専用)
プラットフォーム管理者(読み取り専用)ロールには、プラットフォーム管理者と同じアクセス権が付与されますが、次の点が異なります。
- すべての書き込み関連動詞(create、update、delete)は付与されません。
- ユーザー クラスタへのアクセスについて、プラットフォーム管理者(読み取り専用)は、ユーザー クラスタで
view
ロールとして認証された kubeconfig のみを読み取ることができます。
次のステップ
- ユーザー クラスタの ID とセキュリティを構成する。
- Keycloak または Google SSO による認証について確認する。