檢視次數:
設定檔適用性:等級 1
如果 kubelet 正在運行,並且是由 kubeconfig 文件配置的,請確保 Proxy kubeconfig 文件的權限為 644 或更嚴格。
kubelet kubeconfig 檔案控制工作節點中 kubelet 服務的各種參數。您應限制其檔案權限以維護檔案的完整性。該檔案應僅允許系統管理員寫入。
可以將 kubeletkubeconfig 參數配置為 Kubernetes ConfigMap,而不是文件。在這種情況下,沒有 proxy kubeconfig 文件。
注意
注意
請參閱 GKE 文件以了解預設值。

影響

確保 kubeconfig 文件的權限設置為 644 或更嚴格,可以顯著增強 Kubernetes 環境的安全狀況,防止未經授權的修改。
這會限制對 kubeconfig 檔案的寫入權限,確保只有管理員可以更改重要的 kubelet 配置,從而降低惡意更改可能危害叢集完整性的風險。
然而,此配置可能會稍微影響可用性,因為它限制了非管理員用戶快速調整kubelet設定的能力。
管理員需要在安全需求與操作靈活性之間取得平衡,可能需要調整工作流程以管理kubelet配置。

稽核

使用 Google Cloud 主控台
  1. 前往 Google Cloud Console Kubernetes Engine 頁面,以進入 Kubernetes Engine。
  2. 點擊所需的叢集以打開詳細資訊頁面,然後點擊所需的節點池以打開節點池詳細資訊頁面。3.
  3. 記下所需節點的名稱
  4. 前往Google Cloud Console VM 實例頁面查看 VM 實例
  5. 尋找所需的節點並點擊SSH以開啟與該節點的 SSH 連接。
使用命令列
方法一
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
上述命令的輸出會提供kubeconfig檔案的權限。請確認如果指定了檔案且該檔案存在,則其權限應為644或更嚴格。
方法二
建立並執行特權 Pod。
您將需要運行一個具有足夠權限以存取主機檔案系統的 Pod。這可以透過部署一個使用 hostPath 卷將節點的檔案系統掛載到 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>