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
enforce
,
audit
und
warn
. In der Tabelle werden alle PSA-Modi aufgelistet und beschrieben.
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
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.
# 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.
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.
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
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/audit=privileged kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/warn=privileged
restricted
auf
baseline
herabzustufen.
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=baseline
baseline
-Standard für den Standard-Namespace:
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=baseline
restricted
auf
privileged
herabzustufen.
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=privileged
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
{"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":[]}
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