Profilanwendbarkeit: Stufe 1
Erlaube nicht alle Anfragen. Aktiviere explizite Autorisierung.
Standardmäßig erlauben Kubelets alle authentifizierten Anfragen (auch anonyme) ohne
explizite Autorisierungsprüfungen vom Apiserver. Sie sollten dieses Verhalten einschränken
und nur explizit autorisierte Anfragen zulassen.
HinweisSiehe die Azure AKS-Dokumentation für den Standardwert.
|
Auswirkung
Nicht autorisierte Anfragen werden abgelehnt.
Prüfung
Audit Method 1Wenn eine Kubelet-Konfigurationsdatei verwendet wird, überprüfen Sie, ob ein Eintrag
für
"authentication": "webhook": "enabled" auf true gesetzt ist.-
SSH zum entsprechenden Knoten.
-
Führen Sie den folgenden Befehl auf jedem Knoten aus, um die entsprechende Kubelet-Konfigurationsdatei zu finden:
ps -ef | grep kubelet
Die Ausgabe sollte etwas Ähnliches wie--config /etc/kubernetes/kubelet/kubelet-config.jsonzurückgeben, was den Speicherort der Kubelet-Konfigurationsdatei darstellt. -
Öffnen Sie die Kubelet-Konfigurationsdatei:
sudo more /etc/kubernetes/kubelet/kubelet-config.json
-
Überprüfen Sie, dass
"authentication": {"webhook": { "enabled":auftruegesetzt ist.Wenn das Argument"authentication": {"mode":vorhanden ist, überprüfen Sie, dass es nicht aufAlwaysAllowgesetzt ist. Wenn es nicht vorhanden ist, überprüfen Sie, dass eine Kubelet-Konfigurationsdatei durch--configangegeben ist und dass diese Datei"authentication": {"mode":auf etwas anderes alsAlwaysAllowsetzt.
Wenn Sie den api configz Endpunkt verwenden, suchen Sie nach dem Status von
Authentifizierung... "webhook":{"enabled":true}, indem Sie die Live-Konfiguration von den Knoten extrahieren, die kubelet ausführen.-
Setzen Sie die lokale Proxy-Portnummer und die folgenden Variablen und geben Sie die Proxy-Portnummer und den Knotennamen an:
HOSTNAME_PORT="localhost-und-Portnummer" NODE_NAME="Der-Name-des-Knotens-zur-Konfigurationsextraktion" aus der Ausgabe von "kubectl get nodes"kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 export NODE_NAME=ip-192.168.31.226.aks.internal curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
Wiederherstellung
Remediation Method 1Wenn Sie die Kubelet-Konfigurationsdatei ändern, bearbeiten Sie die Datei
kubelet-config.json /etc/kubernetes/kubelet/kubelet-config.json und setzen Sie den folgenden Parameter:"authentication"... "webhook":{"enabled":trueRemediation Method 2Wenn ausführbare Argumente verwendet werden, bearbeiten Sie die kubelet-Dienstdatei
/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf auf jedem Worker-Knoten und fügen Sie am Ende der KUBELET_ARGS-Variablenzeichenfolge den folgenden Parameter hinzu:--authorization-mode=WebhookRemediation Method 3
Wenn Sie den api configz Endpunkt verwenden, suchen Sie nach dem Status von
"authentication.*webhook":{"enabled":true", indem Sie die Live-Konfiguration von den Knoten extrahieren, die kubelet ausführen.
HinweisSiehe detaillierte Schritt-für-Schritt-Anweisungen zur ConfigMap in Rekonfigurieren eines Node-Kubelets in einem Live-Cluster und führen Sie dann die Curl-Anweisung aus dem Audit-Prozess erneut aus, um Änderungen
an der Kubelet-Konfiguration zu überprüfen:
|
kubectl proxy --port=8001 &
export HOSTNAME_PORT=localhost:8001
export NODE_NAME=ip-192.168.31.226.aks.internal
curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
For all three remediations: Basierend auf Ihrem System, starten Sie den Kubelet-Dienst neu und überprüfen Sie
den Status:
systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
