Kubernetes Learning 第29章:RBACの基礎とロール設計 〜「誰が、何を、どこで」できるのかを制御する〜

Kubernetesでは、クラスタのリソースに対するアクセス制御を行う仕組みとして RBAC(Role-Based Access Control) が用意されています。
これは文字通り「ロールに基づいたアクセス制御」で、「誰が」「何を」「どこで」できるのか を明確に設定できます。


✅ なぜRBACが必要なの?

Kubernetesクラスターでは、多くのリソース(Pod、Service、Secretなど)と、多くのユーザー(開発者、CI/CDツール、管理者など)が存在します。
そのため、全員にフルアクセスを許してしまうと事故やセキュリティリスクが増大します。

RBACを使うことで:

  • 特定のユーザーに「Podの参照だけ許可」などの制限ができる
  • チームごとにアクセス範囲を分離できる
  • 最小権限の原則(必要な権限だけ与える)を実現できる

🧩 RBACの基本構成

RBACでは主に以下の4つのリソースが登場します:

リソース役割
Role / ClusterRoleどんな操作を許可するか(例: Podの取得)
RoleBinding / ClusterRoleBinding誰にそのロールを割り当てるか

簡単に言うと:

  • RoleNamespace単位 の権限
  • ClusterRoleクラスタ全体 にまたがる権限
  • RoleBinding / ClusterRoleBindingユーザー(またはServiceAccount)にロールを紐づけます

🧪 例:特定Namespace内でPodの一覧取得だけ許可する

# Roleの定義
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: dev-team
  name: pod-reader
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list"]
# RoleBindingの定義
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods-binding
  namespace: dev-team
subjects:
  - kind: User
    name: "alice"
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

この例では:

  • alice というユーザーは dev-team 名前空間の Pod に対して get / list ができます
  • 他のリソース(Secretなど)や他のNamespaceにはアクセスできません

🛡 ロール設計のポイント

  1. 最小権限の原則を意識する
    → 必要最小限の verbsresources を許可
  2. Namespaceごとの分離
    → チームごとに Role/RoleBinding を分けると管理しやすい
  3. ClusterRole は慎重に
    ClusterRole は強力なので、基本的には管理者やCI/CDに限定する
  4. ServiceAccount にバインドすることで、アプリに権限を与える
    → 人だけでなく、アプリ(Pod)にも認証・認可が必要な場面で使う

💡 よくあるユースケース

ユースケース使用するリソース
チームごとに Namespace 内リソースを操作可能にするRole + RoleBinding
CI/CDツールにクラスタ全体のデプロイ権限を与えるClusterRole + ClusterRoleBinding
Pod に読み取り専用のSecretアクセスを許可Role + RoleBindingServiceAccount に紐付け

📌 RBAC設定の確認方法

# あるユーザーが Pod の get 権限を持っているか確認
kubectl auth can-i get pods --as alice --namespace dev-team

🔚 まとめ

RBACはKubernetesにおけるアクセス制御の中核であり、安全な運用には欠かせません。

  • ロール(Role / ClusterRole)で「何ができるか」を定義し、
  • バインディング(RoleBinding / ClusterRoleBinding)で「誰が使うか」を紐づけます。

mh

Related Posts

Kubernetes Learning 第30章:NetworkPolicyの使い方 〜Pod間通信を制御するセキュリティの要〜

Kubernetes Learning 第28章:Fluentd / Loki などのロギングスタック 〜Kubernetesログの集約と可視化〜

You Missed

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第4章:課金と料金モデル、予算とアラート:GCPの「お財布」管理術

  • 投稿者 mh
  • 6月 3, 2025
  • 4 views

Kubernetes Learning 第30章:NetworkPolicyの使い方 〜Pod間通信を制御するセキュリティの要〜

  • 投稿者 mh
  • 6月 3, 2025
  • 4 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第3章:IAM(Identity and Access Management):GCPの「誰が」「何に」「何ができるか」を管理する門番

  • 投稿者 mh
  • 6月 2, 2025
  • 15 views

現場で使えるChrome DevTools実践ガイド 第9章:Applicationパネルとストレージの確認

  • 投稿者 mh
  • 6月 2, 2025
  • 10 views

Kubernetes Learning 第29章:RBACの基礎とロール設計 〜「誰が、何を、どこで」できるのかを制御する〜

  • 投稿者 mh
  • 6月 2, 2025
  • 13 views

Android application development 第33章:実践ミニアプリ:天気情報アプリ

  • 投稿者 mh
  • 6月 2, 2025
  • 12 views