Kubernetes Security Best Practices

Kubernetes hat die Orchestrierung und Verwaltung von Containern im großen Maßstab revolutioniert und ist zum De-facto-Standard für das Deployment von Cloud-native-Anwendungen geworden, doch seine verteilte Architektur und inhärente Komplexität führen im Vergleich zu traditionellen Deployment-Modellen zu einer erheblich erweiterten Angriffsfläche. Ein typischer Kubernetes-Cluster umfasst Dutzende miteinander verbundener Komponenten - API Server, etcd, Scheduler, Controller Manager, kubelet, kube-proxy - jede mit ihren eigenen potenziellen Schwachstellen und spezifischen Hardening-Anforderungen. Die dynamische Natur von K8s, in der Pods ständig erstellt und zerstört werden, Workloads zwischen Nodes migrieren und Network Policies in Echtzeit angewendet werden müssen, macht Security zu einer mehrdimensionalen Herausforderung, die einen Defense-in-Depth-Ansatz erfordert. Unsichere Standardkonfigurationen wie übermäßig permissive RBAC-Berechtigungen, das Fehlen von Network Policies, die uneingeschränkte Kommunikation zwischen Pods erlauben, Container, die als root mit privilegierten Capabilities laufen, und Secrets, die im Klartext in unverschlüsseltem etcd gespeichert sind, stellen Angriffsvektoren dar, die in schlecht konfigurierten K8s-Umgebungen häufig ausgenutzt werden. Dieser Artikel behandelt grundlegende Praktiken zum Hardening von Kubernetes-Clustern und umfasst rollenbasierte Zugriffskontrolle (RBAC), Pod Security Standards, Network Policies für die Mikrosegmentierung, sicheres Secrets Management, Admission Controllers für das Policy Enforcement, Runtime-Security-Monitoring mit Tools wie Falco und Compliance mit Branchen-Benchmarks wie dem CIS Kubernetes Benchmark, und bietet damit eine vollständige Roadmap zum Aufbau und Betrieb sicherer Kubernetes-Cluster in Produktionsumgebungen.

K8s-Security-Architektur

Ein Kubernetes-Cluster verfügt über mehrere kritische Komponenten:

  • Control Plane: API Server, etcd, Scheduler, Controller Manager
  • Nodes: kubelet, kube-proxy, Container Runtime
  • Add-ons: DNS, Dashboard, Ingress Controllers

RBAC (Role-Based Access Control)

RBAC ist die Grundlage der K8s-Security und steuert, wer über den API Server auf was zugreifen kann.

RBAC-Konfiguration

      # Role zum Lesen von Pods in einem bestimmten Namespace
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
      namespace: production
      name: pod-reader
      rules:
      - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "list"]
      ---
      # RoleBinding ordnet die Role einem Benutzer zu
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
      name: read-pods
      namespace: production
      subjects:
      - kind: User
      name: jane
      apiGroup: rbac.authorization.k8s.io
      roleRef:
      kind: Role
      name: pod-reader
      apiGroup: rbac.authorization.k8s.io
      

RBAC-Prinzipien

  • Least Privilege: Nur die erforderlichen Berechtigungen gewähren
  • ClusterAdmin vermeiden: Funktionsspezifische Rollen erstellen
  • Service Accounts: Jeder Pod sollte einen dedizierten SA haben
  • Namespace Isolation: RoleBindings statt ClusterRoleBindings

Pod Security

Pod Security Standards

Kubernetes 1.25+ verwendet Pod Security Admission anstelle der veralteten PSPs:

  • Privileged: Uneingeschränkt, für vertrauenswürdige Workloads
  • Baseline: Minimal restriktiv, verhindert bekannte Eskalationen
  • Restricted: Stark eingeschränkt, folgt den Hardening-Best-Practices

Security Context

      apiVersion: v1
      kind: Pod
      metadata:
      name: secure-pod
      spec:
      securityContext:
      runAsNonRoot: true
      runAsUser: 1000
      fsGroup: 2000
      seccompProfile:
      type: RuntimeDefault
      containers:
      - name: app
      image: myapp:latest
      securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
      drop:
      - ALL
      

Network Policies

Standardmäßig können Pods frei kommunizieren. Network Policies implementieren die Segmentierung:

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
      name: api-allow-from-frontend
      namespace: production
      spec:
      podSelector:
      matchLabels:
      app: api
      policyTypes:
      - Ingress
      ingress:
      - from:
      - podSelector:
      matchLabels:
      app: frontend
      ports:
      - protocol: TCP
      port: 8080
      

Secrets Management

  • Secrets niemals hartcodieren: Kubernetes Secrets oder externe Vaults verwenden
  • etcd Encryption: Encryption-at-rest für etcd aktivieren
  • External Secrets Operator: Integration mit Vault, AWS Secrets Manager
  • Secrets rotieren: Automatische Rotation implementieren
  • RBAC für Secrets: Einschränken, wer Secrets lesen darf

Image Security

  • Private Registries: In der Produktion keine öffentlichen Registries verwenden
  • Image Scanning: Trivy, Clair, Anchore zum Scannen von Schwachstellen
  • Image Signing: Cosign zur Überprüfung der Integrität
  • Admission Controllers: Images vor dem Deployment validieren
  • Distroless Images: Angriffsfläche minimieren

Admission Controllers

  • OPA/Gatekeeper: Policy-as-Code für Compliance
  • Kyverno: Kubernetes-natives Policy Management
  • ImagePolicyWebhook: Image-Signaturen validieren
  • ResourceQuota: Ressourcen pro Namespace begrenzen
  • LimitRanger: CPU-/Speicherlimits durchsetzen

API Server Hardening

  • Audit Logging aktivieren
  • TLS für alle Kommunikationen verwenden
  • Anonymous Auth deaktivieren
  • API Rate Limiting implementieren
  • Zugriff auf den API Server einschränken (Network ACLs)

Runtime Security

  • Falco: Runtime Threat Detection für K8s
  • Sysdig Secure: Runtime Protection und Compliance
  • Aqua Security: Container-Security über den gesamten Lebenszyklus

Compliance und Auditing

  • CIS Kubernetes Benchmark: Hardening-Framework
  • kube-bench: Automatisierte CIS-Compliance-Prüfungen
  • kube-hunter: Penetration-Testing-Tool für K8s
  • Audit Logs: Zur Analyse in einem SIEM zentralisieren

Service Mesh Security

Service Meshes (Istio, Linkerd) fügen eine Sicherheitsebene hinzu:

  • Automatisches mTLS zwischen Pods
  • Fine-grained Authorization Policies
  • Traffic Encryption in Transit
  • Observability und Auditability

Abschließende Empfehlungen

K8s-Security ist eine geteilte Verantwortung. Implementieren Sie eine mehrschichtige Verteidigung: RBAC, Network Policies, Pod Security, Secrets Management und Runtime Protection. Verwenden Sie automatisierte Compliance-Tools (kube-bench) und überwachen Sie kontinuierlich. Schulen Sie Teams in K8s-Security - Komplexität erfordert dedizierte Expertise.