Ansichten:
Profilanwendbarkeit: Stufe 1
Erlauben Sie generell nicht, 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 den Netzwerkverkehr zu und von anderen Pods überwachen.
Es sollte mindestens eine Zugriffssteuerungsrichtlinie definiert sein, die es Containern nicht erlaubt, den Host-Netzwerknamensraum zu teilen.
Wenn Sie Container ausführen müssen, die Zugriff auf die Netzwerk-Namensräume des Hosts benötigen, sollte dies in einer separaten Richtlinie definiert werden. Sie sollten sorgfältig prüfen, dass nur begrenzte Dienstkonten und Benutzer die Berechtigung erhalten, diese Richtlinie zu verwenden.
Hinweis
Hinweis
Standardmäß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, autorisierten 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 mit kubectl und jq:
kubectl get pods --all-namespaces -o json | jq -r '.items[] | 
select(.spec.hostNetwork == true) | 
"\(.metadata.namespace)/\(.metadata.name)"'
    
OR
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 ["kube-system", "gatekeeper-system", "azure-arc", "azure-extensions-usage-system"]-Namespaces standardmäßig ausgeschlossen.
Dieser Befehl ruft alle Pods über alle 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 hier: https://learn.microsoft.com/en-us/azure/governance/policy/concepts/policy-for-kubernetes