Security mit RBAC

RBAC (Role-Based Access Control) steuert, wer welche Ressourcen in Kubernetes lesen oder verändern darf.

Konzept

User / ServiceAccount
  └── RoleBinding
        └── Role (Namespace-Scope) oder ClusterRole (Cluster-Scope)
              └── Berechtigungen (verbs: get, list, create, delete, …)

Benutzer-Zertifikat erstellen

openssl genrsa -out chris.key 2048
openssl req -new -key chris.key -out chris.csr -subj "/CN=chris/O=developers"

CertificateSigningRequest (CSR)

vim developer-csr.yaml   # CSR-Inhalt und Name eintragen
kubectl apply -f developer-csr.yaml
kubectl get csr
kubectl certificate approve [csr-name]
kubectl get csr
kubectl get csr chris -o jsonpath='{.status}' | jq
kubectl get csr [csr-name] -o jsonpath='{.status.certificate}' | base64 -d > chris.crt
openssl x509 -noout -text -in chris.crt

Kubeconfig für den Entwickler

kubectl config get-contexts
kubectl config get-clusters
kubectl config get-users
kubectl config set-credentials chris --client-certificate=chris.crt --client-key=chris.key
kubectl config set-context developer --cluster=default --user=chris
kubectl config use-context developer

kubectl get nodes    # verboten
kubectl get pods     # verboten
kubectl get secrets  # verboten

kubectl config use-context default

Role und RoleBinding anlegen

kubectl apply -f developer-role.yaml
kubectl describe roles developer

vim developer-rolebinding.yaml   # Entwickler eintragen
kubectl apply -f developer-rolebinding.yaml
kubectl describe rolebindings developer

Berechtigungen testen

kubectl config use-context developer
kubectl get pods     # erlaubt
kubectl get secrets  # verboten
kubectl exec pod/postgres-0 -- env | grep POSTGRES_PASSWORD   # verboten

kubectl config use-context default
kubectl exec pod/postgres-0 -- env | grep POSTGRES_PASSWORD   # erlaubt

Bestehende Rollen prüfen

kubectl get roles
kubectl get rolebindings
kubectl get clusterroles
kubectl get clusterrolebindings

Hinweis: Kubernetes Secrets sind nur Base64-kodiert, nicht verschlüsselt. Für Produktion externe Secret-Management-Lösungen (z.B. External Secrets + Azure Key Vault) verwenden.