Profilanwendbarkeit: Stufe 1
Aktivieren Sie die Kubelet-Authentifizierung mit Zertifikaten.
Die Verbindungen vom Apiserver zum Kubelet werden verwendet, um Protokolle für Pods
abzurufen, sich (über kubectl) mit laufenden Pods zu verbinden und die Port-Forwarding-Funktionalität
des Kubelets zu nutzen. Diese Verbindungen enden am HTTPS-Endpunkt des Kubelets. Standardmäßig
überprüft der Apiserver das Dienstzertifikat des Kubelets nicht, was die Verbindung
anfällig für Man-in-the-Middle-Angriffe macht und unsicher über unzuverlässige und/oder
öffentliche Netzwerke auszuführen ist. Die Aktivierung der Kubelet-Zertifikatsauthentifizierung
stellt sicher, dass der Apiserver das Kubelet authentifizieren kann, bevor Anfragen
gestellt werden.
![]() |
HinweisSiehe die Azure AKS-Dokumentation für den Standardwert.
|
Auswirkung
Sie müssen TLS sowohl auf dem Apiserver als auch auf den Kubelets konfigurieren.
Prüfung
Audit Method 1:
Wenn eine Kubelet-Konfigurationsdatei verwendet wird, überprüfen Sie, ob ein Eintrag
für
"x509": {"clientCAFile": "/path/to/ca.crt"}
vorhanden ist, der auf den Speicherort der Client-Zertifikatsbehörde-Datei gesetzt
ist.-
SSH zum entsprechenden Knoten und führen Sie den folgenden Befehl aus, um die Kubelet-Konfigurationsdatei zu finden:
ps -ef | grep kubelet
Die Ausgabe sollte etwas Ähnliches wie--config /etc/kubernetes/kubelet/kubelet-config.json
zurückgeben. -
Öffnen Sie die Kubelet-Konfigurationsdatei:
sudo more /etc/kubernetes/kubelet/kubelet-config.json
-
Überprüfen Sie, dass
"x509": {"clientCAFile:"
existiert und auf den entsprechenden Speicherort der Client-Zertifikatsbehörde-Datei eingestellt ist. -
Wenn das Argument
"x509": {"clientCAFile:"
nicht vorhanden ist, überprüfen Sie, ob eine Kubelet-Konfigurationsdatei durch--config
angegeben ist und ob die Datei"authentication": { "x509": {"clientCAFile:"
auf den Speicherort der Client-Zertifikatsbehörden-Datei setzt.
Audit Method 2:
Wenn Sie den API-Configz-Endpunkt verwenden, ziehen Sie in Betracht, den Status von
"authentication"... "x509": {"clientCAFile": "/etc/kubernetes/pki/ca.crt"}
zu suchen, indem Sie die Live-Konfiguration von den Knoten extrahieren, die Kubelet
ausführen.-
Legen Sie die lokale Proxy-Portnummer und die folgenden Variablen fest und geben Sie die Proxy-Portnummer und den Knotennamen an:
HOSTNAME_PORT="localhost-and-port-number"
NODE_NAME="The-Name-Of-Node-To-Extract-Configuration" from the output of "kubectl get nodes"
kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 (example host and port number) export NODE_NAME=ip-192.168.31.226.aks.internal (example node name from "kubectl get nodes") curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
Wiederherstellung
Remediation Method 1:
Wenn Sie die Kubelet-Konfigurationsdatei ändern, bearbeiten Sie
/etc/kubernetes/kubelet/kubelet-config.json
und setzen Sie den untenstehenden Parameter auf false:"authentication": { "x509": {"clientCAFile:" to the location of the client CA file.
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 Folgendes zur Variablenzeichenfolge KUBELET_ARGS
hinzu:--client-ca-file=<path/to/client-ca-file>
Remediation Method 3:
Wenn Sie den API-Configz-Endpunkt verwenden, ziehen Sie in Betracht, den Status von
"authentication.*x509": {"clientCAFile": "/etc/kubernetes/pki/ca.crt"}
zu überprüfen, indem Sie die Live-Konfiguration von den Knoten extrahieren, die Kubelet
ausführen.Siehe schrittweise ConfigMap-Verfahren in der Kubernetes-Dokumentation und führen Sie den Curl-Befehl aus dem Audit-Prozess erneut aus, um Änderungen an
der Kubelet-Konfiguration zu überprüfen:
kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 (example host and port number) export NODE_NAME=ip-192.168.31.226.aks.internal (example node name from "kubectl get nodes") curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
For all three remediations:
Starten Sie den
kubelet
-Dienst neu und überprüfen Sie den Status:systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l