Accesso RDP sicuro alle VM Azure tramite Azure Bastion e Microsoft Entra ID

Negli ultimi anni abbiamo smesso di esporre le VM su Internet tramite IP pubblici e porte aperte. RDP e SSH accessibili dall’esterno non sono più accettabili in un modello di sicurezza moderno, dove l’identità diventa il vero perimetro.

Azure Bastion ha già risolto buona parte del problema, permettendovi di accedere alle macchine direttamente dal portale senza esporle. Tuttavia, fino a poco tempo fa, l’autenticazione continuava a basarsi su credenziali locali della VM.

La novità è l’integrazione con Microsoft Entra ID, attualmente in preview. Questo vi permette di autenticarvi usando direttamente la vostra identità aziendale, applicando MFA e Conditional Access, senza dover gestire account locali.

Nel mio caso, è stato il passaggio definitivo: niente più password sulle VM, tutto passa da Entra ID. È esattamente il modello che ci si aspetta in un’architettura Zero Trust.

Come funziona Azure Bastion

In questo scenario utilizzate Azure Bastion come punto di accesso centralizzato alle VM all’interno della Virtual Network, senza esporle su Internet.

L’utente si connette tramite HTTPS (porta 443) al servizio Bastion, che è distribuito in una subnet dedicata (AzureBastionSubnet). Da lì, la connessione viene instradata internamente verso le VM tramite IP privato, utilizzando RDP (3389) o SSH (22).

Non esiste quindi alcuna esposizione diretta delle VM: tutto il traffico passa attraverso Bastion, rimanendo confinato nella rete Azure e protetto da NSG. Ve ne avevo già parlato nella guida Azure Bastion: accesso sicuro alle macchine virtuali in Azure tramite Azure Portal – ICT Power

Figura 1: Accesso alle VM tramite Azure Bastion: connessione sicura via HTTPS dall’esterno e instradamento interno su IP privato senza esposizione pubblica delle macchine

Entra ID authentication overview

Con l’autenticazione tramite Microsoft Entra ID, Azure Bastion supporta sia connessioni RDP che SSH, spostando completamente il controllo dell’accesso sull’identità.

Quando avviate una connessione a una VM tramite Azure Bastion, venite reindirizzati verso Entra ID per l’autenticazione. In questa fase vengono applicate eventuali policy di MFA e Conditional Access. Una volta autenticati, Bastion si occupa di stabilire la connessione verso la macchina target.

A questo punto entra in gioco l’estensione installata sulla VM, AADLoginForWindows o AADSSHLoginForLinux, che valida il token Entra ID e consente l’accesso in base ai ruoli assegnati.

Avete due modalità di connessione disponibili. La prima è tramite Azure Portal, utilizzando direttamente RDP o SSH dal browser; in questo caso è sufficiente uno SKU Basic o superiore. La seconda è tramite client nativo, usando la Azure CLI con i comandi Bastion; qui è richiesto uno SKU Standard o superiore.

Se la configurazione è corretta, vedrete Microsoft Entra ID come opzione di autenticazione predefinita nella pagina di connessione di Bastion. In caso contrario, l’opzione semplicemente non viene mostrata, ed è il primo segnale che qualche prerequisito non è stato soddisfatto.

Abilitare Microsoft Entra ID sulla VM

Durante la creazione della macchina virtuale, potete abilitare direttamente il login tramite Microsoft Entra ID dalla sezione Management.

In questo passaggio attivate l’opzione Login with Microsoft Entra ID, che consente alla VM di accettare autenticazioni basate su identità invece delle classiche credenziali locali. Questa configurazione abilita anche l’integrazione con le estensioni necessarie per validare il token Entra ID durante l’accesso.

In genere abilito sempre questa opzione già in fase di provisioning, così evito configurazioni successive e mi assicuro che la VM sia subito pronta per un accesso identity-based.

È importante sapere che questa funzionalità è supportata solo su sistemi operativi specifici: Windows 10 20H2 o successivo, Windows 11 21H2 o successivo e Windows Server 2022 o successivo.

Figura 2: Abilitazione del login con Microsoft Entra ID durante la creazione della VM dal portale Azure

