Verwalten von SSH für den sicheren Zugriff auf AKS-Knoten (Azure Kubernetes Service)

In diesem Artikel wird beschrieben, wie Sie SSH-Schlüssel (Vorschau) in Ihren AKS-Clustern oder Knotenpools während der ersten Bereitstellung oder zu einem späteren Zeitpunkt konfigurieren.

AKS unterstützt die folgenden Konfigurationsoptionen zum Verwalten von SSH-Schlüsseln auf Clusterknoten:

  • Erstellen eines Clusters mit SSH-Schlüsseln
  • Aktualisieren des SSH-Schlüssels in einem vorhandenen AKS-Cluster
  • Deaktivieren und Aktivieren des SSH-Diensts

Wichtig

AKS-Previewfunktionen stehen gemäß dem Self-Service- und Aktivierungsprinzip zur Verfügung. Vorschauversionen werden „wie besehen“ und „wie verfügbar“ bereitgestellt und sind von Service Level Agreements und der Herstellergarantie ausgeschlossen. AKS-Vorschauversionen werden teilweise vom Kundensupport auf Grundlage der bestmöglichen Leistung abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen. Weitere Informationen finden Sie in den folgenden Supportartikeln:

Voraussetzungen

  • Sie benötigen aks-preview Version 0.5.116 oder höher, um Update verwenden zu können.
  • Sie benötigen aks-preview Version 1.0.0b6 oder höher, um Disable verwenden zu können.
  • Die SSH-Features Create undUpdate unterstützen Linux-, Windows- und Azure Linux-Knotenpools auf vorhandenen Clustern.
  • Das SSH-Feature Disable wird in dieser Vorschauversion in Knotenpools, die das Windows Server-Betriebssystem ausführen, nicht unterstützt.

Installieren der Azure CLI-Erweiterung aks-preview

  1. Installieren Sie die Erweiterung „aks-preview“ mithilfe des Befehls az extension add.

    az extension add --name aks-preview
    
  2. Führen Sie mit dem Befehl az extension update ein Update auf die neueste Version der Erweiterung aus.

    az extension update --name aks-preview
    

Registrieren des DisableSSHPreview-Featureflags

Um das SSH-Feature Disable verwenden zu können, führen Sie die folgenden Schritte aus, um es in Ihrem Abonnement zu registrieren und zu aktivieren.

  1. Registrieren Sie das Featureflag DisableSSHPreview mithilfe des Befehls az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    

    Es dauert einige Minuten, bis der Status Registered (Registriert) angezeigt wird.

  2. Überprüfen Sie den Registrierungsstatus mithilfe des Befehls az feature show.

    az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    
  3. Wenn der Zustand Registered (Registriert) lautet, aktualisieren Sie die Registrierung des Ressourcenanbieters Microsoft.ContainerService mithilfe des Befehls az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Erstellen eines AKS-Clusters mit SSH-Schlüsseln

Verwenden Sie den Befehl az aks create zum Bereitstellen eines AKS-Clusters mit einem öffentlichen SSH-Schlüssel. Sie können entweder den Schlüssel oder eine Schlüsseldatei mit dem Argument --ssh-key-value angeben.

SSH-Parameter Beschreibung Standardwert
--generate-ssh-key Wenn Sie keine eigenen SSH-Schlüssel haben, geben Sie --generate-ssh-key an. Die Azure CLI generiert automatisch eine Reihe von SSH-Schlüsseln und speichert sie im Standardverzeichnis ~/.ssh/.
--ssh-key-value Öffentlicher Schlüsselpfad oder Schlüsselinhalt zur Installation auf Knoten-VMs für den SSH-Zugriff. Beispiel: ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm. ~/.ssh/id_rsa.pub
--no-ssh-key Wenn Sie keine SSH-Schlüssel benötigen, geben Sie dieses Argument an. AKS generiert jedoch automatisch eine Reihe von SSH-Schlüsseln, da die Azure Virtual Machine-Ressourcenabhängigkeit keine leere SSH-Schlüsseldatei unterstützt. Daher werden die Schlüssel nicht zurückgegeben und können nicht für SSH in den Knoten-VMs verwendet werden. Der private Schlüssel wird verworfen und nicht gespeichert.

Hinweis

Wenn keine Parameter angegeben sind, verweist die Azure CLI standardmäßig auf die in der Datei ~/.ssh/id_rsa.pub gespeicherten SSH-Schlüssel. Wenn die Schlüssel nicht gefunden werden, gibt der Befehl die Nachricht An RSA key file or key value must be supplied to SSH Key Value zurück.

Hier einige Beispiele für diesen Befehl:

  • So erstellen Sie einen Cluster und verwenden die standardmäßig generierten SSH-Schlüssel:

    az aks create --name myAKSCluster --resource-group MyResourceGroup --generate-ssh-key
    
  • Um eine SSH-Datei für öffentliche Schlüssel anzugeben, schließen Sie das Argument --ssh-key-value ein:

    az aks create --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
    

Aktualisieren des SSH-Schlüssels in einem vorhandenen AKS-Cluster

