Ab den Tanzu Kubernetes Releases v1.25 und höher wird der PSA-Controller (Pod Security Admission, Zugangssteuerung für Pod-Sicherheit) aktiviert. Mit PSA können Sie Pod-Sicherheit unter Verwendung von Namespace-Bezeichnungen einheitlich erzwingen.

PSA in TKR 1.25 und höher aktiviert

Bei der Zugangssteuerung für Pod-Sicherheit handelt es sich um einen Kubernetes-Controller, mit dem Sie Sicherheitsstandards auf Pods anwenden können, die auf TKG-Clustern ausgeführt werden. Standardmäßig wird ab den Tanzu Kubernetes Releases v1.25 und höher der PSA-Controller (Pod Security Admission, Zugangssteuerung für Pod-Sicherheit) aktiviert. Der PSA-Controller ersetzt den veralteten PSP-Controller (Pod Security Policy, Pod-Sicherheitsrichtlinie), der entfernt wurde. Siehe auch Konfigurieren von PSP für TKR 1.24 und früher

Bei Tanzu Kubernetes Release v1.25 handelt es sich um eine Übergangsversion, bei der PSA so konfiguriert ist, dass eine Warnung erfolgt. Ab Tanzu Kubernetes Release v1.26 wird PSA erzwungen. Sie sollten die Migration von Pod-Arbeitslasten von PSP zu PSA im Voraus planen, um ein Upgrade der TKG-Cluster durchzuführen. Weitere Informationen finden Sie unter Migrieren von der Pod-Sicherheitsrichtlinie zur integrierten Zugangssteuerung für Pod-Sicherheit.

Clusterweite Konfiguration von PSA

Ab vSphere 8 Update 3 können Sie PSA clusterweit mithilfe der ClusterClass-Variable podSecurityStandard konfigurieren, die mit der v1beta1-API verfügbar ist. Weitere Informationen hierzu finden Sie unter Cluster-API v1beta1.

PSA-Modi

Der PSA-Controller unterstützt drei Pod-Sicherheitsmodi: enforce, audit und warn. In der Tabelle werden alle PSA-Modi aufgelistet und beschrieben.
Tabelle 1. PSA-Modi
MODUS Beschreibung
enforce Sicherheitsverstöße führen dazu, dass der Pod abgelehnt wird.
audit Sicherheitsverstöße lösen das Hinzufügen einer Überwachungsanmerkung zu dem im Überwachungsprotokoll aufgezeichneten Ereignis aus, sind aber ansonsten zulässig.
warn Sicherheitsverstöße lösen eine benutzerseitige Warnung aus, sind aber ansonsten zulässig.

PSA-Standards

Der PSA-Controller definiert drei Ebenen von Pod-Sicherheitsstandards, die das Sicherheitsspektrum abdecken sollen. Die Pod-Sicherheitsstandards sind kumulativ und dabei permissiv bis restriktiv. In der Tabelle werden alle PSA-Standards aufgelistet und beschrieben.
Tabelle 2. PSA-Standards
EBENE Beschreibung
privileged Uneingeschränkte Steuerung, die die größtmögliche Berechtigungsstufe bietet. Diese Sicherheitsrichtlinie ermöglicht bekannte Berechtigungseskalationen.
baseline Minimal restriktives Steuerelement, das bekannte Berechtigungseskalationen verhindert. Dieser Sicherheitsstandard lässt die standardmäßige (minimal angegebene) Pod-Konfiguration zu.
restricted Stark eingeschränktes Steuerelement gemäß den aktuellen Best Practices für die Pod-Härtung.

PSA-Namespace-Bezeichnungen

Der PSA-Controller erzwingt Pod-Sicherheit auf Kubernetes-Namespace-Ebene. Mithilfe von Namespace-Bezeichnungen definieren Sie die PSA-Modi und -Ebenen, die Sie für Pods in einem bestimmten Namespace verwenden möchten.

Kubernetes bietet einen Satz von Bezeichnungen, mit denen Sie definieren können, welche der Standards für einen Namespace verwendet werden sollen. Die von Ihnen angewendete Bezeichnung definiert die von der Kubernetes-Steuerungsebene durchgeführte Aktion bei Erkennung eines potenziellen Verstoßes. Sie können für einen bestimmten Kubernetes-Namespace einen beliebigen oder alle Modi konfigurieren oder eine andere Ebene für verschiedene Modi festlegen.

Die Syntax der PSA-Namespace-Bezeichnung lautet wie folgt:
# MODE must be one of `enforce`, `audit`, or `warn`.
# LEVEL must be one of `privileged`, `baseline`, or `restricted`.
pod-security.kubernetes.io/<MODE>=<LEVEL>

Sie können auch eine Versionsbezeichnung pro Modus anwenden, die zum Anheften des Sicherheitsstandards an die Kubernetes-Version verwendet werden kann. Weitere Informationen finden Sie unter Erzwingen von Pod-Sicherheitsstandards mit Namespace-Bezeichnungen.

Standard-PSA für TKG-Cluster