Se la macchina virtuale è già stata creata, potete abilitare l’autenticazione tramite Microsoft Entra ID installando l’estensione dedicata.

Dal portale Azure accedete alla VM e andate nella sezione Extensions + applications. Da qui aggiungete l’estensione Azure AD based Windows Login, che abilita il supporto al login tramite Entra ID e permette alla VM di validare il token di autenticazione.

Figura 3: Installazione dell’estensione Azure AD based Windows Login per abilitare l’autenticazione tramite Microsoft Entra ID su VM esistenti

Una volta installata l’estensione, potete verificarne lo stato dalla sezione Extensions + applications della macchina virtuale.

Qui dovete controllare che l’estensione AADLogin sia presente e che lo stato sia Provisioning succeeded, segno che la configurazione è andata a buon fine. In questa schermata potete anche verificare la versione installata.

Io controllo sempre se è disponibile una versione più recente e procedo con l’aggiornamento.

Figura 4: Verifica dell’estensione AADLogin installata sulla VM e controllo dello stato e della versione

Assegnazione dei ruoli di accesso

Per consentire l’accesso tramite Microsoft Entra ID, dovete assegnare i ruoli corretti a livello di macchina virtuale.

Dalla sezione Access control (IAM) della VM, aggiungete un nuovo role assignment e selezionate uno dei ruoli previsti, come Virtual Machine User Login o Virtual Machine Administrator Login. Questi ruoli determinano il livello di accesso alla macchina una volta autenticati tramite Entra ID.

Figura 5: Assegnazione dei ruoli RBAC sulla VM per consentire l’accesso tramite Microsoft Entra ID

Figura 6: Selezione dei ruoli Virtual Machine User Login o Virtual Machine Administrator Login durante l’assegnazione RBAC

Figura 7: Selezione degli utenti Microsoft Entra ID a cui assegnare il ruolo di accesso alla VM

Figura 8: Conferma del role assignment per abilitare l’accesso alla VM tramite Microsoft Entra ID

Creazione di Azure Bastion

Per completare la configurazione, dovete creare una risorsa Azure Bastion all’interno della vostra Virtual Network.

Dal portale Azure accedete alla sezione Bastions e avviate la creazione del servizio. Durante questo passaggio, Bastion verrà distribuito in una subnet dedicata (AzureBastionSubnet) e fungerà da punto di accesso sicuro verso le VM.

Figura 9: Creazione della risorsa Azure Bastion dal portale Azure per abilitare l’accesso sicuro alle VM

Durante la creazione di Azure Bastion, dovete prestare attenzione allo SKU selezionato.

Per utilizzare l’autenticazione tramite Microsoft Entra ID, è necessario scegliere uno SKU superiore a Basic, quindi almeno Standard. Lo SKU Basic infatti non supporta tutte le funzionalità avanzate, incluse alcune modalità di autenticazione e integrazione.

Figura 10: Selezione dello SKU Standard per Azure Bastion, necessario per utilizzare l’autenticazione con Microsoft Entra ID

Durante la configurazione avanzata di Azure Bastion potete abilitare alcune funzionalità opzionali.

Quando abilitate Native client support, potete utilizzare Azure Bastion anche con il client RDP locale, invece della sessione direttamente nel browser.

In questo scenario non utilizzate più solo il portale Azure per aprire la sessione, ma vi connettete dalla vostra macchina tramite Remote Desktop (mstsc), mentre Bastion continua a fare da broker della connessione.

Il flusso cambia leggermente: la sessione RDP viene avviata dal vostro PC, passa attraverso Azure Bastion (che viene utilizzato come Remote Desktop Gateway) e raggiunge la VM su IP privato, mantenendo quindi tutti i vantaggi di sicurezza senza esposizione pubblica.

Con Microsoft Entra ID, l’autenticazione avviene comunque tramite identità, ma entra in gioco un requisito importante: il vostro dispositivo deve essere registrato o joinato a Entra ID. Questo perché il client RDP utilizza il contesto di sicurezza del dispositivo per completare l’autenticazione.

