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.
Installare l'estensione aks-preview usando il comando
az extension add
.az extension add --name aks-preview
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.
Registrare il flag di funzionalità
DisableSSHPreview
usando il comandoaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
Sono necessari alcuni minuti per visualizzare lo stato Registered.
Verificare lo stato della registrazione usando il comando
az feature show
.az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
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
.
Ottenere la shell Bash standard eseguendo il comando del comando
kubectl node-shell <node>
.kubectl node-shell aks-nodepool1-20785627-vmss000001
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.
Azure Kubernetes Service