Condividi tramite


Gestire SSH per l'accesso sicuro ai nodi del servizio Azure Kubernetes

Questo articolo descrive come configurare le chiavi SSH (anteprima) nei cluster o nei pool di nodi del servizio Azure Kubernetes durante la distribuzione iniziale o in un secondo momento.

Il servizio Azure Kubernetes supporta le opzioni di configurazione seguenti per gestire le chiavi SSH nei nodi del cluster:

  • Creare un cluster con chiavi SSH
  • Aggiornare le chiavi SSH in un cluster del servizio Azure Kubernetes esistente
  • Disabilitare e abilitare il servizio SSH

Importante

Le funzionalità di anteprima del servizio Azure Kubernetes sono disponibili in modalità self-service e opzionale. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

Operazioni preliminari

  • È necessario aks-preview versione 0.5.116 o successiva per usare Aggiorna.
  • È necessario aks-preview versione 1.0.0b6 o successiva per usare Disabilita.
  • La funzionalità Crea and Aggiorna SSH supporta pool di nodi Linux, Windows e Azure Linux nei cluster esistenti.
  • La funzionalità Disabilita SSH non è supportata in questa versione di anteprima nei pool di nodi che eseguono il sistema operativo Windows Server.

Installare l'estensione aks-preview dell'interfaccia della riga di comando di Azure.

  1. Installare l'estensione aks-preview usando il comando az extension add.

    az extension add --name aks-preview
    
  2. Eseguire l'aggiornamento alla versione più recente dell'estensione usando il comando az extension update.

    az extension update --name aks-preview
    

Registrare il flag di funzionalità DisableSSHPreview

Per usare la funzionalità SSH Disabilita, seguire questa procedura per registrarla e abilitarla nella sottoscrizione.

  1. Registrare il flag di funzionalità DisableSSHPreview usando il comando az feature register.

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

    Sono necessari alcuni minuti per visualizzare lo stato Registered.

  2. Verificare lo stato della registrazione usando il comando az feature show.

    az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    
  3. Quando lo stato diventa Registrato, aggiornare la registrazione del provider di risorse Microsoft.ContainerService usando il comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Creare un cluster del servizio Azure Kubernetes con chiavi SSH

Usare il comando az aks create per distribuire un cluster del servizio Azure Kubernetes con una chiave pubblica SSH. È possibile specificare la chiave o un file di chiave usando l'argomento --ssh-key-value.

Parametro SSH Descrizione Default value
--generate-ssh-key Se non si hanno chiavi SSH personalizzate, specificare --generate-ssh-key. L'interfaccia della riga di comando di Azure genera automaticamente un set di chiavi SSH e le salva nella directory ~/.ssh/ predefinita.
--ssh-key-value Percorso della chiave pubblica o contenuto della chiave da installare nelle macchine virtuali del nodo per l'accesso SSH. Ad esempio, ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm. ~/.ssh/id_rsa.pub
--no-ssh-key Se non sono necessarie chiavi SSH, specificare questo argomento. Tuttavia, il servizio Azure Kubernetes genera automaticamente un set di chiavi SSH perché la dipendenza delle risorse della macchina virtuale di Azure non supporta un file di chiavi SSH vuoto. Di conseguenza, le chiavi non vengono restituite e non possono essere usate per ssh nelle macchine virtuali del nodo. La chiave privata viene eliminata e non salvata.

Nota

Se non vengono specificati dei parametri, per impostazione predefinita l'interfaccia della riga di comando di Azure fa riferimento alle chiavi SSH archiviate nel file ~/.ssh/id_rsa.pub. Se le chiavi non vengono trovate, il comando restituisce il messaggio An RSA key file or key value must be supplied to SSH Key Value.

Di seguito sono riportati alcuni esempi di questo comando:

  • Per creare un cluster e usare le chiavi SSH generate predefinite:

    az aks create --name myAKSCluster --resource-group MyResourceGroup --generate-ssh-key
    
  • Per specificare un file di chiave pubblica SSH, includere l'argomento --ssh-key-value:

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