Figura 11: Abilitazione dell’opzione Native client support

Una volta completata la configurazione, potete procedere con la creazione di Azure Bastion.

Nella schermata di Review + create verificate il riepilogo, in particolare lo SKU, la Virtual Network e le funzionalità abilitate come il Native client support. Se tutto è corretto, avviate il deployment.

Figura 12: Conferma e creazione della risorsa Azure Bastion dal portale Azure

Adesso dovete solo attendere: la creazione della risorsa richiede in media 7-8 minuti.

Permessi di lettura

Per poter utilizzare correttamente Azure Bastion, dovete assicurarvi che l’utente abbia almeno il ruolo Reader sulle risorse coinvolte.

In particolare, il ruolo deve essere assegnato sulla macchina virtuale, sulla Virtual Network e sulla risorsa Azure Bastion stessa. Senza questi permessi, l’utente non sarà in grado di visualizzare le risorse nel portale né avviare la connessione.

I permessi sono:

  • Microsoft.Network/bastionHosts/read (per trovare il Bastion)
  • Microsoft.Network/bastionHosts/connect/action (per iniziare la connessione)
  • Microsoft.Compute/virtualMachines/read (sulle macchine a cui connettersi)

Figura 13: Verifica del ruolo Reader assegnato per consentire l’accesso alle risorse Azure

Connessione tramite portale

L’utente autorizzato si collega al portale Azure e da lì accede alla macchina virtuale tramite Azure Bastion.

Figura 14: Connessione al portale Azure con le credenziali dell’utente

Dalla sezione Connect → Bastion seleziona il protocollo (RDP o SSH). Se la VM è correttamente configurata e Microsoft Entra ID joined, vedrà automaticamente Microsoft Entra ID (Preview) come tipo di autenticazione predefinito.

A questo punto, avviando la connessione, l’utente viene autenticato tramite Entra ID, con eventuale MFA e policy di Conditional Access, e solo dopo viene stabilita la sessione verso la VM.

Figura 15: Connessione alla VM tramite Azure Bastion con autenticazione Microsoft Entra ID disponibile automaticamente per VM Entra ID joined

L’errore mostrato nella figura sotto (UnauthorizedDataError: data set DataCache) è tipicamente causato dalla mancanza dei permessi minimi di lettura sulla risorsa o sul relativo scope.

In questo scenario, anche se l’utente ha il ruolo per effettuare il login alla VM (ad esempio Virtual Machine Administrator Login o Virtual Machine User Login), non è comunque in grado di accedere alla sezione Bastion dal portale perché Azure non riesce a recuperare i metadati della risorsa. Il portale, prima ancora di stabilire la connessione, deve interrogare le API per ottenere informazioni sulla VM, sulla rete e sul Bastion stesso, e senza permessi di lettura questa operazione fallisce.

La risoluzione consiste nell’assegnare almeno il ruolo Reader sullo scope corretto, come ho scritto prima. Una volta assegnato il ruolo, l’errore scompare e la pagina Bastion torna a funzionare correttamente, permettendo la connessione alla VM.

Figura 16: Errore di accesso a Bastion per permessi insufficienti

Se l’utente non dispone almeno del ruolo Reader sulla risorsa, l’opzione di autenticazione tramite Microsoft Entra ID non viene mostrata nel portale Azure.

Figura 17: Assenza dell’opzione di autenticazione Entra ID per permessi insufficienti

Una volta avviata la connessione, viene aperta la sessione Bastion e viene richiesto il login tramite Microsoft Entra ID.

L’utente inserisce le proprie credenziali aziendali e completa l’eventuale MFA. Solo dopo l’autenticazione, Azure Bastion stabilisce la connessione verso la VM utilizzando il token Entra ID.

Questo è il punto in cui si vede concretamente il cambio di paradigma: non sto più accedendo con un account locale della macchina, ma con la mia identità aziendale.

Figura 18: Autenticazione tramite Microsoft Entra ID durante la connessione alla VM via Azure Bastion

Durante il processo di autenticazione, potrebbe essere richiesto di confermare la connessione alla macchina virtuale.

