Esercizio - Limitare l'accesso alla rete

Completato

Gli utenti si connettono al server app per inserire ordini, aggiornare il proprio account ed eseguire attività simili. Il server app a sua volta aggiorna il database con queste modifiche. Poiché i dati personali degli utenti sono archiviati nel database, è essenziale garantire che l'accesso sia consentito solo da risorse necessarie e attendibili. Esistono diversi modi per controllare l'accesso al database SQL tramite la rete.

Regole del firewall

Il database SQL di Azure ha un firewall predefinito che viene usato per consentire e negare l'accesso alla rete sia al server di database che ai singoli database. Inizialmente, il firewall del database SQL blocca tutti gli accessi pubblici al database SQL di Azure. Per accedere a un server di database, è necessario specificare una o più regole del firewall IP a livello di server che consentano di accedere al database SQL di Azure. Si usano le regole del firewall IP per specificare quali intervalli di indirizzi IP da Internet sono consentiti e se le applicazioni Azure possono provare a connettersi al database SQL di Azure.

Le regole del firewall vengono configurate a livello di server o di database. Le regole dichiarano specificamente quali risorse di rete sono autorizzate a stabilire una connessione al database. In base al livello, le regole che si possono applicare sono:

  • Regole del firewall a livello di server
    • Consentire l'accesso ai servizi di Azure
    • Regole di indirizzi IP
    • Regole della rete virtuale
  • Regole del firewall a livello di database
    • Regole di indirizzi IP

Nota

SQL Data Warehouse supporta solo le regole del firewall IP a livello di server e non le regole del firewall IP a livello di database.

Ecco come funzionano queste regole.

Regole del firewall a livello di server

Queste regole consentono ai client di accedere all'intera istanza di SQL Server di Azure, ovvero a tutti i database all'interno dello stesso server logico. Esistono tre tipi di regole che possono essere applicate a livello di server.

La regola Consenti l'accesso a Servizi di Azure consente ai servizi all'interno di Azure di connettersi al database SQL di Azure. Se abilitata, questa impostazione consente le comunicazioni da tutti gli indirizzi IP pubblici di Azure. Questa comunicazione include tutti i servizi PaaS (piattaforma distribuita come servizio) di Azure, ad esempio il Servizio app di Azure e il servizio Azure Container, nonché le macchine virtuali di Azure con accesso a Internet in uscita. Questa regola può essere configurata usando l'opzione di attivazione/disattivazione nel riquadro del firewall nel portale oppure con una regola IP che ha 0.0.0.0 come indirizzo IP iniziale e finale.

Diagramma che mostra come consentire l'accesso alla rete dei servizi di Azure.

Questa regola viene usata quando si hanno applicazioni in esecuzione nei servizi PaaS di Azure, ad esempio App per la logica di Azure o Funzioni di Azure, che devono accedere al database SQL di Azure. Molti di questi servizi non hanno un indirizzo IP statico, quindi questa regola garantisce che possano connettersi al database.

Importante

Questa opzione configura il firewall in modo da consentire tutte le connessioni da Azure, incluse le connessioni dalle sottoscrizioni di altri clienti. Quando si seleziona questa opzione, verificare che le autorizzazioni utente e di accesso limitino l'accesso ai soli utenti autorizzati.

Le regole di indirizzi IP sono regole basate su intervalli di indirizzi IP pubblici specifici. Gli indirizzi IP che si connettono da un intervallo IP pubblico consentito possono connettersi al database.

Diagramma che rappresenta una regola di indirizzo IP.

È possibile usare queste regole quando si ha un indirizzo IP pubblico statico che deve accedere al database.

Con le regole della rete virtuale è possibile consentire in modo esplicito la connessione da subnet specificate all'interno di una o più reti virtuali di Azure. Le regole della rete virtuale offrono un maggiore controllo di accesso ai database e possono essere un'opzione migliore. Poiché gli spazi indirizzi della rete virtuale di Azure sono privati, è possibile eliminare in modo efficace l'esposizione agli indirizzi IP pubblici e proteggere la connettività agli indirizzi controllati.

