Gérer SSH pour un accès sécurisé aux nœuds Azure Kubernetes Service (AKS)

Cet article explique la configuration des clés SSH (préversion) sur vos clusters ou pools de nœuds AKS, pendant le déploiement initial ou ultérieurement.

AKS prend en charge les options de configuration suivantes pour gérer les clés SSH sur les nœuds de cluster :

  • Créer un cluster avec des clés SSH
  • Mettre à jour les clés SSH sur un cluster AKS existant
  • Désactiver et activer le service SSH

Important

Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les préversions sont fournies « en l’état » et « en fonction des disponibilités », et sont exclues des contrats de niveau de service et de la garantie limitée. Les préversions AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Telles quelles, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :

Avant de commencer

  • Vous avez besoin de aks-preview version 0.5.116 ou ultérieure pour utiliser Update.
  • Vous avez besoin de aks-preview version 1.0.0b6 ou ultérieure pour utiliser Disable.
  • La fonctionnalité Créer et Mettre à jour de SSH prend en charge les pools de nœuds Linux, Windows et Azure Linux sur des clusters existants.
  • La fonctionnalité Désactiver de SSH n’est pas prise en charge dans cette préversion sur les pools de nœuds exécutant le système d’exploitation Windows Server.

Installer l’extension Azure CLI aks-preview

  1. Installez l’extension aks-preview à l’aide de la commande az extension add.

    az extension add --name aks-preview
    
  2. Mettez à jour vers la dernière version de l’extension à l’aide de la commande az extension update.

    az extension update --name aks-preview
    

Inscrire l’indicateur de fonctionnalité DisableSSHPreview

Pour utiliser la fonctionnalité Désactiver de SSH, procédez comme suit pour l’inscrire et l’activer dans votre abonnement.

  1. Inscrivez l’indicateur de fonctionnalité DisableSSHPreview à l’aide de la commande az feature register.

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

    Quelques minutes sont nécessaires pour que l’état s’affiche Registered (Inscrit).

  2. Vérifiez l’état de l’inscription en utilisant la commande az feature show.

    az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    
  3. Quand l’état reflète Inscrit, actualisez l’inscription du fournisseur de ressources Microsoft.ContainerService à l’aide de la commande az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Créez un cluster AKS avec les clés SSH

Utilisez la commande az aks create pour déployer un cluster AKS avec une clé publique SSH. Vous pouvez spécifier la clé ou un fichier de clé à l’aide de l’argument --ssh-key-value.

Paramètre SSH Description Valeur par défaut
--generate-ssh-key Si vous ne possédez pas de clés SSH, spécifiez --generate-ssh-key. Azure CLI génère automatiquement un ensemble de clés SSH et les enregistre dans le répertoire par défaut ~/.ssh/.
--ssh-key-value Chemin d’accès à la clé publique ou contenu de la clé à installer sur des machines virtuelles de nœud pour l’accès SSH. Par exemple : ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm. ~/.ssh/id_rsa.pub
--no-ssh-key Si vous n’avez pas besoin de clés SSH, spécifiez cet argument. AKS génère toutefois automatiquement un ensemble de clés SSH, car la dépendance de ressource de machine virtuelle Azure ne prend pas en charge un fichier de clé SSH vide. Par conséquent, les clés ne sont pas retournées et ne peuvent pas être utilisées pour SSH dans les machines virtuelles du nœud. La clé privée est ignorée et non enregistrée.

Remarque

Si aucun paramètre n’est spécifié, Azure CLI référence par défaut les clés SSH stockées dans le fichier ~/.ssh/id_rsa.pub. Si les clés sont introuvables, la commande retourne le message An RSA key file or key value must be supplied to SSH Key Value.

Voici quelques exemples de cette commande :

  • Pour créer un cluster et utiliser les clés SSH générées par défaut :

    az aks create --name myAKSCluster --resource-group MyResourceGroup --generate-ssh-key
    
  • Pour spécifier un fichier de clé publique SSH, incluez l’argument --ssh-key-value :

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

