設定檔適用性:等級 1 - 工作節點
確保在 Kubelets 中的
--authorization-mode 參數未設定為 AlwaysAllow,以透過啟用明確授權來增強安全性。配置 Kubelets 以允許所有已驗證的請求,包括匿名請求,而不進行 apiserver 的明確授權檢查,可能會構成安全風險。限制此行為至關重要,以便僅允許明確授權的請求。透過將
--authorization-mode 設定為更具限制性的設置,您可以確保未授權的請求被系統性地拒絕,從而增強您 Kubernetes 環境的安全性。影響
未授權的請求將被拒絕。
稽核
稽核方法 1:
注意Kubelets 可以透過配置檔案或命令列參數進行配置。命令列參數具有優先權。在審核 Kubelet 配置時,請檢查命令列參數和配置檔案條目。
|
-
SSH進入每個節點並執行以下命令以查看活躍的Kubelet進程詳細信息:
ps -ef | grep kubelet
-
從輸出中的 --config 參數識別配置檔案的位置資訊。使用以下命令查看檔案:
sudo less /path/to/kubelet-config.json
-
確認 Webhook 驗證已啟動:
-
Kubelet 服務的命令行參數:
--authentication-token-webhook
-
Kubelet 組態設定檔:
{ "authentication": { "webhook": { "enabled": true } } }
-
-
驗證授權模式是否設置為 WebHook:
-
Kubelet 服務的命令行參數:
--authorization-mode=Webhook
-
Kubelet 組態設定檔:
{ "authorization": { "mode": "Webhook" } }
-
稽核方法 2:
使用 kubectl 通過 Kubernetes API 的 "/configz" 端點查看 Kubelet 的運行配置:
-
發現您叢集中的所有節點:
kubectl get nodes
-
使用 kubectl 在本地端口(例如 8080)啟動 Proxy:
kubectl proxy --port=8080
-
在另一個終端中,為每個節點執行以下命令:
export NODE_NAME=my-node-name curl http://localhost:8080/api/v1/nodes/${NODE_NAME}/proxy/configz -
通過檢查 API 回應來驗證 Webhook 驗證是否已啟動:
{ "authentication": { "webhook": { "enabled": true } } } -
通過檢查 API 回應來驗證授權模式是否設置為 WebHook:
{ "authorization": { "mode": "Webhook" } }
補救
方法一:
-
SSH 進入每個節點。
-
定位 Kubelet 設定檔:
ps -ef | grep kubelet
-
使用以下方式查看配置檔案:
sudo less /path/to/kubelet-config.json
-
透過設定以下參數啟用 Webhook 驗證:
{ "authentication": { "webhook": { "enabled": true } }, "authorization": { "mode": "Webhook" } } -
重新啟動 kubelet 服務並檢查其狀態(適用於使用 systemd 的系統範例):
systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
方法二:
-
如果使用命令列參數,請編輯 kubelet 服務檔案以包含以下參數:
--authentication-token-webhook --authorization-mode=Webhook -
對於使用 systemd 的系統,請編輯位於 /etc/systemd/system/kubelet.service.d/10-kubelet-args.conf 的檔案。
-
重新啟動 kubelet 服務並檢查其狀態(適用於使用 systemd 的系統範例):
systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
