メニュー
資料請求 お問い合わせ
2026-04-212026-04-21

OpenShiftの権限管理をわかりやすく 第3回 ClusterRoleBindingでAdminロールを付与したユーザの権限

こんにちは、SCSKの石川です。

前回は、特定のプロジェクト内での「Admin」権限を確認しました。今回は、OpenShiftの権限付与の仕組みである RoleBinding(特定プロジェクトのみ)と ClusterRoleBinding(クラスタ全体)の違いに焦点を当てます。もし、Adminロールを ClusterRoleBinding を使ってユーザに付与すると、そのユーザはどのような権限を持つことになるのでしょうか。

シリーズ予定

  • 第1回:作成直後のユーザの権限

  • 第2回:Adminロールの権限 

  • 3回:ClusterRoleBindingAdminロールを付与したユーザの権限 (本記事)

  • 4回:Cluster-AdminロールをRoleBindingClusterRoleBindingで付与した時の違い

  • 5回:カスタムロール作成のコツと注意点

  • 6回:各チームへの適切な権限付与

  • 7回:権限管理の継続的な見直し

1.ClusterRoleBindingとは

通常、権限付与には RoleBinding を使用します。「誰が」「どのプロジェクトで」権限を持つかを紐づけるものです。
それに対して ClusterRoleBinding は、「誰が」「クラスタ全体で(すべてのプロジェクトで)」権限を持つかを定義します。

2.ユーザにAdminロールをClusterRoleBindingで付与する

検証用ユーザ ocpadmin01 を作成し、Adminロールをクラスタ全体に対して付与します。
※この操作には cluster-admin 権限が必要です。

# ユーザ作成
$ oc create user ocpadmin01
user.user.openshift.io/ocpadmin01 created

# ClusterRoleBindingの作成
$ oc adm policy add-cluster-role-to-user admin ocpadmin01
clusterrole.rbac.authorization.k8s.io/admin added: "ocpadmin01"

add-role-to-user ではなく、add-cluster-role-to-user コマンドを使用している点に注目してください。

3.既存の全プロジェクトへのアクセス確認

ocpadmin01 ユーザでログインし、自分が作成していないプロジェクトへのアクセスを試みます。

# ログイン
$ oc login -u ocpadmin01
Console URL: https://api.xxx...
Authentication required for https://api.xxx... (openshift)
Username: ocpadmin01
Password:
Login successful.

You have access to 83 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "ocp-prj01".

# プロジェクト一覧の取得
$ oc projects
 (全プロジェクトが表示されます)
# 他人のプロジェクトのリソース操作
$ oc get pods -n openshift-console
(Pod一覧が表示されます)

$ oc delete pod <pod-name> -n openshift-console
(削除成功)

本来アクセスできないはずの openshift-console プロジェクトなどのシステムプロジェクトに対しても、Admin権限(作成・削除・更新)を行使できることが確認できました。

4.新規作成されたプロジェクトへのアクセス確認

この権限の強力な点は、「将来作成されるプロジェクト」にも自動的に適用されることです。
別の管理者ユーザで新しいプロジェクト future-project を作成した後、ocpadmin01 からアクセスしてみます。

# (別端末)プロジェクト作成
$ oc new-project future-project
  ...

# (検証ユーザ)アクセス確認
$ oc get pods -n future-project
No resources found in future-project namespace. (アクセス可能)

5.クラスタスコープリソース(Node, PV)へのアクセス確認

では、このユーザは「OpenShift管理者(cluster-admin)」と同じなのでしょうか。
ノード情報の取得を試みます。

# ノード情報の取得
$ oc get nodes
Error from server (Forbidden): nodes is forbidden: User "ocpadmin01" cannot list resource "nodes" in API group "" at the cluster scope

失敗しました。ここが非常に重要なポイントです。
Adminロールをクラスタワイドで付与しても、Adminロール自体の定義(PodやServiceの操作権限)が変わるわけではありません。
Adminロールには「Nodeを参照する」という権限が含まれていないため、たとえ全プロジェクトに適用されたとしても、プロジェクト外のリソースであるNodeやPersistentVolume(PV)は操作できません。

6.アクセス権限が強力であることへの注意

「Nodeが見えないなら安全か」というと、そうではありません。
このユーザは、openshift- で始まるシステム上重要なプロジェクト内のリソースも自由に削除・変更できます。誤って重要なPodやSecretを削除すれば、クラスタ障害を引き起こす可能性があります。

また、「Nodeのリソースが見えない」=「ノードの管理ができない」 という点も重要です。例えば、ノードのスケジュール設定(Cordon/Uncordon)や、ノードごとのログ調査などは、この ocpadmin01 権限では実施できません。あくまで「アプリケーション運用者」としての全能であり、「インフラエンジニア」としての全能ではありません。

7.まとめ

AdminロールをClusterRoleBindingで付与するということは、「全プロジェクトの管理者(Project Admin for All)」になることであり、「プラットフォーム管理者(Platform Admin)」になることとは異なります。

  • できること: 既存および将来の全プロジェクト(openshift-xxxなども含む)内でのリソース操作、RoleBinding管理。
  • できないこと: ノード操作、PV作成、CRD作成、ResourceQuota変更(前回同様)。

運用チームのメンバーであっても、安易にこの権限を付与するのではなく、必要なプロジェクトに対してのみRoleBindingを行うか、後述するカスタムロールの検討を推奨します。

次回は、cluster-adminをRoleBindingとClusterRoleBindingで付与した時の違い整理します。

xポスト ブックマークブックマーク lineLINE
一覧へ戻る

関連する記事

CONTACT

ご相談・お問い合わせ

NebulaShift®は、
柔軟でスピーディなアジャイル開発、システムの刷新、
そして先進的なインフラ運用を通じて、
貴社の可能性を無限に広げます。