Mettre à jour la clé publique SSH sur un cluster AKS existant

Utilisez la commande az aks update pour mettre à jour la clé publique SSH (préversion) sur votre cluster. Cette opération met à jour la clé sur tous les pools de nœuds. Vous pouvez spécifier une clé ou un fichier de clé en utilisant l’argument --ssh-key-value.

Remarque

La mise à jour des clés SSH est prise en charge sur les groupes de machines virtuelles identiques Azure avec des clusters AKS.

Voici quelques exemples de cette commande :

  • Pour spécifier une nouvelle valeur de clé publique SSH, incluez l’argument --ssh-key-value :

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
    
  • Pour spécifier un fichier de clé publique SSH, spécifiez-le avec l’argument --ssh-key-value :

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

Important

Après avoir mis à jour la clé SSH, AKS ne met pas automatiquement à jour votre pool de nœuds. À tout moment, vous pouvez choisir d’effectuer une opération de mise à jour du pool de nœuds. L’opération de mise à jour des clés SSH prend effet après la fin de la mise à jour de l’image du nœud.

Vue d’ensemble de la désactivation de SSH

Pour améliorer la sécurité et prendre en charge vos exigences ou stratégie de sécurité d’entreprise, AKS prend en charge la désactivation de SSH (préversion) sur le cluster et au niveau du pool de nœuds. Désactiver SSH introduit une approche simplifiée par rapport à la seule solution prise en charge, ce qui nécessite la configuration des règles de groupe de sécurité réseau sur la carte d’interface réseau du sous-réseau/nœud AKS. Désactiver SSH prend uniquement en charge les pools de nœuds des groupes identiques de machines virtuelles.

Lorsque vous désactivez SSH au moment de la création du cluster, il prend effet après la création du cluster. Toutefois, lorsque vous désactivez SSH sur un cluster ou un pool de nœuds existant, AKS ne désactive pas automatiquement SSH. À tout moment, vous pouvez choisir d’effectuer une opération de mise à niveau de nodepool. L’opération désactiver/activer les clés SSH prend effet après la fin de la mise à jour de l’image du nœud.

Remarque

Lorsque vous désactivez SSH au niveau du cluster, il s’applique à tous les pools de nœuds existants. Tous les pools de nœuds créés après cette opération auront SSH activé par défaut, et vous devez réexécuter ces commandes pour la désactiver.

Paramètre SSH Description
disabled Le service SSH est désactivé.
localuser Le service SSH est activé et les utilisateurs disposant de clés SSH peuvent accéder en toute sécurité au nœud.

Remarque

Le nœud de débogage kubectl continue de fonctionner après avoir désactivé SSH, car il ne dépend pas du service SSH.

Désactiver SSH sur un nouveau déploiement de cluster

Par défaut, le service SSH sur les nœuds de cluster AKS est ouvert à tous les utilisateurs et pods s’exécutant sur le cluster. Vous pouvez empêcher l’accès SSH direct à partir de n’importe quel réseau vers des nœuds de cluster pour limiter le vecteur d’attaque si un conteneur d’un pod devient compromis. Utilisez la commande az aks create pour créer un cluster et ajoutez l’argument --ssh-access disabled pour désactiver SSH (préversion) sur tous les pools de nœuds lors de la création du cluster.

Important

Après avoir désactivé le service SSH, vous ne pouvez pas connecter SSH dans le cluster pour effectuer des tâches d’administration ou résoudre les problèmes.

Remarque

Sur un cluster nouvellement créé, désactiver ssh configure uniquement le 1er pool de nœuds système. Tous les autres pools de nœuds doivent être configurés au niveau du pool de nœuds.

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

Au bout de quelques minutes, la commande se termine et retourne des informations au format JSON sur le cluster. L’exemple suivant ressemble à la sortie et aux résultats liés à la désactivation de SSH :

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

