Rotieren von Zertifikaten in Azure Kubernetes Service (AKS)
Azure Kubernetes Service (AKS) verwendet Zertifikate für die Authentifizierung bei vielen seiner Komponenten. Cluster mit rollenbasierter Azure-Zugriffssteuerung (Azure RBAC), die nach März 2022 erstellt wurden, werden mit automatischer Zertifikatrotierung aktiviert. Es ist ratsam, diese Zertifikate aus Sicherheits- bzw. Richtliniengründen in regelmäßigen Abständen zu rotieren. Beispielsweise kann es eine Richtlinie bei Ihnen geben, dass Sie alle Ihre Zertifikate alle 90 Tage rotieren müssen.
Hinweis
Die automatische Rotation der Zertifikate wird standardmäßig nur für RBAC-aktivierte AKS-Cluster aktiviert.
In diesem Artikel wird gezeigt, wie die Rotation der Zertifikate in Ihrem AKS-Cluster funktioniert.
Voraussetzungen
Für diesen Artikel ist die Azure CLI-Version 2.0.77 oder höher erforderlich. Führen Sie az --version
aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.
AKS-Zertifikate, Zertifizierungsstellen und Dienstkonten
AKS generiert und verwendet die folgenden Zertifikate, Zertifizierungsstellen (ZS) und Dienstkonten (SA):
- Der AKS-API-Server erstellt eine Zertifizierungsstelle, die als Cluster-ZS bezeichnet wird.
- Der API-Server verfügt über eine Clusterzertifizierungsstelle, die Zertifikate für die unidirektionale Kommunikation vom API-Server zu kubelets signiert.
- Jedes Kubelet erstellt eine Zertifikatsignierungsanforderung (Certificate Signing Request, CSR), die von der Cluster-ZS signiert wird, für die Kommunikation vom Kubelet zum API-Server.
- Der API-Aggregator verwendet die Clusterzertifizierungsstelle zum Ausstellen von Zertifikaten für die Kommunikation mit anderen APIs. Der API-Aggregator kann auch über eine eigene Zertifizierungsstelle zum Ausstellen dieser Zertifikate verfügen, aber zurzeit verwendet er die Clusterzertifizierungsstelle.
- Jeder Knoten verwendet ein SA-Token, das von der Cluster-ZS signiert wird.
- Der
kubectl
-Client verfügt über ein Zertifikat für die Kommunikation mit dem AKS-Cluster.
Microsoft verwaltet alle in diesem Abschnitt erwähnten Zertifikate mit Ausnahme des Clusterzertifikats.
Hinweis
- AKS-Cluster, die vor Mai 2019 erstellt wurden, besitzen Zertifikate, die nach zwei Jahren ablaufen.
- AKS-Cluster, die nach Mai 2019 erstellt wurden, besitzen Cluster-ZS-Zertifikate, die nach 30 Jahren ablaufen.
Sie können überprüfen, wann Ihr Cluster erstellt wurde, indem Sie den Befehl kubectl get nodes
verwenden, der Ihnen das Alter Ihrer Knotenpools anzeigt.
Überprüfen des Ablaufdatums des Zertifikats
Überprüfen des Ablaufdatums des Clusterzertifikats
Überprüfen Sie mit dem Befehl
kubectl config view
das Ablaufdatum des Clusterzertifikats.kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
Überprüfen des Ablaufdatums des API-Serverzertifikats
Überprüfen Sie das Ablaufdatum des API-Serverzertifikats mit dem folgenden
curl
-Befehl.curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
Überprüfen des Ablaufdatums des VMAS-Agent-Knotenzertifikats
Überprüfen Sie mit dem Befehl
az vm run-command invoke
das Ablaufdatum des VMAS-Agent-Knotenzertifikats.az vm run-command invoke --resource-group MC_rg_myAKSCluster_region --name vm-name --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
Überprüfen des Zertifikatablaufs des Agent-Knotens für die VM-Skalierungsgruppe
Überprüfen Sie mithilfe des Befehls
az vmss run-command invoke
das Ablaufdatum des Agent-Knotenzertifikats der VM-Skalierungsgruppe.az vmss run-command invoke --resource-group "MC_rg_myAKSCluster_region" --name "vmss-name" --command-id RunShellScript --instance-id 1 --scripts "openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate" --query "value[0].message"
Automatische Zertifikatrotation
Damit AKS Zertifikate, die nicht von Zertifizierungsstellen stammen, automatisch rotieren können, muss das Cluster über TLS Bootstrapping verfügen, das standardmäßig in allen Azure-Regionen aktiviert wird.
Hinweis
- Wenn Sie über ein vorhandenes Cluster verfügen, müssen Sie dieses Cluster aktualisieren, um die automatische Rotation des Zertifikats zu aktivieren.
- Deaktivieren Sie Bootstrap nicht, damit die automatische Rotation aktiviert bleibt.
- Wenn das Cluster während der automatischen Zertifikatsrotation den Status „Beendet“ hat, werden nur die Zertifikate der Steuerelementebene rotiert. In diesem Fall sollten Sie den Knotenpool nach der Zertifikatsrotation neu erstellen, um die Zertifikatsrotation des Knotenpools einzuleiten.
Für alle AKS-Cluster, die nach März 2022 mit Azure Kubernetes Service 2 erstellt oder aktualisiert wurden, rotieren automatisch nicht-CA-Zertifikate auf den Steuerelementebenen- und Agent-Knoten innerhalb von 80 % der gültigen Zeit des Clientzertifikats, bevor sie ohne Ausfallzeiten für das Cluster ablaufen.
Wie kann überprüft werden, ob der aktuelle Agent-Knotenpool mit TLS-Bootstrapping aktiviert ist?
Überprüfen Sie, ob für Ihr Cluster TLS-Bootstrapping aktiviert ist, indem Sie zu einem der folgenden Pfade navigieren:
- Auf einem Linux-Knoten ist dies /var/lib/kubelet/bootstrap-kubeconfig oder /host/var/lib/kubelet/bootstrap-kubeconfig.
- Auf einem Windows-Knoten: C:\k\bootstrap-config
Weitere Informationen finden Sie unter Herstellen einer Verbindung mit Azure Kubernetes Service-Clusterknoten zur Wartung oder Problembehandlung.
Hinweis
Der Dateipfad kann sich ändern, wenn sich Kubernetes-Versionen weiterentwickeln.
Sobald eine Region konfiguriert ist, erstellen Sie ein neues Cluster oder aktualisieren Sie ein vorhandenes Cluster, um die automatische Rotation für das Clusterzertifikat einzustellen. Sie müssen die Steuerungsebene und den Knotenpool aktualisieren, um dieses Feature zu aktivieren.
Manuelles Rotieren Ihrer Cluster-Zertifikate
Warnung
Beim Rotieren von Zertifikaten mithilfe von az aks rotate-certs
werden alle Ihre Knoten und deren Betriebssystemdatenträger neu erstellt, VM-Skalierungsgruppen und ihre Datenträger eingestellt, was dazu führen kann, dass des AKS-Cluster bis zu 30 Minuten ausfällt.
Verbinden Sie sich mit Ihrem Cluster mithilfe des Befehls
az aks get-credentials
.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Rotieren Sie alle Zertifikate, ZSs und SAs auf Ihrem Cluster mit dem Befehl
az aks rotate-certs
.az aks rotate-certs --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Wichtig
Der
az aks rotate-certs
-Vorgang kann bis zu 30 Minuten dauern. Wenn der Befehl vor dem Abschluss fehlschlägt, überprüfen Sie mithilfe vonaz aks show
, ob der Status des Clustersaz aks show
lautet. Wenn sich der Cluster in einem fehlerhaften Zustand befindet, führen Sieaz aks rotate-certs
noch mal aus, um die Zertifikate erneut zu rotieren.Vergewissern Sie sich, dass die alten Zertifikate nicht mehr gültig sind, indem Sie einen
kubectl
-Befehl verwenden, z. Bkubectl get nodes
.kubectl get nodes
Wenn Sie die von
kubectl
verwendeten Zertifikate nicht aktualisiert haben, wird ein Fehler angezeigt, welcher der folgenden Beispielausgabe ähnelt:Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "ca")
Aktualisieren Sie das von
kubectl
verwendete Zertifikat mithilfe des Befehlsaz aks get-credentials
mit dem Flag--overwrite-existing
.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --overwrite-existing
Überprüfen Sie, ob die Zertifikate mit dem Befehl
kubectl get
aktualisiert wurden.kubectl get nodes
Hinweis
Wenn Sie Dienste haben, die auf AKS basieren, müssen Sie möglicherweise auch ihre Zertifikate aktualisieren.
Nächste Schritte
In diesem Artikel wurde gezeigt, wie Sie die Zertifikate, Zertifizierungsstellen und SAs Ihres Clusters manuell und automatisch rotieren. Weitere Informationen finden Sie unter Best Practices für Clustersicherheit und Upgrades in Azure Kubernetes Service (AKS).
Azure Kubernetes Service