Role-Based Access Control (RBAC) ist ein Sicherheitsmodell, das den Zugriff auf Ressourcen basierend auf den Rollen der Benutzer in einem System steuert. In Kubernetes wird RBAC verwendet, um den Zugriff auf Kubernetes-APIs und Ressourcen zu verwalten. RBAC ermöglicht es Administratoren, Berechtigungen granular zu definieren und sicherzustellen, dass Benutzer nur auf die Ressourcen zugreifen können, die sie benötigen.
In Kubernetes besteht das RBAC-System aus vier Hauptkomponenten:
Role: Eine Role definiert eine Reihe von
Berechtigungen innerhalb eines Namespaces. Sie bestimmt, welche Aktionen
(wie get, list, create,
delete) auf welche Ressourcen (wie pods,
services, deployments) ausgeführt werden
können.
ClusterRole: Eine ClusterRole definiert Berechtigungen auf Cluster-Ebene. Sie ist nicht auf einen einzelnen Namespace beschränkt und kann auf alle Ressourcen im Cluster angewendet werden.
RoleBinding: Ein RoleBinding verknüpft eine Role mit einem Benutzer oder einer Benutzergruppe innerhalb eines Namespaces. Es weist die in der Role definierten Berechtigungen zu.
ClusterRoleBinding: Ein ClusterRoleBinding verknüpft eine ClusterRole mit einem Benutzer oder einer Benutzergruppe auf Cluster-Ebene. Es weist die in der ClusterRole definierten Berechtigungen zu.
Erstellen Sie eine Role, die es Benutzern erlaubt, Pods in einem spezifischen Namespace zu verwalten:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-manager
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "create", "delete"]Erstellen Sie ein RoleBinding, das die pod-manager Role
einem Benutzer zuweist:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: bind-pod-manager
namespace: default
subjects:
- kind: User
name: jane.doe
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-manager
apiGroup: rbac.authorization.k8s.ioErstellen Sie eine ClusterRole, die es Benutzern erlaubt, Nodes und PersistentVolumes im gesamten Cluster zu verwalten:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-admin
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes"]
verbs: ["get", "list", "create", "delete"]Erstellen Sie ein ClusterRoleBinding, das die
cluster-admin ClusterRole einer Benutzergruppe zuweist:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: bind-cluster-admin
subjects:
- kind: Group
name: system:admins
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.ioNeben Benutzern und Gruppen können auch ServiceAccounts Berechtigungen zugewiesen werden. ServiceAccounts sind spezielle Konten, die von Anwendungen innerhalb eines Kubernetes-Clusters verwendet werden, um API-Aufrufe durchzuführen.
Beispiel:
Erstellen Sie einen ServiceAccount und weisen Sie ihm die
pod-manager Role zu:
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
namespace: defaultErstellen Sie ein RoleBinding für den ServiceAccount:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: bind-sa-pod-manager
namespace: default
subjects:
- kind: ServiceAccount
name: my-service-account
namespace: default
roleRef:
kind: Role
name: pod-manager
apiGroup: rbac.authorization.k8s.ioRBAC ist ein leistungsstarkes Sicherheitsmodell, das in Kubernetes eine präzise Kontrolle über den Zugriff auf Ressourcen ermöglicht. Durch die Definition von Rollen und die Zuweisung dieser Rollen an Benutzer, Gruppen oder ServiceAccounts können Administratoren sicherstellen, dass nur autorisierte Benutzer die erforderlichen Aktionen auf den Ressourcen des Clusters ausführen können.