Aggiornare la chiave pubblica SSH in un cluster del servizio Azure Kubernetes esistente

Usare il comando az aks update per aggiornare la chiave pubblica SSH (anteprima) nel cluster. Questa operazione aggiorna la chiave in tutti i pool di nodi. È possibile specificare una chiave o un file di chiave usando l'argomento --ssh-key-value.

Nota

L'aggiornamento delle chiavi SSH è supportato nei set di scalabilità di macchine virtuali di Azure con cluster del servizio Azure Kubernetes.

Di seguito sono riportati alcuni esempi di questo comando:

  • Per specificare un nuovo valore di chiave pubblica SSH, includere l'argomento --ssh-key-value:

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
    
  • Per specificare un file di chiave pubblica SSH, specificarlo con l'argomento --ssh-key-value:

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

Importante

Dopo aver aggiornato la chiave SSH, il servizio Azure Kubernetes non aggiorna automaticamente il pool di nodi. In qualsiasi momento, è possibile scegliere di eseguire un'operazione di aggiornamento del pool di nodi. L'operazione di aggiornamento delle chiavi SSH diventa effettiva dopo il completamento di un aggiornamento dell'immagine del nodo.

Panoramica della disabilitazione di SSH

Per migliorare la sicurezza e supportare i requisiti o la strategia di sicurezza aziendali, il servizio Azure Kubernetes supporta la disabilitazione di SSH (anteprima) sia nel cluster che a livello di pool di nodi. La disabilitazione di SSH introduce un approccio semplificato rispetto all'unica soluzione supportata, che richiede la configurazione delle regole del gruppo di sicurezza di rete nella scheda di interfaccia di rete della subnet/nodo del servizio Azure Kubernetes. Disabilitare SSH supporta solo set di scalabilità di macchine virtuali pool di nodi.

Quando si disabilita SSH in fase di creazione del cluster, questo diventa effettivo dopo la creazione del cluster. Tuttavia, quando si disabilita SSH in un cluster o in un pool di nodi esistente, il servizio Azure Kubernetes non disabilita automaticamente SSH. In qualsiasi momento, è possibile scegliere di eseguire un'operazione di aggiornamento del pool di nodi. L'operazione di disabilitazione/abilitazione delle chiavi SSH diventa effettiva al termine dell'aggiornamento dell'immagine del nodo.

Nota

Quando si disabilita SSH a livello di cluster, si applica a tutti i pool di nodi esistenti. Tutti i pool di nodi creati dopo questa operazione avranno SSH abilitato per impostazione predefinita e sarà necessario eseguire di nuovo questi comandi per disabilitarlo.

Parametro SSH Descrizione
disabled Il servizio SSH è disabilitato.
localuser Il servizio SSH è abilitato e gli utenti con chiavi SSH possono accedere in modo sicuro al nodo.

Nota

Il nodo di debug kubectl continua a funzionare dopo aver disabilitato SSH perché non dipende dal servizio SSH.

Disabilitare SSH in una nuova distribuzione del cluster

Per impostazione predefinita, il servizio SSH nei nodi del cluster del servizio Azure Kubernetes è aperto a tutti gli utenti e i pod in esecuzione nel cluster. È possibile impedire l'accesso SSH diretto da qualsiasi rete ai nodi del cluster per limitare il vettore di attacco se un contenitore in un pod viene compromesso. Usare il comando az aks create per creare un nuovo cluster e includere l'argomento --ssh-access disabled per disabilitare SSH (anteprima) in tutti i pool di nodi durante la creazione del cluster.

Importante

Dopo aver disabilitato il servizio SSH, non è possibile accedere a SSH nel cluster per eseguire attività amministrative o risolvere i problemi.

Nota

In un cluster appena creato disabilitare ssh configurerà solo il pool di nodi di sistema 1. Tutti gli altri pool di nodi devono essere configurati a livello di pool di nodi.

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

Il comando viene completato dopo pochi minuti e vengono restituite informazioni in formato JSON sul cluster. L'esempio seguente è simile all'output e ai risultati correlati alla disabilitazione di SSH:

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