Désactiver SSH sur un cluster existant

Utilisez la commande az aks update pour mettre à jour un cluster existant et ajoutez l’argument --ssh-access disabled pour désactiver SSH (préversion) sur tous les pools de nœuds du cluster.

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

Au bout de quelques minutes, la commande se termine et retourne des informations au format JSON sur le cluster. L’exemple suivant ressemble à la sortie et aux résultats liés à la désactivation de SSH :

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

Pour que la modification prenne effet, vous devez réinitialiser tous les pools de nœuds en utilisant la commande az aks nodepool upgrade.

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

Important

Au cours de cette opération, toutes les instances de groupe de machines virtuelles identiques sont mises à niveau et ré-imagées de façon à utiliser la nouvelle configuration SSH.

Désactiver SSH pour un nouveau pool de nœuds

Utilisez la commande az aks nodepool add pour ajouter un pool de nœuds et ajoutez l’argument --ssh-access disabled pour désactiver SSH lors de la création du pool de nœuds.

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

Après quelques minutes, la commande se termine et retourne des informations au format JSON sur le cluster indiquant que mynodepool a été créé avec succès. L’exemple suivant ressemble à la sortie et aux résultats liés à la désactivation de SSH :

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

Désactiver SSH pour un pool de nœuds existant

Utilisez l’argument [az aks nodepool update][az-aks-nodepool-update] command with the --ssh-access disabled' pour désactiver SSH (préversion) sur un pool de nœuds existant.

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

Après quelques minutes, la commande se termine et retourne des informations au format JSON sur le cluster indiquant que mynodepool a été créé avec succès. L’exemple suivant ressemble à la sortie et aux résultats liés à la désactivation de SSH :

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

Pour que la modification prenne effet, vous devez réinitialiser le pool de nœuds en utilisant la commande az aks nodepool upgrade.

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

Réactiver SSH sur un cluster existant

Utilisez la commande az aks update pour mettre à jour un cluster existant et ajoutez l’argument --ssh-access localuser permettant de réactiver SSH (préversion) sur tous les pools de nœuds du cluster.

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

Le message suivant est retourné pendant que le processus est effectué :

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

Après avoir réactivé SSH, les nœuds ne sont pas réinitialisés automatiquement. À tout moment, vous pouvez choisir d’effectuer une opération de réinitialisation.

Important

Au cours de cette opération, toutes les instances de groupe de machines virtuelles identiques sont mises à niveau et ré-imagées de façon à utiliser la nouvelle clé publique SSH.

Réactiver SSH pour un pool de nœuds spécifique

Utilisez la commande az aks update pour mettre à jour un pool de nœuds spécifique et ajoutez l’argument --ssh-access localuser pour réactiver SSH (préversion) sur ce pool de nœuds dans le cluster. Dans l’exemple suivant, nodepool1 est le pool de nœuds cible.

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

Le message suivant est retourné lorsque le processus est effectué :

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

Important

Au cours de cette opération, toutes les instances de groupe de machines virtuelles identiques sont mises à niveau et ré-imagées de façon à utiliser la nouvelle clé publique SSH.

État du service SSH

Procédez comme suit pour utiliser l’interpréteur de commandes de nœud sur un nœud et inspecter l’état du service SSH en utilisant systemctl.

  1. Obtenez un interpréteur de commandes bash standard en exécutant la commande kubectl node-shell <node>.

    kubectl node-shell aks-nodepool1-20785627-vmss000001
    
  2. Exécutez la commande systemctl pour vérifier l’état du service SSH.

    systemctl status ssh
    

Si SSH est désactivé, l’exemple de sortie suivant affiche les résultats :

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

Si SSH est activé, l’exemple de sortie suivant affiche les résultats :

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

Étapes suivantes

Pour résoudre les problèmes de connectivité SSH sur vos nœuds de clusters, vous pouvez consulter les journaux kubelet ou consulter les journaux du nœud maître Kubernetes.