Standardmäßig sind in TKG-Clustern, die mit Tanzu Kubernetes Release v1.25 bereitgestellt werden, die PSA-Modi warn und audit auf restricted für systemfremde Namespaces festgelegt. Dies ist eine Einstellung ohne zwangsweise Durchsetzung: Der PSA-Controller erzeugt eine Warn- und Überwachungsbenachrichtigung, wenn ein Pod gegen Sicherheitsrichtlinien verstößt, aber der Pod wird nicht abgelehnt.

Standardmäßig ist in TKG-Clustern, die mit Tanzu Kubernetes Releases v1.26 und höher bereitgestellt werden, der PSA-Modus enforce auf restricted für systemfremde Namespaces festgelegt. Wenn ein Pod gegen Sicherheitsrichtlinien verstößt, wird er abgelehnt. Sie müssen PSA im Namespace konfigurieren, um Pods weniger restriktiv auszuführen.
Wichtig: Bestimmte System-Pods, die in den Namespaces „kube-system“, „tkg-system“ und „vmware-system-cloud-provider“ ausgeführt werden, benötigen erweiterte Berechtigungen. Diese Namespaces sind von der Pod-Sicherheit ausgeschlossen. Darüber hinaus kann Pod-Sicherheit in System-Namespaces nicht geändert werden.
In der Tabelle wird die PSA-Standardkonfiguration für TKG-Cluster aufgelistet:
Tabelle 3. Standard-PSA für TKG-Cluster
TKr-Version Standard-PSA
TKr v1.25

Modus: Warnung | Ebene: eingeschränkt

Modus: Überwachung | Ebene: eingeschränkt

Modus: Erzwingung | Ebene: nicht festgelegt

TKr v1.26 und höher

Modus: Erzwingung | Ebene: eingeschränkt

Konfigurieren von PSA mithilfe von Namespace-Bezeichnungen

Verwenden Sie für Tanzu Kubernetes Release v1.25 den folgenden Beispielbefehl, um die Sicherheitsstufen für einen bestimmten Namespace so zu ändern, dass keine PSA-Warnungen und Überwachungsbenachrichtigungen erzeugt werden.
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/audit=privileged 
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/warn=privileged
Verwenden Sie für Tanzu Kubernetes Releases v1.26 und höher den folgenden Beispielbefehl, um den PSA-Standard von restricted auf baseline herabzustufen.
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=baseline
So erzwingen Sie beispielsweise den baseline-Standard für den Standard-Namespace:
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=baseline
Verwenden Sie für Tanzu Kubernetes Releases v1.26 und höher den folgenden Beispielbefehl, um den PSA-Standard von restricted auf privileged herabzustufen.
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=privileged
So erzwingen Sie beispielsweise den privileged-Standard für den Standard-Namespace:
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=privileged

Verwenden Sie für Tanzu Kubernetes Releases v1.26 und höher die folgenden Beispielbefehle, um PSA über alle systemfremden Namespaces hinweg zu lockern.

kubectl label --overwrite ns --all pod-security.kubernetes.io/enforce=privileged
kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=restricted

Konfigurieren des Sicherheitskontexts für einzelne Pods

Wenn Sie versuchen, einen Pod auszuführen, der gegen PSA verstößt, aktivieren Sie erneut eine Fehlermeldung, die darauf hinweist. Beispiel:
{"opType":"CREATE_POD","succeeded":false,"err":"creating pod example-pod: pods 
\"example-pod\" is forbidden: violates PodSecurity \"restricted:latest\": 
allowPrivilegeEscalation != false (container \"example-container\" must set 
securityContext.allowPrivilegeEscalation=false), unrestricted capabilities 
(container \"example-container\" must set securityContext.capabilities.drop=[\"ALL\"]), 
runAsNonRoot != true (pod or container \"example-container\" must set securityContext.runAsNonRoot=true), 
seccompProfile (pod or container \"example-container\" must set securityContext.seccompProfile.type to 
\"RuntimeDefault\" or \"Localhost\")","events":[]}
Anstatt PSA für einen gesamten Namespace festzulegen, können Sie den Sicherheitskontext für einen einzelnen Pod konfigurieren. Damit ein einzelner Pod ausgeführt werden kann, können Sie in der Pod-Spezifikation den Sicherheitskontext wie folgt festlegen:
apiVersion: v1
kind: Pod
metadata:
  name: example-pod 
spec:
  containers:
  - image: gcr.io/google_containers/busybox:1.24
    name: example-container
    command: ["/bin/sh", "-c", "echo 'hello' > /mnt/volume1/index.html && chmod o+rX /mnt /mnt/volume1/index.html && while true ; do sleep 2 ; done"]
    securityContext:
      allowPrivilegeEscalation: false
      runAsNonRoot: true
      seccompProfile:
        type: "RuntimeDefault"
      capabilities:
        drop: [all]
    volumeMounts:
    - name: example-volume-mount
      mountPath: /mnt/volume1
  restartPolicy: Never
  volumes:
  - name: example-volume
    persistentVolumeClaim:
    claimName: example-pvc