Übung: Erstellen und Verwalten von Netzwerksicherheitsgruppen

Abgeschlossen

Als Lösungsarchitekt des Fertigungsunternehmens möchten Sie nun damit beginnen, die ERP-App und Datenbankserver zu Azure zu migrieren. Zunächst testen Sie Ihren Netzwerksicherheitsplan mithilfe von zwei Servern.

In dieser Lerneinheit konfigurieren Sie eine Netzwerksicherheitsgruppe und Sicherheitsregeln, um den Netzwerkdatenverkehr auf spezifische Server einzuschränken. Sie möchten, dass Ihr App-Server eine Verbindung über HTTP mit Ihrem Datenbankserver herstellen kann. Der Datenbankserver soll jedoch nicht in der Lage sein, eine Verbindung mit dem App-Server über HTTP herzustellen.

Diagramm zum Übungsszenario für Netzwerksicherheitsgruppen

Erstellen eines virtuellen Netzwerks und einer Netzwerksicherheitsgruppe

Sie erstellen zunächst das virtuelle Netzwerk und die Subnetze für Ihre Serverressourcen. Dann erstellen Sie eine Netzwerksicherheitsgruppe.

  1. Führen Sie in Azure Cloud Shell den folgenden Befehl aus, um der Variablen rg die Sandboxressourcengruppe zuzuweisen:

    rg="<rgn>[sandbox resource group name]</rgn>"
    
  2. Führen Sie den folgenden Befehl in Cloud Shell aus, um das virtuelle Netzwerk ERP-servers und das Subnetz Applications zu erstellen:

    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. Führen Sie den folgenden Befehl in Cloud Shell aus, um das Subnetz Databases zu erstellen:

    az network vnet subnet create \
        --resource-group $rg \
        --vnet-name ERP-servers \
        --address-prefixes 10.0.1.0/24 \
        --name Databases
    
  4. Führen Sie den folgenden Befehl in Cloud Shell aus, um die Netzwerksicherheitsgruppe ERP-SERVERS-NSG zu erstellen:

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

Erstellen von VMs mit Ubuntu

Als Nächstes erstellen Sie zwei VMs namens AppServer und DataServer. AppServer stellen Sie im Subnetz Applications und DataServer im Subnetz Databases bereit. Fügen Sie die VM-Netzwerkschnittstellen zur Netzwerksicherheitsgruppe ERP-SERVERS-NSG hinzu. Verwenden Sie dann diese VMs, um Ihre Netzwerksicherheitsgruppe zu testen.

  1. Führen Sie den folgenden Befehl in Cloud Shell aus, um die VM AppServer zu erstellen. Ersetzen Sie das <password> für das Administratorkonto durch ein komplexes Kennwort.

    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. Führen Sie den folgenden Befehl in Cloud Shell aus, um die VM DataServer zu erstellen. Ersetzen Sie das <password> für das Administratorkonto durch ein komplexes Kennwort.

    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. Es kann einige Minuten dauern, bis die VMs ausgeführt werden. Führen Sie den folgenden Befehl in Cloud Shell aus, um zu überprüfen, ob die VMs ausgeführt werden:

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

    Wenn die Erstellung Ihrer VMs abgeschlossen ist, sollte die folgende Ausgabe angezeigt werden:

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

Überprüfen der Standardkonnektivität

Als Nächstes versuchen Sie, eine SSH-Sitzung (Secure Shell) mit Ihren VMs herzustellen. Denken Sie daran, dass Sie bisher eine Netzwerksicherheitsgruppe mit Standardregeln bereitgestellt haben.

  1. Verwenden Sie SSH direkt über Cloud Shell, um eine Verbindung mit Ihren VMs herzustellen. Hierzu benötigen Sie die öffentlichen IP-Adressen, die Ihren VMs zugewiesen wurden. Führen Sie den folgenden Befehl in Cloud Shell aus, um die IP-Adressen aufzulisten, die Sie zum Herstellen der Verbindungen mit den VMs verwenden werden:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \
        --output table
    
  2. Sie weisen die öffentlichen IP-Adressen Variablen zu, um das Herstellen einer Verbindung mit Ihren VMs für den weiteren Verlauf dieser Übung zu vereinfachen. Führen Sie den folgenden Befehl in Cloud Shell aus, um die öffentlichen IP-Adressen von AppServer und DataServer in Variablen zu speichern:

    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. Führen Sie den folgenden Befehl in Cloud Shell aus, um zu überprüfen, ob Sie eine Verbindung mit Ihrer AppServer-VM herstellen können:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Daraufhin erhalten Sie eine Connection timed out-Meldung.

  4. Führen Sie den folgenden Befehl in Cloud Shell aus, um zu überprüfen, ob Sie eine Verbindung mit Ihrer DataServer-VM herstellen können:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    

    Daraufhin erhalten Sie die gleiche Verbindungsfehlermeldung.