Verwenden Sie den Befehl az aks update, um den öffentlichen SSH-Schlüssel (Vorschau) in Ihrem Cluster zu aktualisieren. Bei diesem Vorgang wird der Schlüssel in allen Knotenpools aktualisiert. Sie können entweder einen Schlüssel oder eine Schlüsseldatei mit dem Argument --ssh-key-value angeben.

Hinweis

Das Aktualisieren der SSH-Schlüssel wird für Azure-VM-Skalierungsgruppen mit AKS-Clustern unterstützt.

Hier einige Beispiele für diesen Befehl:

  • Um einen neuen Wert für einen öffentlichen SSH-Schlüssel anzugeben, fügen Sie das --ssh-key-value-Argument ein:

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
    
  • Um eine Datei mit dem öffentlichen SSH-Schlüssel anzugeben, verwenden Sie das Argument --ssh-key-value:

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
    

Wichtig

Nachdem Sie den SSH-Schlüssel aktualisieren, führt AKS kein automatisches Update des Knotenpools durch. Sie können jederzeit einen Updatevorgang für den Knotenpool ausführen. Der Vorgang der Aktualisierung der SSH-Schlüssel wird wirksam, nachdem eine Aktualisierung des Knotenimages abgeschlossen ist.

Deaktivieren von SSH – Übersicht

Um die Sicherheit zu verbessern und Ihre Unternehmenssicherheitsanforderungen oder -strategie zu unterstützen, wird das Deaktivieren von SSH (Vorschau) von AKS sowohl auf Cluster- als auch auf Knotenpoolebene unterstützt. Die Deaktivierung von SSH bietet einen vereinfachten Ansatz im Vergleich zu der einzigen unterstützten Lösung ein, die die Konfiguration von Netzwerksicherheitsgruppenregeln auf der AKS-Subnetz-/Knoten-Netzwerkschnittstellenkarte (NIC) erfordert. SSH deaktivieren unterstützt nur Knotenpools von VM Scale Sets

Wenn Sie SSH bei der Erstellung des Clusters deaktivieren, wird dies nach der Erstellung des Clusters wirksam. Wenn Sie SSH jedoch in einem vorhandenen Cluster- oder Knotenpool deaktivieren, deaktiviert AKS SSH nicht automatisch. Sie können jederzeit einen Updatevorgang für den Knotenpool ausführen. Der Vorgang zum Deaktivieren/Aktivieren von SSH-Schlüsseln wird wirksam, nachdem die Aktualisierung des Knotenimages abgeschlossen worden ist.

Hinweis

Wenn Sie SSH auf Clusterebene deaktivieren, gilt dies für alle vorhandenen Knotenpools. Bei allen Knotenpools, die nach diesem Vorgang erstellt werden, ist SSH standardmäßig aktiviert, und Sie müssen diese Befehle erneut ausführen, um sie zu deaktivieren.

SSH-Parameter Beschreibung
disabled Der SSH-Dienst wird deaktiviert.
localuser Der SSH-Dienst wird aktiviert, und Benutzer oder Benutzerinnen mit SSH-Schlüsseln können sicher auf den Knoten zugreifen.

Hinweis

Der kubectl-Debugknoten funktioniert nach der Deaktivierung von SSH weiterhin, weil er nicht vom SSH-Dienst abhängt.

Deaktivieren von SSH in einer neuen Clusterbereitstellung

Standardmäßig ist der SSH-Dienst auf AKS-Clusterknoten für alle Benutzer und Benutzerinnen sowie Pods geöffnet, die auf dem Cluster ausgeführt werden. Sie können den direkten SSH-Zugriff von einem beliebigen Netzwerk auf Clusterknoten verhindern, um den Angriffsvektor zu begrenzen, wenn ein Container in einem Pod kompromittiert wird. Verwenden Sie den Befehl az aks create, um einen neuen Cluster zu erstellen, und geben Sie das Argument --ssh-access disabled an, um SSH (Vorschau) während der Clustererstellung für alle Knotenpools zu deaktivieren.

Wichtig

Nachdem Sie den SSH-Dienst deaktiviert haben, können Sie keine SSH-Verbindung mit dem Cluster herstellen, um administrative Aufgaben durchzuführen oder Probleme zu behandeln.

Hinweis

Bei einem neu erstellten Cluster konfiguriert ssh nur den ersten Systemknotenpool. Alle anderen Knotenpools müssen auf Knotenpoolebene konfiguriert werden.

az aks create --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled

Nach wenigen Minuten ist die Ausführung des Befehls abgeschlossen, und es werden Informationen zum Cluster im JSON-Format zurückgegeben. Das folgende Beispiel zeigt die Ausgabe und die Ergebnisse im Zusammenhang mit der Deaktivierung von SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Deaktivieren von SSH in einem vorhandenen Cluster

Verwenden Sie den Befehl az aks update, um einen vorhandenen Cluster zu aktualisieren, und geben Sie das Argument --ssh-access disabled an, um SSH (Vorschau) für alle Knotenpools im Cluster zu deaktivieren.