Diagramma che rappresenta una regola di rete virtuale.

Usare le regole di rete virtuale quando sono presenti macchine virtuali di Azure che devono accedere al database.

Per le regole a livello di server, è possibile creare e modificare tutte queste regole tramite il portale, PowerShell, l'interfaccia della riga di comando e Transact-SQL (T-SQL).

Regole del firewall a livello di database

Queste regole consentono l'accesso a un singolo database in un server logico e vengono archiviate nel database stesso. Per le regole a livello di database, è possibile configurare solo le regole di indirizzi IP. Il funzionamento è lo stesso di quando vengono applicate a livello di server, ma l'ambito è limitato solo al database.

Diagramma rappresenta una regola di rete dell'indirizzo IP del database.

Un vantaggio delle regole a livello di database è la portabilità. Quando si replica un database in un altro server, le regole a livello di database vengono replicate, poiché sono archiviate nel database stesso.

Lo svantaggio delle regole a livello di database è che è possibile usare solo regole di indirizzi IP. Queste regole possono limitare la flessibilità e aumentare il sovraccarico amministrativo.

Le regole del firewall a livello di database possono essere create e modificate solo tramite T-SQL.

Limitare l'accesso alla rete in pratica

È consigliabile usare le regole del firewall IP a livello di database per migliorare la sicurezza e la portabilità del database. Usare le regole del firewall IP a livello di server per gli amministratori e quando sono presenti più database con gli stessi requisiti di accesso e non si vuole dedicare tempo alla configurazione di ogni singolo database.

Ora è possibile esaminare il funzionamento delle regole in pratica e come è possibile proteggere l'accesso alla rete per consentire solo le operazioni necessarie. È importante ricordare che sono stati creati un server logico del database SQL di Azure, un database e la macchina virtuale appServer di Linux che funge da server applicazioni. Questo scenario è frequente quando le risorse all'interno di una rete virtuale devono accedere a un database di cui è stata eseguita la migrazione al database SQL di Azure. La funzionalità firewall del database SQL di Azure può essere usata in molti scenari, ma questo è un esempio con applicabilità pratica e illustra il funzionamento di ogni regola.

Verranno ora analizzate le impostazioni del firewall ed esaminate le relative modalità di funzionamento. Per gli esercizi si useranno sia il portale che Cloud Shell.

Il database creato non consente attualmente l'accesso da tutte le connessioni. Questo accesso limitato è previsto dalla progettazione e il comportamento dipende dai comandi eseguiti per creare il server logico e il database. Verificare che l'accesso non è disponibile.

  1. In Cloud Shell usare SSH per connettersi alla macchina virtuale di Linux, se non lo si è già fatto. Sostituire nnn.nnn.nnn.nnn con il valore di publicIpAddress nell'unità precedente.

    ssh nnn.nnn.nnn.nnn
    
  2. Eseguire di nuovo il comando sqlcmd recuperato in precedenza per provare a connettersi al database. Sostituire [server-name] con il nome del server. Sostituire [username] e [password] con le credenziali di ADMINUSER specificate nell'unità precedente. Assicurarsi di racchiudere nome utente e password tra virgolette singole in modo che i caratteri speciali non vengono interpretati erroneamente dalla shell.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Quando si prova a connettersi, verrà visualizzato un errore simile al seguente. Questo output è previsto poiché non è stato consentito alcun accesso al database.

    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2AF9.
    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible.Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
    

Concedere l'accesso in modo che sia possibile connettersi.

Usare la regola Consenti l'accesso a Servizi di Azure a livello di server