Denken Sie daran, dass die Standardregeln jeglichen eingehenden Datenverkehr an ein virtuelles Netzwerk verweigern, es sei den, der Datenverkehr stammt aus dem gleichen virtuellen Netzwerk. Die Regel Deny All Inbound (Sämtlichen eingehenden Datenverkehr verweigern) hat die eingehenden SSH-Verbindungen blockiert, die Sie eben versucht haben.

Eingehend

Name Priorität Quell-IP Ziel-IP Zugriff
Allow VNet Inbound (Eingehenden VNET-Datenverkehr zulassen) 65000 VIRTUAL_NETWORK VIRTUAL_NETWORK Zulassen
Deny All Inbound (Sämtlichen eingehenden Datenverkehr verweigern) 65500 * * Verweigern

Erstellen einer Sicherheitsregel für SSH

Wie Sie jetzt selbst erlebt haben, umfassen die Standardregeln Ihrer Netzwerksicherheitsgruppe ERP-SERVERS-NSG die Regel Deny All Inbound (Sämtlichen eingehenden Datenverkehr verweigern). Im Folgenden fügen Sie eine Regel hinzu, damit Sie SSH zum Herstellen einer Verbindung mit AppServer und DataServer verwenden können.

  1. Führen Sie den folgenden Befehl in Cloud Shell aus, um eine neue Sicherheitsregel für eingehenden Datenverkehr zum Aktivieren des SSH-Zugriffs zu erstellen:

    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. Führen Sie den folgenden Befehl in Cloud Shell aus, um zu überprüfen, ob Sie jetzt eine Verbindung mit Ihrer AppServer-VM herstellen können:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Es kann ein oder zwei Minuten dauern, dass die Netzwerksicherheitsgruppen-Regel wirksam wird. Wenn Sie eine Meldung zum Verbindungsausfall erhalten, warten Sie einen Moment, und versuchen Sie es erneut.

  3. Es sollte Ihnen nun möglich sein, eine Verbindung herzustellen. Geben Sie yes nach der Nachricht Are you sure you want to continue connecting (yes/no)? ein.

  4. Geben Sie das Kennwort ein, das Sie beim Erstellen der VM festgelegt haben.

  5. Geben Sie exit ein, um die AppServer-Sitzung zu beenden.

  6. Führen Sie den folgenden Befehl in Cloud Shell aus, um zu überprüfen, ob Sie jetzt eine Verbindung mit Ihrer DataServer-VM herstellen können:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    
  7. Es sollte Ihnen nun möglich sein, eine Verbindung herzustellen. Geben Sie yes nach der Nachricht Are you sure you want to continue connecting (yes/no)? ein.

  8. Geben Sie das Kennwort ein, das Sie beim Erstellen der VM festgelegt haben.

  9. Geben Sie exit ein, um die DataServer-Sitzung zu beenden.

Erstellen einer Sicherheitsregel zum Verhindern des Webzugriffs

Als Nächstes fügen Sie eine Regel hinzu, damit AppServer über HTTP mit DataServer kommunizieren kann, aber DataServer nicht über HTTP mit AppServer kommunizieren kann. Die internen IP-Adressen für diese Server lauten wie folgt:

Servername IP-Adresse
AppServer 10.0.0.4
DataServer 10.0.1.4
  1. Führen Sie den folgenden Befehl in Cloud Shell aus, um eine neue Sicherheitsregel für eingehenden Datenverkehr zum Verweigern des HTTP-Zugriffs über Port 80 zu erstellen:

    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"
    

Testen der HTTP-Konnektivität zwischen VMs

