Ansichten:
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.
Hinweis
Hinweis
Siehe die Azure AKS-Dokumentation für den Standardwert.

Auswirkung

Nicht autorisierte Anfragen werden abgelehnt.

Prüfung

Audit Method 1
Wenn eine Kubelet-Konfigurationsdatei verwendet wird, überprüfen Sie, ob ein Eintrag für "authentication": "webhook": "enabled" auf true gesetzt ist.
  1. SSH zum entsprechenden Knoten.
  2. 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.json zurückgeben, was den Speicherort der Kubelet-Konfigurationsdatei darstellt.
  3. Öffnen Sie die Kubelet-Konfigurationsdatei:
    sudo more /etc/kubernetes/kubelet/kubelet-config.json
  4. Überprüfen Sie, dass "authentication": {"webhook": { "enabled": auf true gesetzt ist.
    Wenn das Argument "authentication": {"mode": vorhanden ist, überprüfen Sie, dass es nicht auf AlwaysAllow gesetzt ist. Wenn es nicht vorhanden ist, überprüfen Sie, dass eine Kubelet-Konfigurationsdatei durch --config angegeben ist und dass diese Datei "authentication": {"mode": auf etwas anderes als AlwaysAllow setzt.
Audit Method 2
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.
  1. 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 1
Wenn 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":true
Remediation Method 2
Wenn 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=Webhook
Remediation 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.
Hinweis
Hinweis
Siehe 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