設定檔適用性:等級 1
一般不允許容器在設置
allowPrivilegeEscalation 標誌為 true 的情況下運行。允許此權限可能導致運行容器的進程獲得比其啟動時更多的權限。請注意,這些權限仍然受到整體容器沙盒的限制,且此設定與使用特權容器無關。
將
allowPrivilegeEscalation 標誌設為 true 的容器可能會有進程獲得比其父進程更多的權限。應至少定義一個入場控制政策,不允許容器進行權限升級。存在允許 setuid 二進位檔運行的選項(預設為 true)。
如果您需要運行使用 setuid 二進制文件或需要權限升級的容器,應在單獨的政策中定義,並且您應仔細檢查以確保只有有限的服務帳戶和用戶被授予使用該政策的權限。
注意預設情況下,容器內的進程在提升權限方面沒有任何限制。
|
影響
除非在特定政策下運行,否則不允許使用
spec.allowPrivilegeEscalation: true定義的 Pods。稽核
列出叢集中每個命名空間使用的政策,確保每個政策都不允許容器進行權限升級。
此命令會獲取所有命名空間中的所有 pod,以 JSON 格式輸出其詳細資訊,並使用
jq 解析和篩選出 allowPrivilegeEscalation 設為 true 的容器。kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(any(.spec.containers[]; .securityContext.allowPrivilegeEscalation == true)) | "\(.metadata.namespace)/\(.metadata.name)"'
OR
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(any(.spec.containers[]; .securityContext.allowPrivilegeEscalation == 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"] 命名空間預設會被排除。此命令使用
jq,一個命令行 JSON 處理器,來解析 kubectl get pods 的 JSON 輸出,並篩選出任何容器具有 securityContext.privileged 標誌設為 true 的 pod。您可能需要根據您的具體需求和 pod 規格的結構來調整命令。補救
將政策新增至叢集中每個具有使用者工作負載的命名空間,以限制允許
.spec.allowPrivilegeEscalation 設定為 true 的容器進入。Pod 安全性政策和指派可以在 Azure 入口網站中搜尋政策來找到。詳細的逐步指南可以在 Kubernetes 政策文件中找到。
