Esercizio - Limitare l'accesso alla rete

Completato

Gli utenti si connettono al server app per immettere gli ordini, aggiornare il proprio account ed eseguire attività simili. Il server app aggiorna a sua volta il database con queste modifiche. Poiché gli utenti hanno dati personali archiviati nel database, è fondamentale assicurarsi di consentire l'accesso solo da risorse attendibili e necessarie. Esistono diversi modi per controllare l'accesso al database SQL in rete.

Regole del firewall

database SQL di Azure dispone di un firewall predefinito che consente e nega l'accesso di rete sia al server di database stesso che ai singoli database. Inizialmente, il firewall 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 database. Le regole specificamente dichiarano quali risorse di rete sono autorizzate a stabilire una connessione al database. A seconda del livello, le regole che è possibile applicare sono le seguenti:

  • 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.

Esaminare in modo più approfondito il funzionamento di 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.

Diagram shows how to allow access to Azure services network.

Questa regola viene usata quando sono presenti applicazioni eseguite nei servizi PaaS in Azure, ad esempio App per la logica di Azure o Funzioni di Azure che devono accedere alle database SQL di Azure. Molti di questi servizi non hanno un indirizzo IP statico, quindi questa regola garantisce che siano in grado di 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, assicurarsi che le autorizzazioni di accesso e utente limitino l'accesso solo agli 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 sono autorizzati a connettersi al database.

Diagram represents an IP address rule.

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

Le regole di rete virtuale consentono di consentire in modo esplicito la connessione da subnet specificate all'interno di una o più reti virtuali di Azure. Le regole di rete virtuale possono fornire un maggiore controllo di accesso ai database e possono essere un'opzione preferita. Poiché gli spazi degli indirizzi della rete virtuale di Azure sono privati, è possibile eliminare efficacemente l'esposizione agli indirizzi IP pubblici e proteggere la connettività a tali indirizzi che si controllano.

Diagram represents a virtual network rule.

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 degli indirizzi IP. Il funzionamento è lo stesso di quando vengono applicate a livello di server, ma l'ambito è limitato solo al database.

Diagram represents a database IP address network rule.

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é vengono 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

Come procedura consigliata, usare le regole del firewall IP a livello di database per migliorare la sicurezza e rendere il database più portabile. Usare le regole del firewall IP a livello di server per gli amministratori e quando sono presenti diversi database con gli stessi requisiti di accesso, in modo da non dedicare tempo alla configurazione di ogni database singolarmente.

Esaminare il funzionamento di queste regole e come proteggere l'accesso alla rete per consentire solo ciò che è necessario. Tenere presente che è stato creato un server logico database SQL di Azure, un database e la macchina virtuale Linux appServer 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.

Esaminare le impostazioni del firewall e vedere come funzionano. Per questi esercizi si usano sia il portale che Cloud Shell.

Il database creato non consente attualmente l'accesso da alcuna connessione. Questo accesso limitato è progettato e basato sui comandi eseguiti per creare il server logico e il database. Verificare che non sia disponibile alcun accesso.

  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 nuovamente il sqlcmd comando recuperato in precedenza per tentare di connettersi al database. Assicurarsi di sostituire [username] e [password] con le credenziali ADMINUSER specificate nell'unità precedente. Assicurarsi di mantenere le virgolette singole intorno al nome utente e alla password in modo che la shell non interpreta erroneamente i caratteri speciali.

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

    Quando si tenta di connettersi, verrà visualizzato un errore simile all'output seguente. Questo output è previsto perché l'accesso al database non è consentito.

    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 da potersi connettere.

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 ai 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, serverNNNNN. 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 alla sessione SSH, provare di nuovo a connettersi al database.

    sqlcmd -S tcp:serverNNNNN.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>
    

È stata aperta la connettività, ma questa impostazione consente attualmente l'accesso da qualsiasi risorsa di Azure, incluse le risorse esterne alla sottoscrizione. Limitare ulteriormente questo accesso per limitare l'accesso alla rete solo alle risorse all'interno del 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. Usarne uno qui per concedere l'accesso all'indirizzo IP statico della macchina virtuale appServer .

Per creare una regola IP a livello di database, è necessario eseguire alcuni comandi T-SQL. Creare una regola di database usando la convenzione seguente, in cui si passa il nome della regola, l'indirizzo IP iniziale e l'indirizzo IP finale. Specificando gli indirizzi IP iniziali e finali allo stesso modo, si limita l'accesso a un singolo INDIRIZZO IP. È possibile espandere l'intervallo se si dispone di 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. Mentre è ancora al 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, ad esempio il codice seguente, nella GO seconda riga potrebbe non essere copiato al sqlcmd prompt. Potrebbe essere necessario digitare questa parte. Il comando T-SQL non verrà eseguito senza di esso, quindi assicurarsi di eseguire il GO comando .

    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 per SQL Server del portale di Azure deselezionare Consenti ai servizi e alle risorse di Azure di accedere a questo server e quindi selezionare Salva. Questa modifica disabilita l'accesso da tutti i servizi di Azure, ma è possibile connettersi perché è disponibile una regola IP a livello di database per il server.

  3. Tornare in Cloud Shell, nella macchina virtuale a cui si è connessi tramite SSH, provare di nuovo a connettersi al database.

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

    A questo punto dovrebbe essere possibile connettersi. Se ha esito positivo, 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 configurato l'accesso di rete 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 sono presenti più database nello stesso server a cui deve connettersi la macchina virtuale appServer ? È possibile aggiungere una regola a livello di database a ogni database, ma può richiedere più lavoro man mano che si aggiungono altri database. Per ridurre le attività di amministrazione, consentire l'accesso con una regola a livello di server, che si applica a tutti i database nel server.

Usare una regola IP a livello di server per limitare i sistemi che possono 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 alla portale di Azure, nel riquadro Rete per SQL Server, in Regole del firewall selezionare Aggiungi una regola 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 of the Azure portal showing the server firewall rule creation.

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

    sqlcmd -S tcp:serverNNNNN.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à è 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 indirizzo IP statico o un indirizzo 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. Questo indirizzo IP potrebbe cambiare a un certo punto, interrompendo l'accesso non appena ciò avviene. Esaminare ora come le regole di rete virtuale possono essere utili nella configurazione.

Usare una regola della rete virtuale a livello di server

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

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

  2. Viene visualizzata la finestra di dialogo Crea/Aggiorna regola di 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, nella macchina virtuale appServer , provare a connettersi di nuovo al database.

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

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

    1>
    

Ciò che è stato fatto in questo caso rimuove in modo efficace qualsiasi accesso pubblico a SQL Server. Consente l'accesso solo dalla subnet specifica nella rete virtuale di Azure definita. Se si aggiungono altri server app in tale subnet, non è necessaria alcuna configurazione aggiuntiva. Qualsiasi server in tale subnet può connettersi al server SQL.

Questa configurazione limita l'esposizione ai servizi al di fuori dell'ambito di 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.