Esercizio - Configurare l'ambiente sandbox

Completato

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

  1. 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')
    
  2. 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
    
  3. 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
    
  4. 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 credenziali ADMINLOGIN e PASSWORD 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.

  1. 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": ""
    }
    
  2. 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 di publicIpAddress 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 , l'indirizzo IP viene salvato come host valido per la connessione e quest'ultima potrà procedere.

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