Kubernetes Role-Based Access Control(RBAC)
AWSハッキングの学習と練習:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングの学習と練習:
HackTricks Training GCP Red Team Expert (GRTE)
ロールベースアクセス制御(RBAC)
Kubernetesには、APIサーバーへの利用権限を設定するのに役立つロールベースアクセス制御(RBAC)という認可モジュールがあります。
RBACの権限モデルは3つの個々の部分から構築されています:
Subject(ユーザー、グループ、またはServiceAccount) – 権限を受け取るオブジェクト。
RoleBinding\ClusterRoleBinding – Role\ClusterRoleとSubjectの接続。
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fwww.cyberark.com%2Fwp-content%2Fuploads%2F2018%2F12%2Frolebiding_serviceaccount_and_role-1024x551.png&width=768&dpr=4&quality=100&sign=8a74ea80&sv=1)
「Roles」と「ClusterRoles」の違いは、ロールが適用される場所だけです – 「Role」は1つの特定のネームスペースへのアクセスを許可しますが、「ClusterRole」はクラスター内のすべてのネームスペースで使用できます。さらに、ClusterRolesは以下にアクセスを許可することもできます:
クラスタースコープのリソース(ノードなど)。
非リソースエンドポイント(/healthzなど)。
ネームスペースリソース(Podなど)、すべてのネームスペースをまたいで。
Kubernetes 1.6以降、RBACポリシーはデフォルトで有効になっています。ただし、RBACを有効にするには次のようなものを使用できます:
テンプレート
RoleまたはClusterRoleのテンプレートでは、ロールの名前、名前空間(ロールの場合)、そしてロールのapiGroups、リソース、動詞を指定する必要があります:
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
動詞を使用します。core
APIグループ内のusers
、groups
、serviceaccounts
およびauthentication.k8s.io
APIグループ内のuserextras
でimpersonate
動詞を使用します。
各リソースがサポートするすべての動詞を見つけるには、kubectl api-resources --sort-by name -o wide
を実行できます。
例
たとえば、特定のユーザーが実行するのを許可するために ClusterRole を使用できます:
RoleBindingとClusterRoleBinding
ドキュメントから: RoleBindingは、ユーザーまたはユーザーのセットに定義された権限を付与します。それはサブジェクト(ユーザー、グループ、またはサービスアカウント)のリストと、付与される役割への参照を保持します。RoleBindingは特定の名前空間内で権限を付与し、ClusterRoleBindingはそのアクセスをクラスタ全体に付与します。
アクセス許可は追加されますので、"list"と"delete"のシークレットを持つclusterRoleがある場合、それを"get"を持つRoleと組み合わせることができます。したがって、常に役割とアクセス許可をテストし、何が許可されているかを明確に指定してください。なぜなら、デフォルトではすべてが拒否されているからです。
RBACの列挙
特権昇格のための役割/ClusterRolesの乱用
Abusing Roles/ClusterRoles in KubernetesAWSハッキングの学習と実践:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングの学習と実践:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated