檢視次數:
設定檔適用性:等級 1
一般不允許容器在設置securityContext.privileged標誌為true的情況下運行。
特權容器可以存取所有 Linux 核心功能和設備。具有完整特權的容器幾乎可以執行主機能做的所有操作。此標誌存在是為了允許特殊使用情境,例如操作網路堆疊和存取設備。
應至少定義一項不允許特權容器的准入控制政策。
如果您需要運行特權容器,應在單獨的政策中定義,並且您應仔細檢查以確保只有有限的服務帳戶和使用者被授予使用該政策的權限。
注意
注意
預設情況下,建立特權容器沒有任何限制。

影響

使用spec.containers[].securityContext.privileged: truespec.initContainers[].securityContext.privileged: truespec.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