36 RBAC (Role-Based Access Control)

36.1 Einführung

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.

36.2 Grundlagen von RBAC in Kubernetes

In Kubernetes besteht das RBAC-System aus vier Hauptkomponenten:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

36.3 Erstellen von Rollen und Rollenzuweisungen

36.3.1 Beispiel einer Role

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"]

36.3.2 Beispiel eines RoleBindings

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.io

36.3.3 Beispiel einer ClusterRole

Erstellen 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"]

36.3.4 Beispiel eines ClusterRoleBindings

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.io

36.4 Verwenden von ServiceAccounts

Neben 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: default

Erstellen 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.io

RBAC 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.