Kubernetes v1.33: Präzise Kontrolle über Gruppen für mehr Sicherheit
ayedo Redaktion 2 Minuten Lesezeit

Kubernetes v1.33: Präzise Kontrolle über Gruppen für mehr Sicherheit

Entdecken Sie die neuen Funktionen von Kubernetes v1.33, die Sicherheit und Transparenz in der Gruppenverwaltung verbessern.
kubernetes kubernetes-news

Die neue Funktion supplementalGroupsPolicy wurde als optionale Alpha-Funktion in Kubernetes v1.31 eingeführt und ist nun in v1.33 in die Beta-Phase übergegangen. Das zugehörige Feature Gate (SupplementalGroupsPolicy) ist jetzt standardmäßig aktiviert. Diese Funktion ermöglicht eine präzisere Kontrolle über die Supplemental Groups in Containern, was die Sicherheitslage insbesondere beim Zugriff auf Volumes stärkt. Zudem verbessert sie die Transparenz der UID/GID-Details in Containern und bietet somit eine verbesserte Sicherheitsüberwachung.

Bitte beachten Sie, dass diese Beta-Version einige Verhaltensänderungen beinhaltet. Weitere Informationen finden Sie in den Abschnitten Die eingeführten Verhaltensänderungen in der Beta und Upgrade-Überlegungen.

Motivation: Implizite Gruppenmitgliedschaften in /etc/group im Container-Image

Obwohl die meisten Kubernetes-Cluster-Administratoren und -Benutzer sich dessen möglicherweise nicht bewusst sind, fusioniert Kubernetes standardmäßig die Gruppendaten aus dem Pod mit den Informationen, die in /etc/group des Container-Images definiert sind.

Sehen wir uns ein Beispiel an: Das folgende Pod-Manifest spezifiziert runAsUser=1000, runAsGroup=3000 und supplementalGroups=4000 im Sicherheitskontext des Pods.

apiVersion: v1
kind: Pod
metadata:
  name: implicit-groups
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    supplementalGroups: [4000]
  containers:
  - name: ctr
    image: registry.k8s.io/e2e-test-images/agnhost:2.45
    command: [ "sh", "-c", "sleep 1h" ]
    securityContext:
      allowPrivilegeEscalation: false

Was ist das Ergebnis des id-Befehls im ctr-Container? Die Ausgabe sollte ungefähr wie folgt aussehen:

none uid=1000 gid=3000 groups=3000,4000,50000

Woher kommt die Gruppen-ID 50000 in den Supplementary Groups (groups-Feld), obwohl 50000 im Pod-Manifest überhaupt nicht definiert ist? Die Antwort ist die Datei /etc/group im Container-Image.

Wenn wir den Inhalt von /etc/group im Container-Image überprüfen, sollte Folgendes angezeigt werden:

none user-defined-in-image:x:1000: group-defined-in-image:x:50000:user-defined-in-image

Dies zeigt, dass der primäre Benutzer des Containers 1000 in der letzten Zeile der Gruppe 50000 angehört.

Somit werden die in /etc/group im Container-Image definierten Gruppenmitgliedschaften für den primären Benutzer des Containers implizit mit den Informationen aus dem Pod zusammengeführt. Bitte beachten Sie, dass dies eine Designentscheidung war, die die aktuellen CRI-Implementierungen von Docker geerbt haben, und die Community sich bis jetzt nicht wirklich damit befasst hat.

Was ist daran problematisch?

Die implizit zusammengeführten Gruppeninformationen aus /etc/group im Container-Image stellen ein Sicherheitsrisiko dar. Diese impliziten GIDs können von Richtlinien-Engines nicht erkannt oder validiert werden, da es keinen Eintrag dafür im Pod-Manifest gibt. Dies kann zu unerwarteten Zugriffssteuerungsproblemen führen, insbesondere beim Zugriff auf Volumes (siehe kubernetes/kubernetes#112879 für Details), da die Dateiberechtigungen in Linux durch UID/GIDs gesteuert werden.

Mit der Einführung der supplementalGroupsPolicy in Kubernetes v1.33 haben Entwickler und DevOps-Teams nun die Möglichkeit, die Sicherheitslage ihrer Anwendungen zu verbessern und die Kontrolle über Gruppenmitgliedschaften zu optimieren. ayedo unterstützt Sie gerne dabei, diese neuen Funktionen effektiv in Ihre Kubernetes-Umgebung zu integrieren.


Quelle: Kubernetes Blog

Ähnliche Artikel