Azure SQL Database e Private Endpoint

Recentemente ho avuto l’occasione di configurare le impostazioni di networking per un database Azure SQL e desidero condividere un aspetto che non avevo considerato durante le scelte iniziali di deployment della soluzione.

La soluzione comprende un database Azure SQL, un’applicazione e una macchina virtuale Azure che ospita l’applicazione la quale necessita della connessione al database.

Per ragioni di sicurezza, il database dell’applicazione deve essere accessibile, in alcuni casi, dalla rete internet pubblica, previa autorizzazione dell’indirizzo IP del client sul firewall a livello di database. Il database deve essere accessibile ovviamente anche dalla VM Azure. Inoltre, deve essere sempre rispettato il principio del minimo privilegio.

Dopo aver effettuato il deploy del database Azure SQL e della macchina virtuale, non avendo al momento richieste di accesso provenienti dalla rete internet pubblica, ho disabilitato l’accesso pubblico al server SQL. La configurazione degli indirizzi IP nel firewall potrà avvenire successivamente.

Il passo successivo è stato configurare un Private Endpoint che consentisse alla VM di connettersi al database tramite connettività privata, limitando l’accesso dalla virtual network in cui si trova la macchina virtuale che ospita l’applicazione.

La procedura è descritta nella documentazione Microsoft a questo link.

Si tratta di configurare un endpoint privato in grado di collegare la virtual network della VM al server Azure SQL tramite Azure Private Link. Per farlo è sufficiente accedere alla scheda Networking della sezione Security del server SQL. Il pulsante Create a private endpoint nella scheda Private access permette di aprire la pagina di configurazione; tuttavia, nel mio caso, non era possibile selezionare la virtual network associata alla macchina virtuale e di conseguenza non poteva essere creato l’endpoint privato.

Osservando le reti disponibili per l’associazione mi sono accorto che nell’elenco erano presenti esclusivamente virtual network distribuite nella stessa region selezionata per il Private Endpoint. La VM che stavo cercando di collegare si trovava invece in una region differente. Il punto non era quindi la region del server Azure SQL, ma la region scelta per il Private Endpoint: selezionando la stessa region della virtual network della VM, la rete è comparsa tra quelle selezionabili e ho potuto completare la configurazione.

Conclusioni

Nel caso dei Private Endpoint, la virtual network selezionabile deve trovarsi nella stessa region del Private Endpoint che si sta creando. Il server Azure SQL può trovarsi anche in una region diversa, perché la risorsa collegata tramite Private Link non deve necessariamente essere distribuita nella stessa region della virtual network.