設定檔適用性:級別 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 腳本來實現更自動化的解決方案:
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.containers[].securityContext.privileged == true) | .metadata.name'
OR
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.containers[].securityContext.privileged == 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 規範的結構調整命令。
|
矯正性處理
在叢集中每個具有使用者工作負載的命名空間中添加政策,以限制特權容器的准入。
要在叢集中的命名空間啟用 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
可以在 Azure 入口網站中搜尋政策來找到 Pod 安全性政策和指派。