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 bashBindingによる権限昇格
(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:mastersRBACの監査
防御側は、危険な権限付与がないか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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Kubernetesの脅威モデル
- RBACとサービスアカウント
- Podセキュリティとネットワークポリシー
- サプライチェーンとシークレットの保護