Esercizio - Configurare l'ambiente sandbox
In questa unità vengono configurate le risorse da usare in tutto il modulo. Immaginare un'architettura di base costituita da un server che ospita un'applicazione usata dai clienti. Il server si connette a un database per l'archiviazione dei dati. L'applicazione viene eseguita in una macchina virtuale. Di recente è stata eseguita la migrazione del database da SQL Server in esecuzione in una macchina virtuale a un database nel servizio Database SQL di Azure. Per dimostrare come proteggere il database, configurare le risorse seguenti necessarie per questo modulo:
- Una macchina virtuale Linux denominata appServer. Questo server funge da server applicazioni a cui gli utenti si connetteranno. Deve connettersi al database. Installare
sqlcmd
nella macchina virtuale per simulare un'applicazione in esecuzione su appServer che stabilisce connessioni al database. - Un server logico del database SQL di Azure. Questo server logico è necessario per ospitare uno o più database.
- Un database nel server logico denominato marketplaceDb. Viene creato usando il database demo AdventureWorksLT, in modo da avere a disposizione tabelle e dati da usare. Questi dati includono alcuni dati sensibili, come indirizzi di posta elettronica e numeri di telefono, che dovranno essere adeguatamente protetti.
Creare un database SQL di Azure
Prima di tutto impostare alcune variabili. Sostituire i valori seguenti visualizzati in
[]
con valori di propria scelta.[password]
deve contenere almeno otto caratteri di almeno tre delle categorie seguenti: maiuscole, minuscole, numeri e caratteri non alfanumerici. Salvare il valore per usarlo in un secondo momento.export ADMINLOGIN='[ServerAdmin]' export PASSWORD='[password]' export SERVERNAME=[server-name] export RESOURCEGROUP=<rgn>[sandbox resource group name]</rgn> export LOCATION=$(az group show --name $RESOURCEGROUP | jq -r '.location')
Eseguire il comando seguente per creare un nuovo server logico con database SQL di Azure.
az sql server create \ --name $SERVERNAME \ --resource-group $RESOURCEGROUP \ --location $LOCATION \ --admin-user $ADMINLOGIN \ --admin-password $PASSWORD
Eseguire il comando seguente per creare il database denominato marketplaceDb nel server logico creato. Per questo comando si usa il database AdventureWorksLT come modello, in modo che siano disponibili alcune tabelle pre-popolate con cui lavorare.
az sql db create --resource-group $RESOURCEGROUP \ --server $SERVERNAME \ --name marketplaceDb \ --sample-name AdventureWorksLT \ --service-objective Basic
Eseguire il comando seguente ottenere la stringa di connessione per questo database.
az sql db show-connection-string --client sqlcmd --name marketplaceDb --server $SERVERNAME | jq -r
L'output dovrebbe essere simile all'esempio seguente. Tenere a portata di mano questo comando perché sarà necessario per connettersi al database più avanti in questo modulo. Notare i segnaposto
[username]
e[password]
nel comando, che devono essere sostituiti con le credenzialiADMINLOGIN
ePASSWORD
specificate nelle variabili in precedenza.sqlcmd -S tcp:server12345.database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
Creare e configurare una macchina virtuale Linux
Creare la macchina virtuale Linux da usare per i prossimi esempi.
Eseguire il comando seguente per creare la macchina virtuale. Il completamento di questo comando potrebbe richiedere alcuni minuti.
az vm create \ --resource-group $RESOURCEGROUP \ --name appServer \ --image Ubuntu2204 \ --size Standard_DS2_v2 \ --public-ip-sku Standard \ --generate-ssh-keys
Quando il comando viene completato, verrà visualizzato output simile all'esempio seguente.
{ "fqdns": "", "id": "/subscriptions/nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn/resourceGroups/learn-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn/providers/Microsoft.Compute/virtualMachines/appServer", "location": "westus", "macAddress": "nn-nn-nn-nn-nn-nn", "powerState": "VM running", "privateIpAddress": "nn.nn.nn.nn", "publicIpAddress": "nnn.nnn.nnn.nnn", "resourceGroup": "learn-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn", "zones": "" }
Dopo che la macchina virtuale è stata creata, connettersi all'indirizzo IP pubblico di questa tramite SSH.
ssh nnn.nnn.nnn.nnn
Dove
nnn.nnn.nnn.nnn
è il valore dell'output dipublicIpAddress
nel passaggio precedente.Nota
Ci sono due aspetti da considerare. Prima di tutto, non è necessaria la password perché è stata generata una coppia di chiavi SSH durante la creazione della macchina virtuale. In secondo luogo, al momento della connessione shell iniziale alla macchina virtuale, viene visualizzata una richiesta di conferma dell'autenticità dell'host. Questo avviene perché ci si sta connettendo a un indirizzo IP anziché a un nome host. Rispondendo sì, l'indirizzo IP viene salvato come host valido per la connessione e quest'ultima potrà procedere.
Per concludere, installare mssql-tools nella macchina virtuale Linux per poter stabilire una connessione al database usando sqlcmd.
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bash_profile echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc source ~/.bashrc curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list sudo apt-get update sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 unixodbc-dev
Nota
Per alcuni di questi comandi scorrerà molto testo, quindi assicurarsi di premere INVIO dopo il comando finale per essere certi che venga eseguito.
Sono stati creati un server logico di database SQL di Azure, un database nel server logico e una macchina virtuale denominata appServer che simula la connettività di rete da un server applicazioni. Vediamo ora come è possibile proteggere adeguatamente il database.