Profilanwendbarkeit: Stufe 1
Erlauben Sie nicht generell, dass Container mit dem
hostNetwork-Flag auf true gesetzt ausgeführt werden.Ein Container, der im Netzwerk-Namespace des Hosts läuft, könnte auf das lokale Loopback-Gerät
zugreifen und Netzwerkverkehr zu und von anderen Pods überwachen.
Es sollte mindestens eine Zugriffssteuerungsrichtlinie definiert sein, die es Containern
nicht erlaubt, den Netzwerk-Namespace des Hosts zu teilen. Wenn Sie Container ausführen
müssen, die Zugriff auf die Netzwerk-Namespaces des Hosts benötigen, sollte dies in
einer separaten Richtlinie definiert werden, und Sie sollten sorgfältig prüfen, dass
nur begrenzte Dienstkonten und Benutzer die Berechtigung erhalten, diese Richtlinie
zu verwenden.
HinweisStandardmäßig gibt es keine Einschränkungen bei der Erstellung von
hostNetwork-Containern. |
Auswirkung
Pods, die mit
spec.hostNetwork: true definiert sind, werden nicht zugelassen, es sei denn, sie werden unter einer spezifischen
Richtlinie ausgeführt.Prüfung
Listen Sie die Richtlinien auf, die für jeden Namespace im Cluster verwendet werden,
und stellen Sie sicher, dass jede Richtlinie die Zulassung von
hostNetwork-Containern untersagt.Da die manuelle Überprüfung jedes Pods zeitaufwändig sein kann, insbesondere in großen
Umgebungen, können Sie einen automatisierten Ansatz verwenden, um Pods herauszufiltern,
bei denen
hostNetwork auf true gesetzt ist. Hier ist ein Befehl, der kubectl und jq verwendet:kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.hostNetwork == true) | "\(.metadata.namespace)/\(.metadata.name)"'
Oder:
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.hostNetwork == true) | select(.metadata.namespace != "kube-system" and .metadata.namespace != "gatekeeper-system" and .metadata.namespace != "azure-arc" and .metadata.namespace != "azure-extensions-usage-system") | "\(.metadata.name) \(.metadata.namespace)"'
Beim Erstellen einer Pod-Sicherheitsrichtlinie sind die
["kube-system", "gatekeeper-system", "azure-arc", "azure-extensions-usage-system"]-Namespaces standardmäßig ausgeschlossen.Dieser Befehl ruft alle Pods in allen Namespaces im JSON-Format ab, verwendet dann
jq, um diejenigen herauszufiltern, die das
hostNetwork-Flag auf true gesetzt haben, und formatiert schließlich die Ausgabe, um den Namespace und den Namen
jedes übereinstimmenden Pods anzuzeigen.Wiederherstellung
Fügen Sie Richtlinien zu jedem Namespace im Cluster hinzu, der Benutzerarbeitslasten
enthält, um die Zulassung von
hostNetwork-Containern zu beschränken.Pod-Sicherheitsrichtlinien und Zuweisungen können im Azure-Portal durch die Suche
nach Richtlinien gefunden werden. Eine detaillierte Schritt-für-Schritt-Anleitung
finden Sie in der Kubernetes-Richtliniendokumentation.