Poiché la macchina virtuale ha accesso a Internet in uscita, è possibile usare la regola Consenti l'accesso a Servizi di Azure per consentire l'accesso dalla macchina virtuale.

  1. Accedere al portale di Azure usando lo stesso account con cui è stata attivata la sandbox.

  2. Nella casella Cerca risorse, servizi e documentazione in alto cercare il nome del server di database, server-name. Selezionare SQL Server.

  3. Nel riquadro del menu a sinistra nel riquadro di SQL Server selezionare Rete in Sicurezza.

  4. Scorrere verso il basso fino a Eccezioni, selezionare la casella di controllo per Consenti alle risorse e ai servizi di Azure di accedere a questo server e quindi selezionare Salva. Attendere fino a quando il sistema riconosce questa modifica.

  5. Tornare nella sessione di SSH e provare di nuovo a connettersi al database.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    A questo punto dovrebbe essere possibile connettersi. Se la connessione ha esito positivo, viene visualizzato un prompt di sqlcmd.

    1>
    

La connettività quindi è stata aperta, ma questa impostazione attualmente consente l'accesso da qualsiasi risorsa di Azure, incluse le risorse all'esterno della sottoscrizione. È necessario applicare altre restrizioni all'accesso per limitare l'accesso di rete solo alle risorse che sono sotto controllo.

Usare una regola di indirizzi IP a livello di database

Ricordare che le regole di indirizzi IP a livello di database consentono l'accesso solo a un singolo database in un server logico. Usare una di queste regole per concedere l'accesso all'indirizzo IP statico della macchina virtuale appServer.

Per creare una regola di indirizzi IP a livello di database, è necessario eseguire alcuni comandi T-SQL. Creare una regola di database usando la convenzione seguente, in cui vengono passati il nome della regola, l'indirizzo IP iniziale e l'indirizzo IP finale. Specificando lo stesso valore per gli indirizzi IP iniziale e finale, si limita l'accesso a un singolo indirizzo IP. È possibile espandere l'intervallo se si ha un blocco di indirizzi più ampio che richiedono l'accesso.

EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '40.112.128.214', '40.112.128.214'
  1. Sempre dal prompt di sqlcmd eseguire il comando seguente. Sostituire l'indirizzo IP pubblico della macchina virtuale appServer in entrambe le posizioni.

    Suggerimento

    Quando si eseguono comandi T-SQL, come quello che segue, il comando GO nella seconda riga potrebbe non essere copiato tramite il prompt di sqlcmd. Potrebbe essere necessario digitare questa parte. Il comando T-SQL non viene eseguito senza tale parte. Assicurarsi perciò di eseguire il comando GO.

    EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '[From IP Address]', '[To IP Address]';
    GO
    

    Dopo aver eseguito il comando, immettere exit per uscire da sqlcmd. Rimanere connessi tramite SSH.

  2. Nel riquadro Rete del server SQL nel portale di Azure deselezionare la casella di controllo Consenti alle risorse e ai servizi di Azure di accedere a questo server e quindi selezionare Salva. Questa modifica disabilita l'accesso da tutti i servizi di Azure, ma è comunque possibile connettersi poiché è disponibile una regola IP a livello di database per il server.

  3. Tornare in Cloud Shell e riprovare a connettersi al database nella macchina virtuale a cui si è connessi tramite SSH.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    A questo punto dovrebbe essere possibile connettersi. Se la connessione riesce, viene visualizzato un prompt di sqlcmd.

    1>
    

L'uso di una regola a livello di database consente di isolare l'accesso in modo specifico per il database. Questa regola può essere utile se si vuole mantenere l'accesso alla rete configurato per ogni database. Se più database condividono lo stesso livello di accesso di rete, è possibile semplificare l'amministrazione usando una regola a livello di server per applicare lo stesso accesso a tutti i database nel server.

Usare una regola di indirizzi IP a livello di server

Le regole a livello di database sono un'ottima opzione, ma cosa accade se nello stesso server esistono più database a cui la macchina virtuale appServer deve connettersi? È possibile aggiungere una regola a livello di database per ogni database, ma questa operazione richiede maggiore lavoro via via che si aggiungono altri database. Per ridurre le attività di amministrazione, consentire l'accesso con una regola a livello di server, che viene applicata a tutti i database nel server.

