檢視次數:
配置檔適用性:級別 1
一般不允許容器以 allowPrivilegeEscalation 標誌設置為 true 運行。允許此權限可能導致運行容器的進程獲得比其啟動時更多的權限。
請注意,這些權限仍然受到整體容器沙箱的限制,且此設定與使用特權容器無關。
一個運行時設置了 allowPrivilegeEscalation 標誌為 true 的容器,可能會有進程獲得比其父進程更高的權限。
應至少定義一個不允許容器進行權限升級的入場控制政策。存在允許 setuid 二進位檔運行的選項(預設為啟用)。
如果您需要運行使用 setuid 二進制文件或需要權限升級的容器,則應在單獨的政策中定義此需求,並且您應仔細檢查以確保只有有限的服務帳戶和用戶被授予使用該政策的權限。
注意
注意
默認情況下,容器內的進程在容器上下文中提升權限的能力沒有任何限制。

影響

定義為 spec.allowPrivilegeEscalation: true 的 Pods 將不被允許,除非它們在特定政策下運行。

審計

列出叢集中的每個命名空間所使用的政策,並確保每項政策都不允許容器的入境,這些容器允許權限升級。
此命令獲取所有命名空間中的所有 Pod,將其詳細信息以 JSON 格式輸出,並使用 jq 解析和過濾輸出,以查找 allowPrivilegeEscalation 設置為 true 的容器。
選項 1
kubectl get pods --all-namespaces -o json | jq -r '.items[] |
select(any(.spec.containers[];
.securityContext.allowPrivilegeEscalation == true)) |
"\(.metadata.namespace)/\(.metadata.name)"'
選項 2
kubectl get pods --all-namespaces -o json | jq '.items[] |
select(.metadata.namespace != "kube-system" and .spec.containers[];
.securityContext.allowPrivilegeEscalation == 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 規範的結構來調整命令。

補救

為每個具有用戶工作負載的集群命名空間添加策略,以限制將.spec.allowPrivilegeEscalation設置為true的容器的進入。