檢視次數:
設定檔適用性:等級 1 - 工作節點
確保在 Kubelets 中的 --authorization-mode 參數未設置為 AlwaysAllow,以通過啟用明確授權來增強安全性。配置為允許所有經過身份驗證的請求(包括匿名請求)而不進行 apiserver 明確授權檢查的 Kubelets 可能會構成安全風險。限制此行為至關重要,以便僅允許明確授權的請求。通過將 --authorization-mode 設置為更具限制性的設置,您可以確保未經授權的請求被系統性地拒絕,從而增強您 Kubernetes 環境的安全性。

影響

未經授權的請求將被拒絕。

稽核

稽核方法 1:
注意
注意
Kubelet 可以透過配置檔案或命令列參數進行配置。命令列參數優先。審核 Kubelet 配置時,請檢查命令列參數和配置檔案條目。
  1. SSH 進入每個節點並執行以下命令以查看活動的 Kubelet 進程詳細信息:
    ps -ef | grep kubelet
  2. 從輸出中的 --config 參數識別配置檔案的位置資訊。使用以下命令查看檔案:
    sudo less /path/to/kubelet-config.json
  3. 驗證 Webhook 驗證是否已啟動:
    • Kubelet 服務的命令列參數:
      --authentication-token-webhook
    • 在 Kubelet 配置檔案中:
              {
              "authentication": {
              "webhook": {
              "enabled": true
              }
              }
              }
             
  4. 驗證授權模式是否設置為 WebHook:
    • Kubelet 服務的命令列參數:
      --authorization-mode=Webhook
    • 在 Kubelet 配置檔案中:
              {
              "authorization": {
              "mode": "Webhook"
              }
              }
             
稽核方法 2:
通過使用 kubectl 檢查 Kubernetes API 的 "/configz" 端點來查看 Kubelet 的運行配置:
  1. 發現您叢集中所有的節點:
    kubectl get nodes
  2. 使用 kubectl 在本地端口(例如 8080)啟動 Proxy:
    kubectl proxy --port=8080
  3. 在另一個終端中,對每個節點運行以下命令:
    export NODE_NAME=my-node-name
          curl http://localhost:8080/api/v1/nodes/${NODE_NAME}/proxy/configz
  4. 通過檢查 API 響應來驗證 Webhook 驗證是否已啟動:
          {
          "authentication": {
          "webhook": {
          "enabled": true
          }
          }
          }
         
  5. 通過檢查 API 回應來驗證授權模式是否設置為 WebHook:
          {
          "authorization": {
          "mode": "Webhook"
          }
          }
         

補救措施

方法一:
  1. SSH 進入每個節點。
  2. 定位 Kubelet 配置檔:
    ps -ef | grep kubelet
  3. 使用以下命令查看配置文件:
    sudo less /path/to/kubelet-config.json
  4. 通過設置以下參數啟用 Webhook 驗證:
          {
          "authentication": {
          "webhook": {
          "enabled": true
          }
          },
          "authorization": {
          "mode": "Webhook"
          }
          }
         
  5. 重新啟動 kubelet 服務並檢查其狀態(適用於使用 systemd 的系統範例):
    systemctl daemon-reload
          systemctl restart kubelet.service
          systemctl status kubelet -l
方法二:
  1. 如果使用命令列參數,請編輯 kubelet 服務檔案以包含以下參數:
    --authentication-token-webhook
          --authorization-mode=Webhook
  2. 對於使用 systemd 的系統,編輯位於 /etc/systemd/system/kubelet.service.d/10-kubelet-args.conf 的檔案。
  3. 重新啟動 kubelet 服務並檢查其狀態(適用於使用 systemd 的系統範例):
          systemctl daemon-reload
          systemctl restart kubelet.service
          systemctl status kubelet -l