Der SecurityContext ist ein Feld in der Pod- und Container-Konfiguration von Kubernetes. Er legt fest, mit welchen Berechtigungen ein Pod oder Container läuft: als welcher User, mit welchen Linux-Capabilities, mit schreibgeschütztem Dateisystem und ohne Privilegienausweitung.

Pod-Ebene und Container-Ebene

Der SecurityContext kann auf zwei Ebenen gesetzt werden: Auf Pod-Ebene (spec.securityContext) gilt er für alle Container des Pods, auf Container-Ebene (spec.containers[].securityContext) überschreibt er die Pod-Werte für den einzelnen Container.

Wichtige Felder

  • runAsUser / runAsGroup – UID und GID, mit denen der Prozess startet.
  • runAsNonRoot: true – verhindert den Start als Root (UID 0).
  • fsGroup / supplementalGroups – Gruppen für den Zugriff auf gemountete Volumes.
  • allowPrivilegeEscalation: false – unterbindet das Anheben von Rechten über setuid-Binaries oder ähnliche Wege.
  • capabilities – gezieltes Hinzufügen oder Entfernen von Linux-Capabilities, etwa drop: ["ALL"] oder add: ["NET_BIND_SERVICE"].
  • readOnlyRootFilesystem: true – das Wurzeldateisystem des Containers wird schreibgeschützt gemountet.
  • privileged: true – gewährt vollen Node-Zugriff; in Produktion vermeiden.
  • appArmorProfile – wählt das AppArmor-Profil des Containers (RuntimeDefault, Localhost oder Unconfined).
  • seccompProfile – wählt das seccomp-Profil des Containers (RuntimeDefault, Localhost oder Unconfined).
  • selinuxOptions / windowsOptions – plattformspezifische Sicherheitsoptionen, etwa für SELinux.

Beispiel

spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
  containers:
  - name: app
    securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
        drop: ["ALL"]

Zusammenspiel mit Pod Security

Der strenge Pod-Security-Standard restricted verlangt genau diese Einstellungen: runAsNonRoot, eine User-ID ungleich 0, allowPrivilegeEscalation: false, den Wegfall aller Capabilities und ein seccomp-Profil. Wer die Werte im SecurityContext setzt, erfüllt die Anforderungen des Standards automatisch.

Verwandte Grundlagen: Kubernetes ServiceAccount, kubectl-Befehle.