Disabilitare SSH in un cluster esistente

Usare il comando az aks update per aggiornare un cluster esistente e includere l'argomento --ssh-access disabled per disabilitare SSH (anteprima) in tutti i pool di nodi del cluster.

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

Il comando viene completato dopo pochi minuti e vengono restituite informazioni in formato JSON sul cluster. L'esempio seguente è simile all'output e ai risultati correlati alla disabilitazione di SSH:

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

Per rendere effettiva la modifica, è necessario creare nuovamente l'immagine di tutti i pool di nodi usando il comando az aks nodepool upgrade.

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

Importante

Durante questa operazione, tutte le istanze del set di scalabilità di macchine virtuali vengono aggiornate e ne viene ricreata l'immagine per usare la nuova configurazione SSH.

Disabilitare SSH per un nuovo pool di nodi

Usare il comando az aks nodepool add per aggiungere un pool di nodi e includere l'argomento --ssh-access disabled per disabilitare SSH durante la creazione del pool di nodi.

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

Dopo alcuni minuti, il comando viene completato e restituisce informazioni in formato JSON sul cluster che indica che mynodepool è stato creato correttamente. L'esempio seguente è simile all'output e ai risultati correlati alla disabilitazione di SSH:

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

Disabilitare SSH per un pool di nodi esistente

Usare l'argomento [az aks nodepool update][az-aks-nodepool-update] command with the --ssh-access disabled' per disabilitare SSH (anteprima) in un pool di nodi esistente.

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

Dopo alcuni minuti, il comando viene completato e restituisce informazioni in formato JSON sul cluster che indica che mynodepool è stato creato correttamente. L'esempio seguente è simile all'output e ai risultati correlati alla disabilitazione di SSH:

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

Per rendere effettiva la modifica, è necessario creare nuovamente l'immagine del pool di nodi usando il comando az aks nodepool upgrade.

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

Riabilitare SSH in un cluster esistente

Usare il comando az aks update per aggiornare un cluster esistente e includere l'argomento --ssh-access localuser per riabilitare SSH (anteprima) in tutti i pool di nodi del cluster.

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

Durante l'esecuzione del processo viene restituito il messaggio seguente:

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

Dopo aver riattivato SSH, i nodi non verranno ricreati automaticamente. In qualsiasi momento, è possibile scegliere di eseguire un'operazione di ricreazione dell'immagine.

Importante

Durante questa operazione, tutte le istanze del set di scalabilità di macchine virtuali vengono aggiornate e ne viene ricreata l'immagine per usare la nuova chiave pubblica SSH.

Riabilitare SSH per un pool di nodi specifico

Usare il comando az aks update per aggiornare un pool di nodi specifico e includere l'argomento --ssh-access localuser per riabilitare SSH (anteprima) nel pool di nodi nel cluster. Nell'esempio seguente, nodepool1 è il pool di nodi di destinazione.

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

Quando viene eseguito il processo, viene restituito il messaggio seguente:

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

Importante

Durante questa operazione, tutte le istanze del set di scalabilità di macchine virtuali vengono aggiornate e ne viene ricreata l'immagine per usare la nuova chiave pubblica SSH.

Stato del servizio SSH

Eseguire la procedura seguente per usare node-shell in un nodo e controllare lo stato del servizio SSH usando systemctl.

  1. Ottenere la shell Bash standard eseguendo il comando del comando kubectl node-shell <node>.

    kubectl node-shell aks-nodepool1-20785627-vmss000001
    
  2. Eseguire il comando systemctl per controllare lo stato del servizio SSH.

    systemctl status ssh
    

Se SSH è disabilitato, l'output di esempio seguente mostra i risultati:

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

Se SSH è abilitato, l'output di esempio seguente mostra i risultati:

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

Passaggi successivi

Per risolvere eventuali problemi di connettività SSH ai nodi del cluster, è possibile visualizzare i log kubelet o visualizzare i log del nodo master Kubernetes.