Esercizio - Limitare l'accesso ad Archiviazione di Azure usando gli endpoint servizio

Completato

Come progettista della soluzione, si intende spostare i file sensibili dei diagrammi di progettazione in Archiviazione di Azure. I file devono essere accessibili solo dai computer all'interno della rete aziendale. Si vuole creare un endpoint servizio di rete virtuale per Archiviazione di Azure per proteggere la connettività agli account di archiviazione.

In questa unità: creare un endpoint servizio e usare le regole di rete per limitare l'accesso ad Archiviazione di Azure. Si creerà un endpoint servizio di rete virtuale per Archiviazione di Azure nella subnet Database. Quindi si verifica se la macchina virtuale DataServer è in grado di accedere ad Archiviazione di Azure. Infine, si verifica che la macchina virtuale AppServer, che si trova in una subnet diversa, non sia in grado di accedere all'archiviazione.

Diagram of exercise scenario service endpoint and rules.

Aggiungere regole al gruppo di sicurezza di rete

In questo caso si garantisce che le comunicazioni con Archiviazione di Azure passino attraverso l'endpoint del servizio. Si aggiungeranno regole in uscita per consentire l'accesso al servizio di archiviazione e negare tutto il traffico Internet di altro tipo.

  1. Eseguire il comando seguente in Cloud Shell per creare una regola in uscita per consentire l'accesso all'archiviazione:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name Allow_Storage \
        --priority 190 \
        --direction Outbound \
        --source-address-prefixes "VirtualNetwork" \
        --source-port-ranges '*' \
        --destination-address-prefixes "Storage" \
        --destination-port-ranges '*' \
        --access Allow \
        --protocol '*' \
        --description "Allow access to Azure Storage"
    
  2. Eseguire il comando seguente in Cloud Shell per creare una regola in uscita per negare tutto l'accesso a Internet:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name Deny_Internet \
        --priority 200 \
        --direction Outbound \
        --source-address-prefixes "VirtualNetwork" \
        --source-port-ranges '*' \
        --destination-address-prefixes "Internet" \
        --destination-port-ranges '*' \
        --access Deny \
        --protocol '*' \
        --description "Deny access to Internet."
    

In ERP-SERVERS-NSG saranno ora presenti queste regole:

Nome regola Orientamento Priorità Scopo
AllowSSHRule In ingresso 100 Consentire SSH in ingresso
httpRule In ingresso 150 Non consentire da DataServer ad AppServer su 80
Allow_Storage In uscita 190 Consentire l'accesso ad Archiviazione di Azure
Deny_Internet In uscita 200 Negare l'accesso a Internet dalla rete virtuale

A questo punto, sia AppServer che DataServer hanno accesso al servizio Archiviazione di Azure.

Configurare un account di archiviazione e una condivisione file

In questo passaggio si crea un nuovo account di archiviazione e si aggiunge una condivisione file di Azure all'account. Questa condivisione file consente di archiviare i diagrammi di progettazione.

  1. Eseguire il comando seguente in Cloud Shell per creare un account di archiviazione per i documenti di progettazione:

    STORAGEACCT=$(az storage account create \
                    --resource-group $rg \
                    --name engineeringdocs$RANDOM \
                    --sku Standard_LRS \
                    --query "name" | tr -d '"')
    
  2. Per archiviare la chiave primaria dell'account di archiviazione in una variabile, eseguire il seguente comando in Cloud Shell:

    STORAGEKEY=$(az storage account keys list \
                    --resource-group $rg \
                    --account-name $STORAGEACCT \
                    --query "[0].value" | tr -d '"')
    
  3. Eseguire il comando seguente in Cloud Shell per creare una condivisione file di Azure denominata erp-data-share:

    az storage share create \
        --account-name $STORAGEACCT \
        --account-key $STORAGEKEY \
        --name "erp-data-share"
    

Abilitare l'endpoint servizio

È ora necessario configurare l'account di archiviazione in modo che sia accessibile solo dai server di database, assegnando l'endpoint di archiviazione alla subnet Databases. È quindi necessario aggiungere una regola di sicurezza all'account di archiviazione.

  1. Eseguire il comando seguente in Cloud Shell per assegnare l'endpoint Microsoft.Storage alla subnet:

    az network vnet subnet update \
        --vnet-name ERP-servers \
        --resource-group $rg \
        --name Databases \
        --service-endpoints Microsoft.Storage
    
  2. Eseguire il comando seguente in Cloud Shell per negare completamente l'accesso per modificare l'azione predefinita su Deny. Una volta negato l'accesso di rete, l'account di archiviazione non è accessibile da alcuna rete.

    az storage account update \
        --resource-group $rg \
        --name $STORAGEACCT \
        --default-action Deny
    
  3. Eseguire il comando seguente in Cloud Shell per limitare l'accesso all'account di archiviazione. Per impostazione predefinita, gli account di archiviazione sono aperti per accettare tutto il traffico. Si vuole che solo il traffico proveniente dalla subnet Databases possa accedere all'archiviazione.

    az storage account network-rule add \
        --resource-group $rg \
        --account-name $STORAGEACCT \
        --vnet-name ERP-servers \
        --subnet Databases
    

Testare l'accesso alle risorse di archiviazione

In questo passaggio si effettua la connessione a entrambi i server e si verifica che solo DataServer abbia accesso alla condivisione file di Azure nell'account di archiviazione.

  1. Eseguire il comando seguente in Cloud Shell per salvare gli indirizzi IP pubblici di AppServer e DataServer in variabili:

    APPSERVERIP="$(az vm list-ip-addresses \
                        --resource-group $rg \
                        --name AppServer \
                        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                        --output tsv)"
    
    DATASERVERIP="$(az vm list-ip-addresses \
                        --resource-group $rg \
                        --name DataServer \
                        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                        --output tsv)"
    
  2. Eseguire il comando seguente in Cloud Shell per connettersi alla macchina virtuale AppServer e provare a montare la condivisione file di Azure:

    ssh -t azureuser@$APPSERVERIP \
        "mkdir azureshare; \
        sudo mount -t cifs //$STORAGEACCT.file.core.windows.net/erp-data-share azureshare \
        -o vers=3.0,username=$STORAGEACCT,password=$STORAGEKEY,dir_mode=0777,file_mode=0777,sec=ntlmssp; findmnt \
        -t cifs; exit; bash"
    
  3. Immettere la password usata quando è stata creata la macchina virtuale.

  4. La risposta deve includere un messaggio mount error. Questa connessione non è consentita perché non c'è un endpoint servizio per l'account di archiviazione nella subnet Applicazioni.

  5. Eseguire il comando seguente in Cloud Shell per connettersi alla macchina virtuale DataServer e provare a montare la condivisione file di Azure:

    ssh -t azureuser@$DATASERVERIP \
        "mkdir azureshare; \
        sudo mount -t cifs //$STORAGEACCT.file.core.windows.net/erp-data-share azureshare \
        -o vers=3.0,username=$STORAGEACCT,password=$STORAGEKEY,dir_mode=0777,file_mode=0777,sec=ntlmssp;findmnt \
        -t cifs; exit; bash"
    
  6. Immettere la password usata quando è stata creata la macchina virtuale.

  7. Il montaggio deve avere esito positivo e la risposta deve includere i dettagli del punto di montaggio. Questo è consentito perché si è creato l'endpoint servizio per l'account di archiviazione nella subnet Databases.

Ora si è verificato che DataServer è in grado di accedere all'archiviazione usando l'endpoint servizio di archiviazione nella subnet Databases. Si è anche verificato che AppServer non può accedere all'archiviazione. Il motivo è che questo server si trova in una subnet diversa e non ha accesso all'endpoint servizio di rete virtuale.