Kubernetes Role-Based Access Control(RBAC)
Rollenbasierte Zugriffskontrolle (RBAC)
Kubernetes verfügt über ein Autorisierungsmodul namens Rollenbasierte Zugriffskontrolle (RBAC), das dabei hilft, Nutzungsrechte für den API-Server festzulegen.
Das Berechtigungsmodell von RBAC setzt sich aus drei einzelnen Teilen zusammen:
Rolle/ClusterRolle – Die tatsächliche Berechtigung. Sie enthält Regeln, die eine Reihe 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 erhalten wird.
RolleBinding/ClusterRolleBinding – Die Verbindung zwischen Rolle/ClusterRolle und dem Subjekt.
![](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)
Der Unterschied zwischen "Rollen" und "ClusterRollen" liegt nur darin, wo die Rolle angewendet wird – eine "Rolle" gewährt Zugriff nur auf einen bestimmten spezifischen Namespace, während eine "ClusterRolle" in allen Namespaces im Cluster verwendet werden kann. Darüber hinaus können ClusterRollen auch Zugriff gewähren auf:
Cluster-weit gültige Ressourcen (wie Knoten).
nicht-Ressourcen Endpunkte (wie /healthz).
Namespaced-Ressourcen (wie Pods), über alle Namespaces hinweg.
Ab Kubernetes 1.6 sind RBAC-Richtlinien standardmäßig aktiviert. Um RBAC zu aktivieren, können Sie etwas Ähnliches verwenden wie:
Vorlagen
In der Vorlage eines Rolle oder eines ClusterRole müssen Sie den Namen der Rolle, den Namespace (in Rollen) und dann die apiGroups, Ressourcen und Verben der Rolle angeben:
Die apiGroups ist ein Array, das die verschiedenen API-Namensräume 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 angewendet wird. Sie können alle Ressourcen mit finden:
kubectl api-resources --namespaced=true
Die Verben ist ein Array, das die erlaubten Verben enthält. Das Verb in Kubernetes definiert die Art der Aktion, die auf die Ressource angewendet werden muss. Zum Beispiel wird das Verb "list" gegen Sammlungen verwendet, während "get" gegen eine einzelne Ressource verwendet wird.
Regeln Verben
(Diese Informationen stammen aus den Dokumenten)
HTTP-Verb | Anforderungsverb |
---|---|
POST | erstellen |
GET, HEAD | get (für einzelne Ressourcen), list (für Sammlungen, einschließlich des vollständigen Objektinhalts), watch (zum Beobachten einer einzelnen Ressource oder einer Sammlung von Ressourcen) |
PUT | aktualisieren |
PATCH | patch |
DELETE | löschen (für einzelne Ressourcen), deletecollection (für Sammlungen) |
Manchmal überprüft Kubernetes die Autorisierung für zusätzliche Berechtigungen unter Verwendung spezialisierter Verben. Zum Beispiel:
use
Verb aufpodsecuritypolicies
Ressourcen in derpolicy
API-Gruppe.bind
undescalate
Verben aufroles
undclusterroles
Ressourcen in derrbac.authorization.k8s.io
API-Gruppe.impersonate
Verb aufBenutzer
,Gruppen
undServicekonten
in der Kern-API-Gruppe und dieuserextras
in derauthentication.k8s.io
API-Gruppe.
Sie können alle Verben, die jede Ressource unterstützt, finden, indem Sie kubectl api-resources --sort-by name -o wide
ausführen
Beispiele
Zum Beispiel können Sie einen ClusterRole verwenden, um einem bestimmten Benutzer das Ausführen zu ermöglichen:
RoleBinding und ClusterRoleBinding
Aus den Dokumenten: Eine Rollenbindung gewährt die in einer Rolle definierten Berechtigungen einem Benutzer oder einer Benutzergruppe. Sie enthält eine Liste von Subjekten (Benutzer, Gruppen oder Dienstkonten) und einen Verweis auf die gewährte Rolle. Eine RoleBinding gewährt Berechtigungen innerhalb eines bestimmten Namespaces, während eine ClusterRoleBinding diesen Zugriff clusterweit gewährt.
Berechtigungen sind additiv, daher können Sie, wenn Sie einen ClusterRole mit "list" und "delete" Secrets haben, diesen mit einer Rolle mit "get" hinzufügen. Seien Sie also vorsichtig und testen Sie immer Ihre Rollen und Berechtigungen und geben Sie an, was ERLAUBT ist, da standardmäßig alles VERWEIGERT wird.
Aufzählung von RBAC
Missbrauch von Rollen/ClusterRoles für Privilege Escalation
Abusing Roles/ClusterRoles in KubernetesLast updated