Im Folgenden überprüfen Sie, ob die neue Regel funktioniert. AppServer sollte dazu in der Lage sein, über HTTP mit DataServer zu kommunizieren. DataServer sollte nicht dazu in der Lage sein, über HTTP mit AppServer zu kommunizieren.

  1. Führen Sie den folgenden Befehl in Cloud Shell aus, um eine Verbindung mit Ihrer VM AppServer herzustellen. Überprüfen Sie, ob AppServer über HTTP mit DataServer kommunizieren kann.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Geben Sie das Kennwort ein, das Sie beim Erstellen der VM festgelegt haben.

  3. Die Antwort sollte eine 200 OK-Meldung enthalten.

  4. Führen Sie den folgenden Befehl in Cloud Shell aus, um eine Verbindung mit Ihrer VM DataServer herzustellen. Überprüfen Sie, ob DataServer über HTTP mit AppServer kommunizieren kann.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Geben Sie das Kennwort ein, das Sie beim Erstellen der VM festgelegt haben.

  6. Dieser Vorgang sollte nicht erfolgreich abgeschlossen werden, weil Sie den Zugriff über Port 80 blockiert haben. Nach einigen Minuten sollte Ihnen die Meldung Connection timed out angezeigt werden. Um den Befehl vor dem Timeout zu beenden, wählen Sie STRG+C aus.

Bereitstellen einer App-Sicherheitsgruppe

Als Nächstes erstellen Sie eine App-Sicherheitsgruppe für Datenbankserver, damit allen Servern in dieser Gruppe die gleichen Einstellungen zugewiesen werden können. Sie planen, weitere Datenbankserver bereitzustellen, und möchten verhindern, dass diese Server über HTTP auf App-Server zugreifen können. Indem Sie Quellen in der App-Sicherheitsgruppe zuweisen, umgehen Sie die manuelle Verwaltung einer Liste von IP-Adressen in der Netzwerksicherheitsgruppe. Stattdessen weisen Sie die Netzwerkschnittstellen der zu verwaltenden VMs der App-Sicherheitsgruppe zu.

Diagramm zum Übungsszenario für App-Sicherheitsgruppen

  1. Führen Sie den folgenden Befehl in Cloud Shell aus, um eine neue App-Sicherheitsgruppe namens ERP-DB-SERVERS-ASG zu erstellen:

    az network asg create \
        --resource-group $rg \
        --name ERP-DB-SERVERS-ASG
    
  2. Führen Sie den folgenden Befehl in Cloud Shell aus, um DataServer der App-Sicherheitsgruppe zuzuordnen:

    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. Führen Sie den folgenden Befehl in Cloud Shell aus, um die HTTP-Regel in der Netzwerksicherheitsgruppe ERP-SERVERS-NSG zu aktualisieren. Sie sollte auf die App-Sicherheitsgruppe ERP-DB-Servers verweisen.

    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"
    

Testen der aktualisierten HTTP-Sicherheitsregel

  1. Führen Sie den folgenden Befehl in Cloud Shell aus, um eine Verbindung mit Ihrer AppServer-VM herzustellen. Überprüfen Sie, ob AppServer über HTTP mit DataServer kommunizieren kann.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Geben Sie das Kennwort ein, das Sie beim Erstellen der VM festgelegt haben.

  3. Die Antwort sollte wie zuvor eine 200 OK-Meldung enthalten. Es kann ein oder zwei Minuten dauern, dass die Einstellungen der App-Sicherheitsgruppe wirksam werden. Wenn Sie zunächst keine 200 OK-Meldung erhalten, versuchen Sie es nach einer Minute erneut.

  4. Führen Sie den folgenden Befehl in Cloud Shell aus, um eine Verbindung mit Ihrer DataServer-VM herzustellen. Überprüfen Sie, ob DataServer über HTTP mit AppServer kommunizieren kann.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Geben Sie das Kennwort ein, das Sie beim Erstellen der VM festgelegt haben.

  6. Dieser Vorgang sollte wie zuvor nicht erfolgreich abgeschlossen werden, weil Sie den Zugriff über Port 80 blockiert haben. Nach einigen Minuten sollte Ihnen die Meldung Connection timed out angezeigt werden. Um den Befehl vor dem Timeout zu beenden, wählen Sie STRG+C aus.

Hiermit haben Sie auf die gleiche Weise bestätigt, dass Ihre Netzwerksicherheitsgruppen-Regel mit einer App-Sicherheitsgruppe funktioniert, auf der Sie zuvor eine Quell-IP-Adresse verwendet haben. Wenn wir weitere Datenserver hinzufügen würden, könnten wir mühelos sicherstellen, dass diese über die richtige Netzwerksicherheit verfügen, indem wir die neuen Server zur Netzwerksicherheitsgruppe ERP-DB-SERVERS-ASG hinzufügen.