Ansichten:
Profilanwendbarkeit: Stufe 2
Verwenden Sie GKE Sandbox, um unzuverlässige Workloads als zusätzliche Schutzschicht in einer Multi-Tenant-Umgebung einzuschränken.
GKE Sandbox bietet eine zusätzliche Sicherheitsebene, um zu verhindern, dass nicht vertrauenswürdiger Code den Host-Kernel auf Ihren Cluster-Knoten beeinflusst. Wenn Sie GKE Sandbox in einem Node-Pool aktivieren, wird für jedes Pod, das auf einem Knoten in diesem Node-Pool läuft, eine Sandbox erstellt.
Darüber hinaus wird verhindert, dass Knoten, die sandboxed Pods ausführen, auf andere GCP-Dienste oder Cluster-Metadaten zugreifen. Jede Sandbox verwendet ihren eigenen Userspace-Kernel. Multi-Tenant-Cluster und Cluster, deren Container nicht vertrauenswürdige Workloads ausführen, sind stärker Sicherheits-Schwachstellen ausgesetzt als andere Cluster.
Beispiele sind SaaS-Anbieter, Webhosting-Anbieter oder andere Organisationen, die ihren Nutzern erlauben, Code hochzuladen und auszuführen. Ein Fehler in der Container-Laufzeitumgebung oder im Host-Kernel könnte es einem Prozess, der innerhalb eines Containers läuft, ermöglichen, aus dem Container auszubrechen und den Kernel des Knotens zu beeinflussen, was möglicherweise den Knoten zum Absturz bringen könnte.
Es besteht auch die Möglichkeit, dass ein bösartiger Mieter durch Ausnutzung eines solchen Defekts Zugriff auf die Daten eines anderen Mieters im Speicher oder auf der Festplatte erhält und diese exfiltriert.
Hinweis
Hinweis
Standardmäßig ist die GKE-Sandbox deaktiviert.

Auswirkung

Die Verwendung von GKE Sandbox erfordert, dass das Node-Image auf Container-Optimized OS mit containerd (cos_containerd) eingestellt ist.
Derzeit ist es nicht möglich, GKE Sandbox zusammen mit den folgenden Kubernetes-Funktionen zu verwenden:
  • Beschleuniger wie GPUs oder TPUs
  • Istio
  • Überwachungsstatistiken auf Ebene des Pods oder Containers
  • Hostpath-Speicher
  • PID-Namespace pro Container
  • CPU- und Speicherkontingente werden nur für garantierte Pods und burstbare Pods angewendet, und nur wenn CPU- und Speicherkontingente für alle Container im Pod festgelegt sind
  • Pods, die PodSecurityPolicies verwenden, die Host-Namespaces wie hostNetwork, hostPID oder hostIPC angeben
  • Pods, die PodSecurityPolicy-Einstellungen wie den privilegierten Modus verwenden
  • VolumeGeräte
  • Portweiterleitung
  • Linux-Kernel-Sicherheitsmodule wie Seccomp, Apparmor oder Selinux Sysctl, NoNewPrivileges, bidirektionale MountPropagation, FSGroup oder ProcMount

Prüfung

Verwendung der Google Cloud Console:
  1. Gehen Sie zu Kubernetes Engine, indem Sie die Google Cloud Console Kubernetes Engine-Seite besuchen.
  2. Klicken Sie auf jeden Cluster und auf alle Node-Pools, die nicht standardmäßig bereitgestellt werden.
  3. Auf der Seite mit den Knotengruppendetails, unter der Überschrift Sicherheit auf der Seite mit den Knotengruppendetails, überprüfen Sie, dass Sandbox mit gVisor auf Aktiviert gesetzt ist.
Der Standard-Node-Pool kann GKE Sandbox nicht verwenden.
Verwendung der Befehlszeile:
Definieren Sie zuerst 3 Variablen für Node Pool, Clustername, Standort und Projekt und führen Sie dann diesen Befehl aus:
gcloud container node-pools describe $NODE_POOL --cluster $CLUSTER_NAME -- 
location $LOCATION --project $PROJECT_ID --format json | jq '.config.sandboxConfig' 
Die Ausgabe des obigen Befehls wird Folgendes zurückgeben, wenn der Node-Pool in einer Sandbox läuft:
{ "sandboxType":"gvisor" }
Wenn keine Sandbox vorhanden ist, wird die obige Befehlsausgabe null ({ }) sein. Der Standard-Node-Pool kann GKE Sandbox nicht verwenden.

Wiederherstellung

Sobald ein Knotenpool erstellt ist, kann GKE Sandbox nicht aktiviert werden, stattdessen ist ein neuer Knotenpool erforderlich. Der Standardknotenpool (der erste Knotenpool in Ihrem Cluster, der beim Erstellen des Clusters erstellt wird) kann GKE Sandbox nicht verwenden.
Verwendung der Google Cloud Console:
  1. Gehen Sie zu Kubernetes Engine, indem Sie die Google Cloud-Dokumentation besuchen.
  2. Wählen Sie einen Cluster aus und klicken Sie auf NODE POOL HINZUFÜGEN.
  3. Konfigurieren Sie den Knotenpool mit den folgenden Einstellungen: o Wählen Sie für die Knotenversion v1.12.6-gke.8 oder höher. o Wählen Sie für das Knoten-Image Container-Optimized OS mit Containerd (cos_containerd) (Standard). o Wählen Sie unter Sicherheit die Option Sandbox mit gVisor aktivieren.
  4. Konfigurieren Sie die gewünschten Einstellungen für andere Node-Pools.
  5. Klicken Sie auf SPEICHERN.
Verwendung der Befehlszeile: Um GKE Sandbox auf einem bestehenden Cluster zu aktivieren, muss ein neuer Knotenpool erstellt werden, was mit folgendem Befehl erfolgen kann:
gcloud container node-pools create <node_pool_name> --location <location> - -cluster <cluster_name> --image-type=cos_containerd --sandbox="type=gvisor"

Zusätzliche Informationen

Der Standard-Node-Pool (der erste Node-Pool in Ihrem Cluster, der beim Erstellen des Clusters erstellt wird) kann GKE Sandbox nicht verwenden.
Bei der Verwendung von GKE Sandbox muss Ihr Cluster mindestens zwei Node-Pools haben. Sie müssen immer mindestens einen Node-Pool haben, in dem GKE Sandbox deaktiviert ist. Dieser Node-Pool muss mindestens einen Knoten enthalten, auch wenn alle Ihre Workloads in der Sandbox ausgeführt werden.
Es ist optional, aber empfohlen, dass Sie Stackdriver Logging und Stackdriver Monitoring aktivieren, indem Sie das Flag --enable-stackdriver-kubernetes hinzufügen. gVisor-Nachrichten werden protokolliert.