az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled

Nach wenigen Minuten ist die Ausführung des Befehls abgeschlossen, und es werden Informationen zum Cluster im JSON-Format zurückgegeben. Das folgende Beispiel zeigt die Ausgabe und die Ergebnisse im Zusammenhang mit der Deaktivierung von SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Damit die Änderung wirksam wird, müssen Sie mithilfe des Befehls az aks nodepool upgrade für alle Knotenpools ein Reimaging durchführen.

az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only

Wichtig

Während dieses Vorgangs werden alle Instanzen der VM-Skalierungsgruppe aktualisiert und das Image für die Verwendung der neuen SSH-Konfiguration neu erstellt.

Deaktivieren von SSH für einen neuen Knotenpool

Verwenden Sie den Befehl az aks nodepool add, um einen Knotenpool hinzuzufügen, und geben Sie das Argument --ssh-access disabled an, um SSH während der Erstellung des Knotenpools zu deaktivieren.

az aks nodepool add --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled  

Nach wenigen Minuten ist die Ausführung des Befehls abgeschlossen, und es werden Informationen zum Cluster im JSON-Format zurückgegeben, die anzeigen, dass mynodepool erfolgreich erstellt wurde. Das folgende Beispiel zeigt die Ausgabe und die Ergebnisse im Zusammenhang mit der Deaktivierung von SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Deaktivieren von SSH für einen vorhandenen Knotenpool

Verwenden Sie das Argument [az aks nodepool update][az-aks-nodepool-update] command with the --ssh-access disabled', um SSH (Vorschau) in einem vorhandenen Knotenpool zu deaktivieren.

az aks nodepool update --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled

Nach wenigen Minuten ist die Ausführung des Befehls abgeschlossen, und es werden Informationen zum Cluster im JSON-Format zurückgegeben, die anzeigen, dass mynodepool erfolgreich erstellt wurde. Das folgende Beispiel zeigt die Ausgabe und die Ergebnisse im Zusammenhang mit der Deaktivierung von SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Damit die Änderung wirksam wird, müssen Sie mithilfe des Befehls az aks nodepool upgrade für den Knotenpool ein Reimaging durchführen.

az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only

Erneutes Aktivieren von SSH in einem vorhandenen Cluster

Verwenden Sie den Befehl az aks update, um einen vorhandenen Cluster zu aktualisieren, und geben Sie das Argument --ssh-access localuser an, um SSH (Vorschau) für alle Knotenpools im Cluster erneut zu aktivieren.

az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access localuser

Die folgende Meldung wird zurückgegeben, während der Prozess ausgeführt wird:

Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect."

Nach der erneuten Aktivierung von SSH wird für die Knoten nicht automatisch ein Reimaging durchgeführt. Sie können jederzeit einen Reimagingvorgang durchführen.

Wichtig

Während dieses Vorgangs werden alle Instanzen der VM-Skalierungsgruppe aktualisiert und das Image für die Verwendung des neuen öffentlichen SSH-Schlüssels neu erstellt.

Erneutes Aktivieren von SSH für einen bestimmten Knotenpool

Verwenden Sie den Befehl az aks update, um einen bestimmten Knotenpool zu aktualisieren, und geben Sie das Argument --ssh-access localuser an, um SSH (Vorschau) in diesem Knotenpool im Cluster erneut zu aktivieren. Im folgenden Beispiel ist nodepool1 der Zielknotenpool.

az aks nodepool update --cluster-name myManagedCluster --name nodepool1 --resource-group myResourceGroup --ssh-access localuser 

Die folgende Meldung wird zurückgegeben, wenn der Prozess ausgeführt wird:

Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect.

Wichtig

Während dieses Vorgangs werden alle Instanzen der VM-Skalierungsgruppe aktualisiert und das Image für die Verwendung des neuen öffentlichen SSH-Schlüssels neu erstellt.

Status des SSH-Diensts

Führen Sie die folgenden Schritte aus, um die Node-Shell auf einem Knoten zu verwenden und den SSH-Dienststatus mithilfe von systemctl zu untersuchen.

  1. Rufen Sie die standardmäßige Bash-Shell ab, indem Sie den Befehl kubectl node-shell <node> ausführen.

    kubectl node-shell aks-nodepool1-20785627-vmss000001
    
  2. Führen Sie den Befehl systemctl aus, um den Status des SSH-Diensts zu überprüfen.

    systemctl status ssh
    

Wenn SSH deaktiviert ist, zeigt die folgende Beispielausgabe die Ergebnisse:

ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)
     Active: inactive (dead) since Wed 2024-01-03 15:36:57 UTC; 20min ago

Wenn SSH aktiviert ist, zeigt die folgende Beispielausgabe die Ergebnisse:

ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago

Nächste Schritte

Um Probleme bei der SSH-Konnektivität mit Ihren Clusterknoten zu beheben, können Sie die Kubelet-Protokolle anzeigen oder die Kubernetes-Masterknotenprotokolle anzeigen.