In questa fase, Microsoft Entra ID vi chiede di autorizzare la sessione Remote Desktop verso la VM, mostrando il nome della macchina. Dovete confermare per permettere al servizio di completare l’accesso.

Figura 19: Richiesta di conferma della connessione Remote Desktop tramite Microsoft Entra ID durante l’accesso via Bastion

Figura 20: Accesso alla VM tramite Azure Bastion con autenticazione Microsoft Entra ID, senza utilizzo di IP pubblici

Connessione tramite client nativo

In alternativa al portale, potete connettervi alla VM utilizzando il client nativo tramite Azure Bastion.

In questo caso avviate la connessione dal vostro PC utilizzando la Azure CLI con i comandi az network bastion rdp o az network bastion ssh. La sessione viene aperta nel client locale (ad esempio Remote Desktop) ma il traffico continua a passare attraverso Azure Bastion su IP privato.

Io utilizzo il client nativo quando ho bisogno di un’esperienza più completa rispetto al browser, ad esempio per il supporto multi-monitor o per una migliore gestione della sessione RDP.

Installazione di Azure CLI

Per utilizzare il client nativo con Azure Bastion, dovete prima installare la Azure CLI sul vostro dispositivo.

Potete farlo rapidamente da PowerShell utilizzando il comando:

L’opzione –exact serve per assicurarvi che venga installato il pacchetto ufficiale di Microsoft Azure CLI, evitando ambiguità con altri pacchetti simili. Di default viene installata l’ultima versione disponibile, ma potete specificarne una in modo esplicito aggiungendo il parametro –version.

Io utilizzo sempre questa modalità tramite winget perché è veloce e mantiene automaticamente aggiornato il client. Date un’occhiata alle mie guide Windows Package Manager: Installazione semplificate delle applicazioni – ICT Power e Windows Package Manager: Installazione semplificata delle applicazioni in Windows Server 2025 – ICT Power

Figura 21: Installazione della Azure CLI tramite winget per utilizzare Azure Bastion con client nativo

Connessione tramite Azure CLI

Una volta installata la Azure CLI, potete avviare la connessione alla VM tramite Azure Bastion utilizzando il client RDP locale.

Il comando da utilizzare è:

Io ho utilizzato il comando:

A questo punto effettuate il login con l’utente che avete autorizzato tramite Microsoft Entra ID. Verrà avviata l’autenticazione, con eventuale MFA, e successivamente si aprirà la sessione RDP sul vostro client locale.

Figura 22: Connessione alla VM tramite Azure CLI e Azure Bastion con autenticazione Microsoft Entra ID

Figura 23: Richiesta della Multi-Factor Authentication (MFA)

Figura 24: Conferma dell’utilizzo del Single Sign-On (SSO)

Se tutto è stato configurato correttamente, il comando Azure CLI genera automaticamente un file .rdp e avvia la connessione tramite Remote Desktop.

A questo punto vedrete il prompt di sicurezza del client RDP che vi chiede di confermare la connessione al gateway Azure Bastion. Dopo la conferma, verrà completata l’autenticazione tramite Microsoft Entra ID e si aprirà la sessione sulla VM.

Figura 25: Connessione RDP tramite Azure Bastion avviata da Azure CLI con generazione automatica del file .rdp

Figura 26: Autenticazione tramite Microsoft Entra ID nel client RDP

All’interno della sessione vedete chiaramente che il login è stato effettuato con l’account aziendale, senza utilizzare credenziali locali della VM. Questo conferma che l’autenticazione è avvenuta tramite Entra ID e che i permessi sono stati applicati correttamente.

Figura 27: Accesso alla VM con utente Microsoft Entra ID, senza utilizzo di account locali

Verifica degli accessi tramite log Entra ID

Nel pannello dei Sign-in logs di Microsoft Entra ID è possibile vedere in modo chiaro tutte le connessioni effettuate alla macchina virtuale. Ogni accesso viene registrato con l’applicazione utilizzata, permettendo di distinguere immediatamente tra accesso tramite portale Azure, connessione via Bastion oppure utilizzo del client RDP nativo.

