This site will be decommissioned on December 31st 2024. After that date content will be available at techdocs.broadcom.com.

Pod-Sicherheit

In diesem Thema wird erläutert, wie Sie PSA-Controller (Pod Security Admission) konfigurieren, um von Tanzu Kubernetes Grid (TKG) bereitgestellte Arbeitslastcluster zu schützen.

Für Cluster oder Namespaces innerhalb von Clustern, auf denen Kubernetes v1.23 (oder höher) ausgeführt wird, unterstützt TKG die Anwendung von Pod-Sicherheitsrichtlinien vom Typ privileged, baseline oder restricted über den PSA-Controller (Pod Security Admission).

Hintergrund: PSA-Controller

In Kubernetes können Sie mit PSA-Controllern Arbeitslastsicherheitsrichtlinien in zwei Bereichen konfigurieren:

  • Profile weisen Berechtigungsebenen für die Ausführung von Arbeitslast-Pods zu: privileged, baseline und restricted, von der niedrigsten bis zur restriktivsten.
  • Modi geben Aktionen an, die ausgelöst werden, wenn der Versuch, den Pod zu erstellen, gegen ein Profil verstößt: warn gibt eine Warnung aus, audit fügt einen Überwachungsprotokolleintrag hinzu, und enforce blockiert die Erstellung des Pods.

Sie können PSA-Controller für die Ausführung in bestimmten Namespaces oder für die clusterweite Ausführung konfigurieren. Beispielsweise können Sie einen Cluster so konfigurieren, dass ein Überwachungsprotokoll ausgelöst wird, wenn ein baseline-Pod gegen eine Sicherheitsrichtlinie verstößt, und dass ein restricted-Pod blockiert wird, wenn er gegen die Richtlinie verstößt.

Weitere Informationen finden Sie unter Pod-Sicherheitsstandards in der Kubernetes-Dokumentation.

Migration von Pod-Sicherheitsrichtlinien

Das PSA-System ersetzt Pod-Sicherheitsrichtlinien (Pod Security Policies, PSPs), die in Kubernetes v1.21 als veraltet eingestuft und in v1.25 entfernt wurden, wie in den Versionshinweisen zu Kubernetes v1.25 beschrieben.

PSPs für Knoten wurden in TKG v2.1 als veraltet eingestuft, um deren Veraltung in Kubernetes widerzuspiegeln. Informationen zum Migrieren von Pods von PSPs zum PSA-Controller finden Sie unter Migrate from PodSecurityPolicy to the Built-In PodSecurity Admission Controller.

PSA-Konfiguration in TKG

Die PSA-Standardeinstellungen für TKG-Arbeitslastcluster hängen von der ausgeführten Kubernetes-Version ab:

  • Kubernetes v1.26 und v1.27, nativ für TKG v2.3 und v2.4:
    • Modus warn und Modus audit: restricted
    • Modus enforce: keine Einstellung
  • Kubernetes v1.25 und v1.24, nativ für TKG v2.2 und v2.1:
    • Modus warn und Modus audit: baseline
    • Modus enforce: keine Einstellung

Die PSA-Standardeinstellungen für Cluster unter den nativen Kubernetes-Versionen in TKG 2.4, v2.3, v2.2 und v2.1 stellen sicher, dass Pods während der Migration von PSPs zu PSA weiterhin ausgeführt werden, auch wenn Warnungen über Richtlinienverstöße generiert werden:

Ab TKG v2.2 entsprechen alle internen TKG-Komponenten dem PSA-Profil restricted.

Konfigurieren einer clusterweiten PSA-Funktion

Sie können einen neuen Cluster mit clusterweiter PSA-Funktion konfigurieren oder die PSA-Konfiguration eines vorhandenen Clusters ändern.

Clusterweite PSA-Funktion für einen neuen Cluster

Wenn Sie eine clusterweite PSA-Funktion für einen neuen Arbeitslastcluster konfigurieren möchten, legen Sie POD_SECURITY_STANDARD_DEACTIVATED in der zugehörigen Clusterkonfigurationsdatei auf false fest und legen Sie die Werte für die anderen POD_SECURITY_STANDARD_*-Variablen so fest, wie in der Tabelle Pod-Sicherheitsstandards in der Variablenreferenz für Konfigurationsdatei beschrieben.

  • POD_SECURITY_STANDARD_DEACTIVATED
  • POD_SECURITY_STANDARD_AUDIT
  • POD_SECURITY_STANDARD_WARN
  • POD_SECURITY_STANDARD_ENFORCE

Sie können das Clustermanifest auch als Schritt 1 des unter Erstellen eines klassenbasierten Clusters beschriebenen zweistufigen Prozesses generieren und dann die podSecurityStandard-Variablenwerte in der Cluster-Spezifikation bearbeiten (wie unten im Abschnitt Ändern der PSA-Konfiguration für einen vorhandenen klassenbasierten Cluster beschrieben), bevor Sie den Cluster in Schritt 2 erstellen.

