Azure Bastion: accesso sicuro alle macchine virtuali in Azure tramite Azure Portal

Come sicuramente molti di voi sapranno, il protocollo RDP ed il protocollo SSH, utilizzati dagli utenti per connettersi e gestire in remoto le macchine virtuali, sono stati in passato oggetto di vulnerabilità e sono sempre sotto attacco.

Gli utenti malintezionati cercano di poter ottenere l’accesso alle nostre macchine nel momento in cui queste sono esposte ad Internet tramite un indirizzo IP pubblico.

Diverse sono le soluzioni per mitigare questo tipo di problema, ad esempio creando delle regole di firewall (tramite Network Secuirty Group) che consentono l’accesso alle VM solo da indirizzi IP della nostra azienda oppure utilizzando il Just-in Time VM Access, di cui ho già parlato nell’articolo Gestire l’accesso alle macchine virtuali in Microsoft Azure con la funzionalità JIT (Just-in-Time). In molti casi viene anche implementata una Jumpbox, l’unica macchina virtuale della rete che possied un IP pubblico, a cui ci connettiamo e che poi permette a sua volta di poter gestire tuttele altre VM connesse alla stessa rete virtuale.

Azure Bastion (attualmente in Preview) è un servzio PAAS che permette di effettuare una connessione RDP oppure un accesso SSH alle macchine virtuali in Azure attraverso il portale web di Azure. Il servizio è collegato direttamente alla Virtual Network e consente l’accesso a tutte le macchine della VNET, anche se queste non hanno un indirizzo IP pubblico.

I vantaggi di questo tipo di soluzione sono diversi:

  • Utilizzo del browser (supportati Microsoft Edge e Google Chrome) per la connessione e protezione tramite SSL
  • Capacità di passare attraverso i firewall e le protezioni perimetrali grazie ad un client web HTML5 e all’utilizzo di un’unica porta (TCP 443)
  • Autenticazione al portale Azure con credenziali di Azure AD e utilizzo della Multi-Factor Authentication
  • Limitazione all’esposizione di indirizzi IP pubblici per le macchine virtuali
  • Intercettazione da parte di Microsoft delle connessioni malevoli e dei tentativi di port scanning effettuati a danno delle VM

Figura 1: Funzionamento di Azure Bastion

Attualmente questa funzionalità è in Preview solo nelle seguenti aree di Azure:

  • West US
  • East US
  • West Europe
  • South Central US
  • Australia East
  • Japan East

Per poter partecipare alla preview è necessario registrare la funzionalità con le seguenti cmdlet di PowerShell:

 

Per eseguire i comandi io ho utilizzato Azure Cloud Shell, di cui vi ho già parlato nell’articolo Azure Cloud Shell – Amministrazione di Microsoft Azure con una shell accessibile tramite browser

Ho notato che ci vogliono alcuni minuti per registrare la funzionalità, quindi lanciate il comando Get-AzureRmProviderFeature -ProviderNamespace Microsoft.Network fino a quando la funzionalità AllowBastionHost non sarà visibile e mostrerà lo stato Registered.

Figura 2: Utilizzo di Azure Cloud Shell per registrare la funzionalità di Azure Bastion (Preview)

Creazione del Bastion Host

Per poter creare il Bastion Host dovete utilizzare il portale di Preview, raggiungibile al link Azure portal – preview. Assicuratevi di utilizzare questo collegamento e non utilizzate il portale di Azure perché la funzionalità è al momento della stesura di questo articolo è disponibile solo nel portale Preview. Potete riconoscere facilmente il portale di Azure Preview dalla fascia arancione in alto.

Come prima operazione create una subnet chiamata esattamente AzureBastionSubnet all’interno della Virtual Network a cui volete collegare il Bastion Host. Questa subnet deve essere differente dalla Gateway Subnet e deve essere almeno /27. Assicuratevi anche di non collegare nessun Network Security Group e nessuna Route Table.

Figura 3: Creazione della subnet AzureBastionSubnet nella VNET a cui collegare Azure Bastion

Terminata la creazione della subnet AzureBastionSubnet, cercate Bastion nel Marketplace e dai risultati scegliete Bastion (preview)

Figura 4: Creazione di una nuova risorsa Bastion

Inserite nel blade che si aprirà le informazioni relative a Subscription, Resource Group, Nome del Bastion, Region dove crearlo, Virtual Network e Subnet a cui associarlo e l’indirizzo IP pubblico da assegnargli, come mostrato nella figura sotto:

Figura 5: Configurazione di Azure Bastion

Figura 6: Validazione delle impostazioni inserite

Attendente qualche minuto (nel mio caso meno di 5) per il completamento della creazione di Azure Bastion

Figura 7: Creazione di Azure Bastion completata

Dopo la creazione la risorsa Bastion sarà visibile nel portale Preview di Azure

Figura 8: La risorsa Bastion è visibile anche nel portale Preview di Azure

A questo punto potete selezionare una macchina virtuale della Virtual Network a cui avete collegato Azure Bastion e dopo aver cliccato sul pulsante Connect noterete che sarà disponibile la scritta BASTION, oltre ai collegamenti RDP e SSH. Come si può notare nella figura sotto, la macchina a cui voglio collegarmi non ha un indirizzo IP pubblico, ma ha solo un indirizzo IP privato, nella stessa virtual network del Bastion Host.

Figura 9: Adesso è possibile collegarsi alla VM anche attraverso Azure Bastion

Inserite le credenziali di accesso alla VM (username e password) e in nuova scheda del browser si aprirà una connessione RDP alla VM (la macchina a cui mi sto collegando è una macchina Windows), come mostrato in figura:

Figura 10: Connessione RDP alla VM utilizzando un client HTML5 e passando attraverso Azure Bastion

Se vi volete connettere ad una macchina Linux, il portale vi presenterà la possibilità di mettere le credenziali di un utente abilitato alla connessione remota SSH chiedendovi di inserire la username e la password oppure la chiave SSH, a seconda di come avete configurato l’autenticazione della macchina virtuale.

Figura 11: collegamento alla macchina virtuale Linux utilizzando Azure Bastion

Figura 12: Connessione SSH alla VM utilizzando un client HTML5 e passando attraverso Azure Bastion

Autenticazione a due fattori e integrazione con Azure AD

Microsoft ha annunciato che prossimamente Azure Bastion verrà integrato con Azure Active Directory e che sarà possibile utilizzare il seamless single-sign-on utilizzando gli utenti di Azure AD e la Azure Multi-Factor Authentication. Questo di fatto estenderà l’autenticazione a due fattori anche alle connessioni RDP ed SSH. Wow!

Conclusioni

La funzionalità offerta da Azure Bastion agevola moltissimo le connessioni verso le macchine virtuali Azure. Grazie ad un browser, alla possibilità di effettuare la multi-factor authentication per accedere al portale Azure, all’assenza di indirizzi IP pubblici associati alle VM in Azure e al fatto che non è necessario installare nessun agent nelle VM a cui vogliamo connetterci né installare alcun plugin nel browser, innalza la sicurezza ad un livello altissimo e ci permette di non temere più i tentativi di attacco e le vulnerabilità dei protocolli RDP ed SSH.