Usare una regola IP a livello di server per limitare i sistemi autorizzati a connettersi.

  1. Sempre al prompt di sqlcmd, eseguire il comando seguente per eliminare la regola di indirizzi IP a livello di database.

    EXECUTE sp_delete_database_firewall_rule N'My Firewall Rule';
    GO
    

    Dopo aver eseguito il comando, immettere exit per uscire da sqlcmd. Rimanere connessi tramite SSH.

  2. Tornare nel portale di Azure e nel riquadro Rete per il server SQL selezionare Aggiungi regola firewall in Regole del firewall. Assegnare alla regola il nome Consenti appServer, immettere l'indirizzo IP pubblico della macchina virtuale appServer per Indirizzo IP iniziale e Indirizzo IP finale e quindi selezionare OK.

  3. Seleziona Salva.

    Screenshot del portale di Azure che mostra la creazione della regola del firewall del server.

  4. Tornare in Cloud Shell e nella macchina virtuale appServer provare di nuovo a connettersi al database.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    A questo punto dovrebbe essere possibile connettersi. La regola a livello di server consente l'accesso in base all'indirizzo IP pubblico della macchina virtuale appServer. Se la connessione ha esito positivo, viene visualizzato un prompt di sqlcmd.

    1>
    

    Immettere exit per uscire da sqlcmd. Rimanere connessi tramite SSH.

La connettività è stata isolata solo all'indirizzo IP specificato nella regola. L'isolamento funziona bene, ma può comunque essere difficile da gestire se si aggiungono altri sistemi che devono connettersi. Richiede anche un IP statico o un IP da un intervallo di indirizzi IP definito.

Se l'indirizzo IP è dinamico e cambia, è necessario aggiornare la regola per garantire la connettività. La macchina virtuale appServer è attualmente configurata con un indirizzo IP dinamico. A un certo punto, questo indirizzo IP probabilmente cambierà e causerà l'interruzione immediata dell'accesso. Ecco in che modo le regole della rete virtuale possono essere utili in questa configurazione.

Usare una regola della rete virtuale a livello di server

In questo caso, poiché la macchina virtuale viene eseguita in Azure, è possibile usare una regola della rete virtuale a livello di server per isolare l'accesso e semplificarlo per consentire a servizi futuri di ottenere l'accesso al database.

  1. Tornare nel portale di Azure e nel riquadro Rete selezionare Aggiungi una regola di rete virtuale in Reti virtuali.

  2. Viene visualizzata la finestra di dialogo Crea/Aggiorna regola della rete virtuale. Impostare i valori seguenti.

    Impostazione valore
    Nome Lasciare il valore predefinito
    Abbonamento Concierge Subscription
    Rete virtuale appServerVNET
    Nome subnet/prefisso indirizzo appServerSubnet / 10.0.0.0/24
  3. Selezionare Abilita per abilitare l'endpoint del servizio nella subnet, quindi OK dopo aver abilitato l'endpoint per creare la regola.

  4. Rimuovere la regola dell'indirizzo IP. Selezionare ... accanto alla regola Consenti appServer, selezionare Elimina e quindi Salva.

  5. Tornare in Cloud Shell e nella macchina virtuale appServer provare di nuovo a connettersi al database.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    A questo punto dovrebbe essere possibile connettersi. Se la connessione riesce, viene visualizzato un prompt di sqlcmd.

    1>
    

Le operazioni eseguite consentono effettivamente di rimuovere qualsiasi accesso pubblico al server SQL, permettendo l'accesso solo dalla subnet specifica della rete virtuale di Azure definita. Se si aggiungono altri server app in quella subnet, non è necessaria alcuna configurazione aggiuntiva. Tutti i server della subnet potranno connettersi al server SQL.

Questa configurazione limita l'esposizione ai servizi all'esterno dell'ambito del controllo e semplifica l'amministrazione se si aggiungono altri server. Questo metodo è efficace per proteggere l'accesso di rete a un database SQL di Azure.