【入門編】 Kubernetes API ServerのRBAC最小権限原則とServiceAccountトークン管理 – インフラ・ネットワーク & クラウドセキュリティ防御ガイド

こんにちは。現場で泥臭いインシデント対応を繰り返していると、「完璧な城壁なんて存在しない」という事実に突き当たります。でも、だからこそ「泥棒が一番嫌がる家」を作ることはできる。今日は、そんなお話をしましょう。

Kubernetes(K8s)という巨大な城を管理する際、「API Server」という門番の守りを固める話です。

—

1. 家の鍵を全員に配っていませんか?

想像してみてください。あなたは巨大なマンションの管理人です。全住人に「マンション中のあらゆる部屋に入れるマスターキー」を配っていたらどうなるでしょう? 一人でもうっかり鍵を落としたら、マンション全体が泥棒の遊び場になってしまいますよね。

Kubernetesにおける「RBAC(Role-Based Access Control)」と「ServiceAccount(サービスアカウント)」は、まさにこの「鍵の管理」です。

本来、アプリケーションには「自分の部屋(特定のNamespace)だけ掃除できればいい」という権限があれば十分です。しかし、設定をサボると、全能のマスターキーをアプリに渡してしまっているケースが後を絶ちません。これが攻撃者にとっての「一番の狙い目」なんです。

—

2. 攻撃者はどうやって「鍵」を盗むのか

攻撃者は、あなたの作ったWebアプリに小さな穴(脆弱性)を見つけると、そこから侵入します。そして、ポッド(アプリが動くコンテナ)の中に置かれている「自動マウントされたトークン」を盗み出します。

このトークンこそが「マンションの鍵」です。もしこの鍵に「クラスタ全体の情報を読み取る」なんて権限がついていたら、攻撃者は一瞬であなたのインフラの地図を手に入れ、データベースや他の機密情報を探し始めます。

—

3. 「最小権限」という最強の防犯対策

では、どう守ればいいのか? 答えはシンプルです。「必要最小限の権限しか与えないこと」。

ステップ1:不要なトークンの自動マウントをオフにする

Kubernetesは親切心から、すべてのポッドにAPIを叩ける鍵を勝手に渡してしまいます。これ、実はほとんどのアプリには不要なんです。まずはこれを止めましょう。

# deployment.yaml の例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  template:
    spec:
      # トークンの自動マウントを明示的に無効化する
      automountServiceAccountToken: false
      containers:
        - name: my-app-container
          image: my-app:latest

これだけで、攻撃者がコンテナに侵入しても「手ぶら」の状態を作れます。泥棒が家に入っても、金庫はおろかタンスの中身すら見つけられない状態にする、最高の手口ですね。

ステップ2:必要な権限だけを「Role」で定義する

どうしてもAPI Serverと話す必要があるアプリには、マスターキーではなく「特定の部屋の鍵」を渡します。

# 読み取り専用権限を定義する例
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # コアAPIグループ
  resources: ["pods"] # ポッドの情報だけ
  verbs: ["get", "list"] # 読み取りだけ許可

このように、verbs(何ができるか)を細かく制限することで、万が一鍵が盗まれても被害を最小限に食い止められます。

—

4. 現場からのアドバイス:定期的な「棚卸し」を

セキュリティ対策に「一度設定したら終わり」はありません。時間が経つと、開発の都合で権限がどんどん大きくなっていく「権限肥大化」が起こります。

  • kubectl get clusterrolebindings を叩いて、cluster-admin(最強の権限)を持っている人が多すぎないか確認する。
  • 「本当にこのアプリはAPI Serverと話す必要があるのか?」と自分に問いかける。

これらを習慣にするだけで、あなたのクラスタの堅牢性は劇的に向上します。

—

最後に:完璧を目指さず、強固を目指そう

セキュリティは「ゼロか百か」ではありません。「いかに攻撃者のコストを上げさせるか」というゲームです。鍵をかけ、不要な扉を塞ぎ、見張りを立てる。当たり前のことを一つずつ積み重ねるだけで、あなたのクラスタは攻撃者にとって「割に合わない、面倒な標的」になります。

まずは今日、あなたのポッドの automountServiceAccountToken がどうなっているか、確認することから始めてみませんか?

一歩ずつ、一緒に強固な城を築いていきましょう!

コメント

タイトルとURLをコピーしました