配置檔適用性:級別 1
通常不允許容器以
securityContext.privileged
標誌設置為 true
的方式運行。特權容器可以訪問所有 Linux 核心功能和設備。以完全特權運行的容器幾乎可以執行主機能做的所有操作。此標誌的存在是為了允許特殊用例,例如操作網絡堆棧和訪問設備。
必須定義至少一個不允許特權容器的入場控制政策。
如果您需要運行特權容器,應在單獨的政策中定義此項,並且您應仔細檢查以確保只有有限的服務帳戶和用戶被授予使用該政策的權限。
![]() |
注意預設情況下,對特權容器的創建沒有任何限制。
|
影響
定義為
spec.containers[].securityContext.privileged: true
、spec.initContainers[].securityContext.privileged: true
和 spec.ephemeralContainers[].securityContext.privileged: true
的 Pods 將不被允許。審計
列出叢集中每個命名空間中使用的政策,確保每項政策都不允許特權容器的進入。
由於手動檢查每個 pod 的配置可能會很繁瑣,特別是在擁有許多 pod 的環境中,您可以使用 grep 或其他命令行工具來採用更自動化的方法。
以下是一個結合 kubectl、grep 和 shell 腳本的範例,以提供更自動化的解決方案:
選項 1
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.containers[].securityContext.privileged == true) | .metadata.name'
選項 2
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.metadata.namespace != "kube-system" and .spec.containers[]?.securityContext?.privileged == true) | {pod: .metadata.name, namespace: .metadata.namespace, container: .spec.containers[].name}'
在創建 Pod 安全政策時,預設會排除
["kube-system"]
命名空間。此命令使用 jq,一個命令行 JSON 處理器,來解析 kubectl get pods 的 JSON 輸出,並過濾出任何容器的
securityContext.privileged
標誌設置為 true
的 pods。![]() |
注意您可能需要根據您的具體需求和 Pod 規範的結構來調整命令。
|
補救
在集群中每個具有用戶工作負載的命名空間中添加策略,以限制特權容器的進入。
要在您的集群中為命名空間啟用 PSA,請設置
pod-security.kubernetes.io/enforce
標籤,並指定您想要強制執行的策略值。kubectl label --overwrite ns NAMESPACE pod- security.kubernetes.io/enforce=restricted
上述命令對 NAMESPACE 命名空間強制執行限制政策。
您也可以為所有命名空間啟用 Pod 安全性驗證。例如:
kubectl label --overwrite ns --all pod- security.kubernetes.io/warn=baseline