Nel caso della connessione con native client, comparirà l’applicazione Microsoft Remote Desktop Client, mentre per Bastion si vedrà Bastion-rdp-app. Questo dettaglio è fondamentale perché consente di capire esattamente come è avvenuta la connessione, senza ambiguità.

All’interno degli stessi log si trovano anche l’utente utilizzato, lo stato dell’autenticazione e le informazioni di origine come indirizzo IP e posizione geografica. In questo modo è possibile verificare non solo che l’accesso sia riuscito, ma anche da dove è stato effettuato e con quale modalità.

Figura 28: Log disponibili in Microsoft Entra ID

Integrazione con Conditional Access per la protezione delle connessioni RDP

L’integrazione con Conditional Access consente di applicare controlli di sicurezza avanzati alle connessioni RDP verso le macchine virtuali, sfruttando l’autenticazione centralizzata di Microsoft Entra ID. Poiché l’accesso avviene tramite identità Entra, è possibile imporre policy come MFA (Multi-Factor Authentication), restrizioni basate sulla posizione geografica, requisiti di dispositivo conforme o condizioni di rischio dell’utente. Questo garantisce che ogni connessione, sia tramite Azure Bastion che tramite native client, venga valutata dinamicamente prima di essere autorizzata, eliminando l’uso di credenziali locali e riducendo significativamente la superficie di attacco.

La creazione di una policy di Conditional Access consente di controllare in modo puntuale l’accesso alle macchine virtuali tramite Azure Bastion e native client RDP, applicando criteri di sicurezza centralizzati basati su Microsoft Entra ID. Durante la configurazione è fondamentale selezionare correttamente le risorse (cloud apps) su cui applicare la policy, includendo Microsoft Azure Linux Virtual Machine Sign-In, Microsoft Azure Windows Virtual Machine Sign-in o Microsoft Remote Desktop e le applicazioni di accesso alle VM, come mostrato in figura.

In questa fase si definisce l’ambito della policy, scegliendo gli utenti o gruppi interessati e specificando le applicazioni target. Successivamente si possono impostare le condizioni di accesso, come posizione, rischio o stato del dispositivo, e infine i controlli, ad esempio richiedendo MFA per garantire un ulteriore livello di protezione durante la connessione.

Questa configurazione assicura che ogni tentativo di accesso RDP venga valutato secondo le policy aziendali prima di essere autorizzato, rendendo l’accesso alle VM molto più sicuro e conforme alle best practice di sicurezza.

Figura 29: Configurazione delle risorse in una policy di Conditional Access

Figura 30: Configurazione dei controlli di accesso in Conditional Access

Limiti della soluzione

L’integrazione tra Azure Bastion e Microsoft Entra ID presenta alcune limitazioni da tenere in considerazione. Le connessioni RDP con autenticazione Entra ID dal portale non possono essere utilizzate insieme alla funzionalità di session recording grafica, quindi è necessario scegliere quale approccio adottare. L’autenticazione tramite Microsoft Entra ID non è supportata per connessioni dirette basate su IP (RDP o SSH), ma solo tramite Bastion o meccanismi integrati.

Dal portale Azure, l’autenticazione Entra ID è supportata esclusivamente per RDP verso VM Windows e SSH verso VM Linux, senza possibilità di scenari misti o alternativi. Per quanto riguarda il client nativo RDP, esistono vincoli lato dispositivo: la connessione è consentita solo da PC Windows 10 o successivi che siano Microsoft Entra registered, joined o hybrid joined nello stesso tenant della macchina virtuale.

Maggiori informazioni sono disponibili alla pagina Configure Microsoft Entra ID authentication – Azure Bastion | Microsoft Learn

Conclusioni

L’integrazione tra Azure Bastion e Microsoft Entra ID consente di gestire l’accesso alle macchine virtuali in modo sicuro e centralizzato, eliminando la necessità di utilizzare credenziali locali o di esporre servizi su indirizzi IP pubblici. Questo modello basato su identità permette di controllare chi può accedere alle risorse, applicare policy di sicurezza avanzate e mantenere una completa tracciabilità degli accessi, semplificando al tempo stesso la gestione operativa.