設定檔適用性:等級 1
如果
kubelet 正在運行,並且是由 kubeconfig 檔案配置的,請確保 Proxy kubeconfig 檔案的權限為 644 或更嚴格。kubelet kubeconfig 檔案控制工作節點中 kubelet 服務的各種參數。您應限制其檔案權限以維護檔案的完整性。該檔案應僅允許系統管理員寫入。可以將
kubelet 的 kubeconfig 參數配置為 Kubernetes ConfigMap,而不是文件。在這種情況下,沒有 proxy kubeconfig 文件。
注意請參閱 AWS EKS 文件以了解預設值。
|
影響
確保 kubeconfig 檔案的權限設置為 644 或更嚴格,可以顯著加強 Kubernetes 環境的安全狀況,防止未經授權的修改。這限制了對 kubeconfig
檔案的寫入權限,確保只有管理員可以更改重要的 kubelet 配置,從而降低惡意更改可能危害叢集完整性的風險。
然而,此配置可能會略微影響可用性,因為它限制了非管理員用戶快速調整 kubelet 設定的能力。管理員需要在安全需求與操作靈活性之間取得平衡,可能需要調整工作流程以管理
kubelet 配置。
稽核
方法 1
SSH 到工作節點。
-
輸入以下指令以檢查 Kubelet 服務是否正在運行:
sudo systemctl status kubelet
輸出應返回Active: active (running) since..。 -
在每個節點上執行以下命令以找到適當的 kubeconfig 檔案:
ps -ef | grep kubelet
輸出應返回類似--kubeconfig /var/lib/kubelet/kubeconfig的內容,這是 kubeconfig 檔案的 位置資訊。 -
執行此命令以獲取 kubeconfig 檔案的權限:
stat -c %a /var/lib/kubelet/kubeconfig
-
確認如果指定了檔案且該檔案存在,權限應為 644 或更嚴格。
方法二
建立並執行特權 Pod
-
執行一個具有足夠權限以存取主機檔案系統的 Pod。為此,部署一個使用 hostPath 卷將節點的檔案系統掛載到 Pod 的 Pod。一個簡單的 Pod 定義範例,將主機的根目錄掛載到 Pod 內的 /host:
apiVersion: v1 kind: Pod metadata: name: file-check spec: volumes: - name: host-root hostPath: path: / type: Directory containers: - name: nsenter image: busybox command: ["sleep", "3600"] volumeMounts: - name: host-root mountPath: /host securityContext: privileged: true -
將此內容儲存到檔案中(例如,file-check-pod.yaml)並建立 Pod:
kubectl apply -f file-check-pod.yaml
-
一旦 pod 運行,執行進入以檢查節點上的文件權限:
kubectl exec -it file-check -- sh
-
現在您在 Pod 的 Shell 中,但您可以透過 /host 目錄存取節點的檔案系統並檢查檔案的權限等級:
ls -l /host/var/lib/kubelet/kubeconfig
-
確認如果指定了檔案且該檔案存在,權限應為 644 或更嚴格。
補救
在每個工作節點上執行以下命令(根據您系統上的檔案位置)。例如:
chmod 644 <kubeconfig file>
