Övning – Skapa och hantera nätverkssäkerhetsgrupper

Slutförd

Som lösningsarkitekt för tillverkningsföretaget vill du nu börja flytta ERP-appen och databasservrarna till Azure. Som ett första steg ska du testa din nätverkssäkerhetsplan med hjälp av två av dina servrar.

I den här enheten konfigurerar du en nätverkssäkerhetsgrupp och säkerhetsregler för att begränsa nätverkstrafik till specifika servrar. Du vill att appservern ska kunna ansluta till databasservern via HTTP. Du vill inte att databasservern ska kunna använda HTTP för att ansluta till appservern.

Diagram över nätverkssäkerhetsgrupper för övningsscenario.

Skapa ett virtuellt nätverk och en nätverkssäkerhetsgrupp

Först skapar du det virtuella nätverket och undernäten för dina serverresurser. Sedan skapar du en nätverkssäkerhetsgrupp.

  1. I Azure Cloud Shell kör du följande kommando för att tilldela sandbox-resursgruppen till variabeln rg:

    rg="<rgn>[sandbox resource group name]</rgn>"
    
  2. Om du vill skapa det virtuella ERP-servrarna och undernätet Program kör du följande kommando i Cloud Shell:

    az network vnet create \
        --resource-group $rg \
        --name ERP-servers \
        --address-prefixes 10.0.0.0/16 \
        --subnet-name Applications \
        --subnet-prefixes 10.0.0.0/24
    
  3. Om du vill skapa undernätet Databaser kör du följande kommando i Cloud Shell:

    az network vnet subnet create \
        --resource-group $rg \
        --vnet-name ERP-servers \
        --address-prefixes 10.0.1.0/24 \
        --name Databases
    
  4. Om du vill skapa nätverkssäkerhetsgruppen ERP-SERVERS-NSG kör du följande kommando i Cloud Shell:

    az network nsg create \
        --resource-group $rg \
        --name ERP-SERVERS-NSG
    

Skapa virtuella datorer som kör Ubuntu

Sedan skapar du två virtuella datorer som heter AppServer och DataServer. Du distribuerar AppServer till undernätet Applications och DataServer till undernätet Databases. Lägg till VM-nätverksgränssnitten till nätverkssäkerhetsgruppen ERP-SERVERS-NSG. Sedan använder du de här virtuella datorerna för att testa nätverkssäkerhetsgruppen.

  1. Om du vill skapa den virtuella AppServer-datorn kör du följande kommando i Cloud Shell. För administratörskontot ersätter du <password> med ett komplext lösenord.

    wget -N https://raw.githubusercontent.com/MicrosoftDocs/mslearn-secure-and-isolate-with-nsg-and-service-endpoints/master/cloud-init.yml && \
    az vm create \
        --resource-group $rg \
        --name AppServer \
        --vnet-name ERP-servers \
        --subnet Applications \
        --nsg ERP-SERVERS-NSG \
        --image Ubuntu2204 \
        --size Standard_DS1_v2 \
         --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
        --no-wait \
        --admin-password <password>
    
  2. Om du vill skapa den virtuella datorn DataServer kör du följande kommando i Cloud Shell. För administratörskontot ersätter du <password> med ett komplext lösenord.

    az vm create \
        --resource-group $rg \
        --name DataServer \
        --vnet-name ERP-servers \
        --subnet Databases \
        --nsg ERP-SERVERS-NSG \
        --size Standard_DS1_v2 \
        --image Ubuntu2204 \
        --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
         --no-wait \
        --admin-password <password>
    
  3. Det kan ta flera minuter för de virtuella datorerna att försättas i körningstillstånd. Kontrollera att de virtuella datorerna körs genom att köra följande kommando i Cloud Shell:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, Provisioned:provisioningState, Power:powerState}" \
        --output table
    

    När den virtuella datorn har skapats bör du se följande utdata:

    Name        Provisioned    Power
    ----------  -------------  ----------
    AppServer   Succeeded      VM running
    DataServer  Succeeded      VM running
    

Kontrollera standardanslutningen

