Kubernetes Role-Based Access Control(RBAC)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kubernetesには、APIサーバーへの利用権限を設定するのに役立つRole-Based Access Control(RBAC)という認可モジュールがあります。
RBACの権限モデルは、3つの個別の部分から構成されています:
Subject (ユーザー、グループ、またはサービスアカウント) – 権限を受け取るオブジェクト。
RoleBinding\ClusterRoleBinding – Role\ClusterRoleとサブジェクトの接続。
「Roles」と「ClusterRoles」の違いは、役割が適用される場所だけです – 「Role」は1つの特定のnamespaceにのみアクセスを付与しますが、「ClusterRole」はクラスター内のすべてのnamespaceで使用できます。さらに、ClusterRolesは以下にもアクセスを付与できます:
クラスター範囲のリソース(ノードなど)。
非リソースエンドポイント(/healthzなど)。
すべてのnamespaceにわたる名前空間リソース(ポッドなど)。
Kubernetes 1.6以降、RBACポリシーはデフォルトで有効になっています。しかし、RBACを有効にするには、次のようなものを使用できます:
Role または ClusterRole のテンプレートでは、ロールの名前、ネームスペース(ロールの場合)、そして apiGroups、resources、verbs を示す必要があります:
apiGroups は、このルールが適用される異なる API ネームスペース を含む配列です。例えば、Pod 定義は apiVersion: v1 を使用します。rbac.authorization.k8s.io や [*] などの値を持つことができます。
resources は、このルールが適用される リソースを定義する 配列です。すべてのリソースは次のコマンドで見つけることができます: kubectl api-resources --namespaced=true
verbs は、許可された動詞 を含む配列です。Kubernetes の動詞は、リソースに適用する必要がある アクションの種類 を定義します。例えば、list 動詞はコレクションに対して使用され、一方で "get" は単一のリソースに対して使用されます。
(この情報は ドキュメント から取得されました)
HTTP 動詞 | リクエスト動詞 |
---|---|
POST | create |
GET, HEAD | get(個々のリソース用)、list(コレクション用、完全なオブジェクトコンテンツを含む)、watch(個々のリソースまたはリソースのコレクションを監視するため) |
PUT | update |
PATCH | patch |
DELETE | delete(個々のリソース用)、deletecollection(コレクション用) |
Kubernetes は、特定の動詞を使用して追加の権限の認可を確認することがあります。例えば:
policy
API グループの podsecuritypolicies
リソースに対する use
動詞。
rbac.authorization.k8s.io
API グループの roles
および clusterroles
リソースに対する bind
および escalate
動詞。
コア API グループの users
、groups
、および serviceaccounts
に対する impersonate
動詞、そして authentication.k8s.io
API グループの userextras
。
各リソースがサポートするすべての動詞 は、kubectl api-resources --sort-by name -o wide
を実行することで見つけることができます。
例えば、特定のユーザーが次の操作を実行できるようにするために、ClusterRoleを使用できます:
ドキュメントから: ロールバインディングは、ロールで定義された権限をユーザーまたはユーザーのセットに付与します。これは、主題(ユーザー、グループ、またはサービスアカウント)のリストと、付与されるロールへの参照を保持します。RoleBindingは特定のnamespace内で権限を付与しますが、ClusterRoleBindingはそのアクセスをクラスター全体に付与します。
権限は加算される ので、もしあなたが「リスト」と「削除」のシークレットを持つ clusterRole を持っている場合、「取得」を持つ Role を追加できます。したがって、常にあなたのロールと権限をテストし、許可されているものを明確に指定してください。デフォルトではすべてが拒否されます。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)