0Pricing
Cyber Security Academy · レッスン

RBACとサービスアカウント

クラスターへのアクセスを堅牢に保護します。

「RBACとサービスアカウント」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。

RBACがすべてを制御する

ロールベースアクセス制御(RBAC)は、クラスター内のどのアイデンティティが、どのリソースに対して、どの操作を実行できるかを決定します。すべてのAPI呼び出しはRBACに基づいて認可されます。RBACの設定ミスは、クラスター内での権限昇格の主な原因です。

  • サブジェクト:ユーザー、グループ、サービスアカウント。
  • ロールは動詞をリソースにバインドします。
  • バインディングはサブジェクトをロールに関連付けます。

RoleとClusterRoleの違い

スコープには2種類あります。

  • Role + RoleBinding:ネームスペース単位の権限。
  • ClusterRole + ClusterRoleBinding:クラスター全体に及ぶ権限。

cluster-adminへのClusterRoleBindingは、完全な制御権を意味します。サービスアカウントにこれを付与するのは、頻繁に起こる危険なミスです。

サービスアカウントトークン

すべてのPodはサービスアカウントとして実行され、デフォルトではそのトークンがマウントされます。このトークンは、アカウントのRBAC権限を持つベアラー認証情報です。Podが侵害されると、トークンも侵害されます。

最新のクラスターでは、短期有効でオーディエンスにバインドされた投影トークンが発行されますが、従来の長期有効なSecretトークンもまだ残っています。

# Inspect which service account a pod uses
kubectl get pod web -o jsonpath='{.spec.serviceAccountName}'

権限の列挙

トークンを取得したら、最初にそのトークンで何ができるかを確認します。Kubernetesには、権限を自己確認するAPIが用意されています。

# What can this token do?
kubectl auth can-i --list

# Specific checks
kubectl auth can-i create pods
kubectl auth can-i create clusterrolebindings

危険な権限の組み合わせ

特定の動詞は、cluster-adminがなくても権限昇格の手段になります。

  • create pods:特権付きまたはhostPathのPodをスケジュールしてエスケープします。
  • create pods/exec:既存のPod内でコマンドを実行します。
  • get/list secrets:クラスター全体の認証情報を読み取ります。
  • create rolebindings/clusterrolebindings:自分自身をadminにバインドします。
  • escalate / bindの動詞:自分が保持していない権限を付与します。
  • impersonate:別の、より高い権限を持つサブジェクトとして操作します。

Pod作成による権限昇格

サービスアカウントがPodを作成できる場合、そのアカウントがノードを掌握できることも少なくありません。攻撃者は、ホストのファイルシステムをマウントするか特権付きで実行するPodをスケジュールし、ノードの認証情報を読み取るか、エスケープします。

# Pod spec snippet that mounts the host root
# volumes: hostPath path: /  ;  container mounts it at /host
kubectl apply -f evil-pod.yaml
kubectl exec -it evil -- chroot /host bash

Bindingによる権限昇格

(cluster)rolebindingsを作成できる場合、サービスアカウントをcluster-adminに直接バインドできる可能性があります。Kubernetesはこれをbind/escalateの動詞で保護していますが、設定ミスのあるロールでは許可されていることがあります。

# Bind a service account to cluster-admin (if permitted)
kubectl create clusterrolebinding pwn \
  --clusterrole=cluster-admin \
  --serviceaccount=default:web

なりすましの悪用

impersonateの動詞を使うと、サブジェクトは任意のユーザー、グループ、サービスアカウントとして操作できます。広範ななりすまし権限を持つプリンシパルは、事実上クラスター内のすべての権限を持つことになります。

# Act as a privileged user via impersonation
kubectl get secrets --as=admin-user --as-group=system:masters

RBACの監査

防御側は、危険な権限付与がないかRBACを継続的に確認する必要があります。

  • cluster-adminにバインドされたサブジェクトを見つけます。
  • ワイルドカードの動詞やリソース(*)にフラグを立てます。
  • 管理者以外のアカウントに対するsecret-readやpod-createの権限付与を検知します。
# Tools to audit RBAC
kubectl-who-can create pods
rbac-tool analysis
rakkess --as=system:serviceaccount:default:web

サービスアカウントの強化

アイデンティティには最小権限を適用します。

  • PodがAPIにアクセスする必要がない場合は、automountServiceAccountToken: falseを設定します。
  • 各ワークロードに、専用でスコープを最小限にしたサービスアカウントを付与します。
  • 実際のワークロードではdefaultサービスアカウントを避けます。
  • オーディエンス付きの短期有効な投影トークンを使用し、ローテーションしてバインドします。
  • ワークロードをcluster-adminにバインドしてはいけません。

倫理的なRBACテスト

RBACを評価する際は、本番環境で実際にcluster-adminのバインディングを作成するのではなく、非破壊的な確認(auth can-i、dry-run)を優先してください。権限昇格を実証する必要がある場合は、テスト用ネームスペースに限定し、作成したバインディングやPodをすべて削除してください。

権限昇格を可能にした正確なロールとバインディングを報告し、権限を適切に絞り込めるようにします。

クイックチェック

RBACに関する理解度を確認します。

まとめ

RBACとサービスアカウントが、クラスターへのアクセスをどのように管理し、脅威となるかを学びました。

  • RBACはサブジェクトをリソースに対する動詞にバインドし、cluster-adminは完全な制御権を意味します。
  • PodにはSAトークンがマウントされ、auth can-iでその到達範囲を確認できます。
  • create-pods、binding、secret-read、impersonateは権限昇格の手段になります。
  • 最小権限のアカウントと自動マウントの無効化によって、クラスターを強化できます。

次はPodセキュリティとネットワークポリシーです。

よくある質問

「RBACとサービスアカウント」レッスンは無料ですか?

はい。「RBACとサービスアカウント」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。

「RBACとサービスアカウント」で何を学びますか?

クラスターへのアクセスを堅牢に保護します。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cyber Security Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「RBACとサービスアカウント」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCyber Security Academyレッスンでコードを書いて実行できますか?

はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Kubernetesの脅威モデル
  2. RBACとサービスアカウント
  3. Podセキュリティとネットワークポリシー
  4. サプライチェーンとシークレットの保護
← Cyber Security Academyに戻る