Nu ska du öppna en Secure Shell-session (SSH) till var och en av dina virtuella datorer. Kom ihåg att du än så länge har distribuerat en nätverkssäkerhetsgrupp med standardregler.

  1. Använd SSH direkt från Cloud Shell för att ansluta till dina virtuella datorer. För att göra det här behöver du de offentliga IP-adresser som dina virtuella datorer har tilldelats. Kör följande kommando i Cloud Shell för att lista de IP-adresser som du ska använda för att ansluta till de virtuella datorerna:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \
        --output table
    
  2. För att göra det enklare att ansluta till dina virtuella datorer under resten av övningen tilldelar du de offentliga IP-adresserna till variabler. Om du vill spara den offentliga IP-adressen för AppServer och DataServer i en variabel kör du följande kommando i Cloud Shell:

    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)"
    
  3. Kör följande kommando i Cloud Shell för att kontrollera om du kan ansluta till din virtuella AppServer-dator :

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Du får meddelandet Connection timed out.

  4. Kör följande kommando i Cloud Shell för att kontrollera om du kan ansluta till den virtuella Datorn DataServer :

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    

    Du får samma meddelande om anslutningsfel.

Kom ihåg att standardreglerna nekar all inkommande trafik till ett virtuellt nätverk såvida inte trafiken kommer från samma virtuella nätverk. Regeln Neka alla inkommande blockerade de inkommande SSH-anslutningar som du precis försökte.

Inkommande

Name Prioritet Käll-IP-adress Mål-IP-adress Access
Tillåt inkommande virtuella nätverk 65000 VIRTUAL_NETWORK VIRTUAL_NETWORK Tillåt
Neka alla inkommande 65500 * * Neka

Skapa en säkerhetsregel för SSH

Som du nu har erfarit omfattar standardreglerna i nätverkssäkerhetsgruppen ERP-SERVERS-NSG regeln Neka alla inkommande. Nu lägger du till en regel så att du kan använda SSH för att ansluta till AppServer och DataServer.

  1. Om du vill skapa en ny regel för inkommande säkerhet för att aktivera SSH-åtkomst kör du följande kommando i Cloud Shell:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name AllowSSHRule \
        --direction Inbound \
        --priority 100 \
        --source-address-prefixes '*' \
        --source-port-ranges '*' \
        --destination-address-prefixes '*' \
        --destination-port-ranges 22 \
        --access Allow \
        --protocol Tcp \
        --description "Allow inbound SSH"
    
  2. Kör följande kommando i Cloud Shell för att kontrollera om du nu kan ansluta till din virtuella AppServer-dator :

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Det kan ta någon minut innan regeln för nätverkssäkerhetsgrupp börjar gälla. Om du får ett meddelande om anslutningsfel väntar du en stund och försöker igen.

  3. Du bör nu kunna ansluta. Efter meddelandet Are you sure you want to continue connecting (yes/no)? skriver du yes.

  4. Ange det lösenord som du definierade när du skapade den virtuella datorn.

  5. Om du vill stänga AppServer-sessionen anger du exit.

  6. Om du vill kontrollera om du nu kan ansluta till den virtuella Datorn DataServer kör du följande kommando i Cloud Shell:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    
  7. Du bör nu kunna ansluta. Efter meddelandet Are you sure you want to continue connecting (yes/no)? skriver du yes.

  8. Ange det lösenord som du definierade när du skapade den virtuella datorn.

  9. Skriv för att stänga exit-sessionen.

Skapa en säkerhetsregel för att förhindra webbåtkomst

Nu lägger du till en regel så att AppServer kan kommunicera med DataServer via HTTP men DataServer inte kan kommunicera med AppServer via HTTP. Följande är de interna IP-adresserna för dessa servrar:

Servernamn IP-adress
AppServer 10.0.0.4
DataServer 10.0.1.4
  1. Om du vill skapa en ny regel för inkommande säkerhet för att neka HTTP-åtkomst via port 80 kör du följande kommando i Cloud Shell:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes 10.0.1.4 \
        --source-port-ranges '*' \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80"
    

Testa HTTP-anslutning mellan virtuella datorer

Här kontrollerar du om den nya regeln fungerar. AppServer ska kunna kommunicera med DataServer via HTTP. DataServer ska inte kunna kommunicera med AppServer via HTTP.

  1. Om du vill ansluta till din virtuella AppServer-dator kör du följande kommando i Cloud Shell. Kontrollera om AppServer kan kommunicera med DataServer via HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Ange det lösenord som du definierade när du skapade den virtuella datorn.

  3. Svaret bör innehålla ett 200 OK-meddelande.

  4. Om du vill ansluta till den virtuella Datorn DataServer kör du följande kommando i Cloud Shell. Kontrollera om DataServer kan kommunicera med AppServer via HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Ange det lösenord som du definierade när du skapade den virtuella datorn.

  6. Detta bör inte fungera eftersom du har blockerat åtkomsten via port 80. Efter en stund bör du få meddelandet Connection timed out. Om du vill stoppa kommandot före tidsgränsen väljer du Ctrl+C.

Distribuera en appsäkerhetsgrupp

Skapa sedan en appsäkerhetsgrupp för databasservrar så att alla servrar i den här gruppen kan tilldelas samma inställningar. Du planerar att distribuera flera databasservrar och vill förhindra att de servrarna kommer åt appservrar via HTTP. Genom att tilldela källor i appsäkerhetsgruppen behöver du inte manuellt underhålla en lista över IP-adresser i nätverkssäkerhetsgruppen. I stället tilldelar du nätverksgränssnitten för de virtuella datorer som du vill hantera till appsäkerhetsgruppen.

Diagram över appsäkerhetsgrupper för övningsscenario.

  1. Om du vill skapa en ny appsäkerhetsgrupp med namnet ERP-DB-SERVERS-ASG kör du följande kommando i Cloud Shell:

    az network asg create \
        --resource-group $rg \
        --name ERP-DB-SERVERS-ASG
    
  2. Om du vill associera DataServer med appsäkerhetsgruppen kör du följande kommando i Cloud Shell:

    az network nic ip-config update \
        --resource-group $rg \
        --application-security-groups ERP-DB-SERVERS-ASG \
        --name ipconfigDataServer \
        --nic-name DataServerVMNic \
        --vnet-name ERP-servers \
        --subnet Databases
    
  3. Om du vill uppdatera HTTP-regeln i nätverkssäkerhetsgruppen ERP-SERVERS-NSG kör du följande kommando i Cloud Shell. Det ska referera till appsäkerhetsgruppen ERP-DB-Servers.

    az network nsg rule update \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes "" \
        --source-port-ranges '*' \
        --source-asgs ERP-DB-SERVERS-ASG \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80 using application security group"
    

Testa den uppdaterade HTTP-säkerhetsregeln

  1. Om du vill ansluta till din virtuella AppServer-dator kör du följande kommando i Cloud Shell. Kontrollera om AppServer kan kommunicera med DataServer via HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Ange det lösenord som du definierade när du skapade den virtuella datorn.

  3. Som förut bör svaret innehålla ett 200 OK-meddelande. Det kan ta någon minut innan inställningarna för appsäkerhetsgruppen börjar gälla. Om du till en början inte får meddelandet 200 OK väntar du någon minut och försöker sedan igen.

  4. Om du vill ansluta till din DataServer kör du följande kommando i Cloud Shell. Kontrollera om DataServer kan kommunicera med AppServer via HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Ange det lösenord som du definierade när du skapade den virtuella datorn.

  6. Precis som tidigare bör detta inte fungera eftersom du har blockerat åtkomsten via port 80. Efter en stund bör du få meddelandet Connection timed out. Om du vill stoppa kommandot före tidsgränsen väljer du Ctrl+C.

Nu har du bekräftat att nätverkssäkerhetsgruppens regel fungerar med en appsäkerhetsgrupp på samma sätt som när du använde en käll-IP-adress. Om vi har lagt till ytterligare dataservrar kan vi enkelt se till att de har rätt nätverkssäkerhet genom att lägga till de nya servrarna i ERP-DB-SERVERS-ASG.