Ändern der PSA-Konfiguration für einen vorhandenen klassenbasierten Cluster

So ändern Sie die PSA-Konfiguration für einen vorhandenen klassenbasierten Cluster:

  1. Öffnen Sie die Cluster-Objektspezifikation in einem Editor:

    kubectl edit -namespace NAMESPACE CLUSTER
    
  2. Bearbeiten Sie die Werte im Block podSecurityStandard unter spec.topology.variables:

    - name: podSecurityStandard
    
      value:
        deactivated: DEACTIVATED
        audit: AUDIT-PROFILE
        enforce: ENFORCE-PROFILE
        warn: WARN-PROFILE
        auditVersion: AUDIT-VERSION
        enforceVersion: ENFORCE-VERSION
        warnVersion: WARN-VERSION
        exemptions:
          namespaces: [EXEMPT-NS]
    

    Dabei gilt:

    • DEACTIVATED ist false, wenn eine clusterweite PSA angewendet werden soll, andernfalls true
    • AUDIT-PROFILE, ENFORCE-PROFILE und WARN-PROFILE sind die PSA-Profile für jeden Modus. Mögliche Werte sind "privileged", "baseline" und "restricted". Der Standardwert lautet "privileged".
    • Bei den VERSION-Werten handelt es sich um die Kubernetes-Version für die drei Modi, z. B. "v1.26".
    • EXEMPT-NS ist eine kommagetrennte Liste von Namespaces, die von der PSA-Steuerung ausgeschlossen werden sollen.

    Hinweis: Die System-Namespaces kube-system und tkg-system werden immer von der PSA-Steuerung ausgeschlossen.

  3. Nachdem Sie die Cluster-Objektspezifikation angewendet haben, sollten die Änderungen auf die Steuerungsebenenknoten des Clusters übertragen werden.

Ändern der PSA-Konfiguration für einen vorhandenen Legacy-Cluster

So ändern Sie die PSA-Konfiguration für einen vorhandenen Legacy-Cluster:

  1. Rufen Sie die aktuelle AdmissionConfiguraton-Spezifikationsdatei aus dem KubeadmControlPlane-Objekt ab und speichern Sie die Datei lokal. Beispiel:

    kubectl get kcp my-cluster-control-plane --template='{{ range $v := .spec.kubeadmConfigSpec.files }}{{ if eq $v.path "/etc/kubernetes/admission-control-config.yaml" }}{{ $v.content }}{{ end }}{{ end }}' > admission-config.yaml
    
  2. Bearbeiten Sie die Datei admission-config.yaml entsprechend der neuen Konfiguration. In der folgenden Konfiguration wird beispielsweise enforce auf baseline festgelegt. Für die Modi audit und warn gilt weiterhin der Wert restricted:

    apiVersion: apiserver.config.k8s.io/v1
    kind: AdmissionConfiguration
    plugins:
    - name: PodSecurity
    configuration:
      apiVersion: pod-security.admission.config.k8s.io/v1beta1
      kind: PodSecurityConfiguration
      defaults:
        enforce: "baseline"
        enforce-version: "v1.24"
        audit: "restricted"
        audit-version: "v1.24"
        warn: "restricted"
        warn-version: "v1.24"
      exemptions:
        usernames: []
        runtimeClasses: []
        namespaces: ["kube-system", "tkg-system"]
    
  3. Bearbeiten Sie die KubeadmControlPlane-Objektspezifikation und ersetzen Sie den zugehörigen Array-Eintrag unter spec.kubeadmConfigSpec.files durch die neue Konfigurationsdatei.

  4. Nachdem Sie die KubeadmControlPlane-Objektspezifikation angewendet haben, sollten die Änderungen auf die Steuerungsebenenknoten des Clusters übertragen werden.

Überprüfen der Konformität vor dem Hinzufügen oder Ändern einer PSA-Konfiguration

Sorgen Sie vor dem Hinzufügen oder Ändern einer PSA-Konfiguration dafür, dass keine unerwarteten Ausfallzeiten entstehen, indem Sie sicherstellen, dass alle vorhandenen Arbeitslasten im Cluster oder Namespace der PSA den neuen Richtlinieneinstellungen entsprechen.

Sie können prüfen, ob Pods, die in einem vorhandenen Namespace ausgeführt werden, eine bestimmte Richtlinie erfüllen, indem Sie den Befehl kubectl label --overwrite --dry-run=server ausführen:

kubectl label --overwrite --dry-run=server namespace <namespace> pod-security.kubernetes.io/enforce=<policy>

Dieselben Informationen werden beim Konfigurieren des Modus audit der PSA in die Überwachungsprotokolle geschrieben oder beim Anwenden von Ressourcen auf einen Cluster und beim Konfigurieren des Modus warn bereitgestellt.

Aktuelle Informationen zu den verschiedenen Profilen für die Pod-Sicherheit finden Sie in der Kubernetes-Dokumentation.

check-circle-line exclamation-circle-line close-line
Scroll to top icon