設定檔適用性:等級 1
一般不允許容器在
hostNetwork 標誌設為 true 的情況下運行。在主機的網路命名空間中運行的容器可以訪問本地迴路裝置,並可以訪問其他 pod 的網路流量。
應至少定義一個不允許容器共享主機網路命名空間的准入控制政策。如果您需要運行需要訪問主機網路命名空間的容器,應在單獨的政策中定義,並且您應仔細檢查以確保只有有限的服務帳戶和使用者被授予使用該政策的權限。
注意預設情況下,對於建立
hostNetwork容器沒有任何限制。 |
影響
除非在特定政策下運行,否則不允許定義為
spec.hostNetwork: true的Pods。稽核
列出叢集中每個命名空間使用的政策,確保每個政策都不允許
hostNetwork容器的進入。鑑於手動檢查每個 pod 可能會非常耗時,尤其是在大型環境中,您可以使用更自動化的方法來篩選出
hostNetwork 設定為 true 的 pod。以下是使用 kubectl 和 jq 的指令:kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.hostNetwork == true) | "\(.metadata.namespace)/\(.metadata.name)"'
或者:
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)"'
在建立 Pod 安全政策時,
["kube-system", "gatekeeper-system", "azure-arc", "azure-extensions-usage-system"] 命名空間預設會被排除。此命令會以 JSON 格式檢索所有命名空間中的所有 pod,然後使用 jq 過濾出那些
hostNetwork 標誌設為 true 的 pod,最後格式化輸出以顯示每個符合條件的 pod 的命名空間和名稱。補救
將政策新增至叢集中每個具有使用者工作負載的命名空間,以限制
hostNetwork容器的准入。Pod 安全性政策和指派可以在 Azure 入口網站中搜尋政策來找到。詳細的逐步指南可以在 Kubernetes 政策文件中找到。
