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 hat ein Autorisierungsmodul namens Role-Based Access Control (RBAC), das hilft, Berechtigungen für den API-Server festzulegen.
Das Berechtigungsmodell von RBAC besteht aus drei einzelnen Teilen:
Role\ClusterRole – Die tatsächliche Berechtigung. Sie enthält Regeln, die eine Menge von Berechtigungen darstellen. Jede Regel enthält Ressourcen und Verben. Das Verb ist die Aktion, die auf die Ressource angewendet wird.
Subjekt (Benutzer, Gruppe oder ServiceAccount) – Das Objekt, das die Berechtigungen erhält.
RoleBinding\ClusterRoleBinding – Die Verbindung zwischen Role\ClusterRole und dem Subjekt.
Der Unterschied zwischen “Roles” und “ClusterRoles” liegt nur darin, wo die Rolle angewendet wird – eine “Role” gewährt Zugriff auf nur ein bestimmtes Namespace, während eine “ClusterRole” in allen Namespaces im Cluster verwendet werden kann. Darüber hinaus können ClusterRoles auch Zugriff auf gewähren:
cluster-scoped Ressourcen (wie Knoten).
non-resource Endpunkte (wie /healthz).
namespaced Ressourcen (wie Pods), über alle Namespaces hinweg.
Seit Kubernetes 1.6 sind RBAC-Richtlinien standardmäßig aktiviert. Um RBAC zu aktivieren, können Sie etwas wie verwenden:
Im Template eines Role oder ClusterRole müssen Sie den Namen der Rolle, den Namespace (bei Rollen) und dann die apiGroups, Ressourcen und Verben der Rolle angeben:
Die apiGroups ist ein Array, das die verschiedenen API-Namespaces enthält, auf die diese Regel zutrifft. Zum Beispiel verwendet eine Pod-Definition apiVersion: v1. Es kann Werte wie rbac.authorization.k8s.io oder [*] haben.
Die Ressourcen ist ein Array, das definiert, auf welche Ressourcen diese Regel zutrifft. Sie können alle Ressourcen mit: kubectl api-resources --namespaced=true
finden.
Die Verben ist ein Array, das die erlaubten Verben enthält. Das Verb in Kubernetes definiert die Art der Aktion, die Sie auf die Ressource anwenden müssen. Zum Beispiel wird das List-Verben gegen Sammlungen verwendet, während "get" gegen eine einzelne Ressource verwendet wird.
(Diese Informationen stammen aus den Docs)
Kubernetes überprüft manchmal die Autorisierung für zusätzliche Berechtigungen mit spezialisierten Verben. Zum Beispiel:
use
Verb auf podsecuritypolicies
Ressourcen in der policy
API-Gruppe.
bind
und escalate
Verben auf roles
und clusterroles
Ressourcen in der rbac.authorization.k8s.io
API-Gruppe.
impersonate
Verb auf users
, groups
und serviceaccounts
in der Kern-API-Gruppe und die userextras
in der authentication.k8s.io
API-Gruppe.
Sie können alle Verben, die jede Ressource unterstützt, ausführen, indem Sie kubectl api-resources --sort-by name -o wide
ausführen.
Zum Beispiel können Sie ein ClusterRole verwenden, um einem bestimmten Benutzer zu erlauben, Folgendes auszuführen:
Aus den Dokumenten: Ein Role Binding gewährt die in einer Rolle definierten Berechtigungen an einen Benutzer oder eine Gruppe von Benutzern. Es enthält eine Liste von Subjekten (Benutzern, Gruppen oder Dienstkonten) und einen Verweis auf die zu gewährende Rolle. Ein RoleBinding gewährt Berechtigungen innerhalb eines bestimmten Namespaces, während ein ClusterRoleBinding diesen Zugriff clusterweit gewährt.
Berechtigungen sind additiv, sodass Sie ein clusterRole mit „list“ und „delete“ Secrets haben können, das Sie mit einer Role mit „get“ hinzufügen können. Seien Sie sich dessen bewusst und testen Sie immer Ihre Rollen und Berechtigungen und geben Sie an, was ERLAUBT ist, denn alles ist standardmäßig VERWEIGERT.
HTTP-Verb | Anfrage-Verb |
---|---|
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)