RBAC¶
ohMyHelm kann automatisch ServiceAccounts, Roles und RoleBindings für Ihre Anwendung erstellen.
Übersicht¶
RBAC (Role-Based Access Control) ermöglicht es Ihrer Anwendung, mit der Kubernetes API zu interagieren. ohMyHelm erstellt automatisch:
- ServiceAccount: Identität für Ihre Pods
- Role/ClusterRole: Definiert erlaubte Aktionen
- RoleBinding/ClusterRoleBinding: Verbindet ServiceAccount mit Role
Basis-Konfiguration¶
Dies erstellt einen ServiceAccount für Ihre Anwendung.
ServiceAccount¶
Einfacher ServiceAccount¶
Mit Image Pull Secrets¶
chart:
rbac:
enabled: true
serviceAccountName: my-app-sa
imagePullSecrets:
- name: registry-credentials
Roles und RoleBindings¶
Namespace-Scope (Role)¶
Für Berechtigungen innerhalb eines Namespaces:
chart:
rbac:
enabled: true
rules:
- apiGroups: [""]
resources: ["pods", "services", "configmaps"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch", "update"]
Cluster-Scope (ClusterRole)¶
Für cluster-weite Berechtigungen:
chart:
rbac:
enabled: true
clusterRole: true
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "list"]
Vollständiges Beispiel¶
Operator-Anwendung¶
Eine Anwendung, die Kubernetes-Ressourcen verwaltet:
chart:
enabled: true
fullnameOverride: "my-operator"
container:
image: myoperator:latest
ports:
- name: http
containerPort: 8080
rbac:
enabled: true
serviceAccountName: my-operator
clusterRole: true
rules:
# Custom Resource Definitions
- apiGroups: ["mycompany.io"]
resources: ["myresources"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
# Status-Updates
- apiGroups: ["mycompany.io"]
resources: ["myresources/status"]
verbs: ["get", "update", "patch"]
# Secrets lesen
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list", "watch"]
# Events erstellen
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "patch"]
Monitoring-Anwendung¶
Eine Anwendung, die Cluster-Metriken sammelt:
chart:
rbac:
enabled: true
clusterRole: true
rules:
# Pods und Services lesen
- apiGroups: [""]
resources: ["pods", "services", "endpoints"]
verbs: ["get", "list", "watch"]
# Nodes lesen
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "watch"]
# Metrics abrufen
- apiGroups: ["metrics.k8s.io"]
resources: ["nodes", "pods"]
verbs: ["get", "list"]
Backup-Job¶
Ein Job mit minimalen Berechtigungen:
chart:
job:
enabled: true
image: mybackup:latest
rbac:
enabled: true
rules:
# Nur Secrets im eigenen Namespace lesen
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list"]
# ConfigMaps lesen
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["get", "list"]
RBAC-Verben¶
| Verb | Beschreibung |
|---|---|
get | Einzelne Ressource abrufen |
list | Mehrere Ressourcen auflisten |
watch | Änderungen an Ressourcen beobachten |
create | Neue Ressourcen erstellen |
update | Bestehende Ressourcen vollständig ersetzen |
patch | Teilweise Änderungen an Ressourcen |
delete | Ressourcen löschen |
deletecollection | Mehrere Ressourcen auf einmal löschen |
Best Practices¶
- Principle of Least Privilege - Vergeben Sie nur die minimal nötigen Berechtigungen
- Namespace-Scope bevorzugen - Verwenden Sie Roles statt ClusterRoles wenn möglich
- Vermeiden Sie Wildcards - Spezifizieren Sie Ressourcen und Verben explizit
- Dokumentieren Sie RBAC-Anforderungen - Erklären Sie warum Berechtigungen benötigt werden
- Regelmäßig überprüfen - Entfernen Sie nicht mehr benötigte Berechtigungen