Ćwiczenie — Tworzenie sieciowych grup zabezpieczeń i zarządzanie nimi

Ukończone

Jako architekt rozwiązań dla firmy produkcyjnej chcesz teraz rozpocząć przenoszenie serwerów aplikacji ERP i baz danych na platformę Azure. Pierwszym krokiem jest przetestowanie planu zabezpieczeń sieci przy użyciu dwóch serwerów.

W tej lekcji skonfigurujesz sieciową grupę zabezpieczeń i reguły zabezpieczeń w celu ograniczenia ruchu sieciowego do określonych serwerów. Chcesz, aby serwer aplikacji mógł nawiązać połączenie z serwerem baz danych za pośrednictwem protokołu HTTP. Nie chcesz, aby serwer baz danych mógł nawiązać połączenie z serwerem aplikacji przy użyciu protokołu HTTP.

Diagram przedstawiający ćwiczenie scenariusza sieciowych grup zabezpieczeń.

Tworzenie sieci wirtualnej i sieciowej grupy zabezpieczeń

Najpierw utworzysz sieć wirtualną i podsieci dla zasobów serwera. Następnie utworzysz sieciową grupę zabezpieczeń.

  1. W usłudze Azure Cloud Shell uruchom następujące polecenie, aby przypisać grupę zasobów piaskownicy do zmiennej rg:

    rg="<rgn>[sandbox resource group name]</rgn>"
    
  2. Aby utworzyć sieć wirtualną ERP-servers i podsieć Applications , uruchom następujące polecenie w usłudze 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. Aby utworzyć podsieć Databases , uruchom następujące polecenie w usłudze Cloud Shell:

    az network vnet subnet create \
        --resource-group $rg \
        --vnet-name ERP-servers \
        --address-prefixes 10.0.1.0/24 \
        --name Databases
    
  4. Aby utworzyć sieciową grupę zabezpieczeń ERP-SERVERS-NSG , uruchom następujące polecenie w usłudze Cloud Shell:

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

Tworzenie maszyn wirtualnych z systemem Ubuntu

Następnie utworzysz dwie maszyny wirtualne o nazwach AppServer i DataServer. Wdrożysz maszynę wirtualną AppServer w podsieci Applications i maszynę wirtualną DataServer w podsieci Databases. Dodaj interfejsy sieciowe maszyny wirtualnej do sieciowej grupy zabezpieczeń ERP-SERVERS-NSG. Następnie użyj tych maszyn wirtualnych do przetestowania sieciowej grupy zabezpieczeń.

  1. Aby skompilować maszynę wirtualną AppServer , uruchom następujące polecenie w usłudze Cloud Shell. W przypadku konta administratora zastąp ciąg <password> złożonym hasłem.

    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. Aby skompilować maszynę wirtualną DataServer , uruchom następujące polecenie w usłudze Cloud Shell. W przypadku konta administratora zastąp ciąg <password> złożonym hasłem.

    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. Może upłynąć kilka minut, zanim maszyny wirtualne będą w stanie uruchomienia. Aby potwierdzić, że maszyny wirtualne są uruchomione, uruchom następujące polecenie w usłudze Cloud Shell:

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

    Po zakończeniu tworzenia maszyny wirtualnej powinny zostać wyświetlone następujące dane wyjściowe:

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

Sprawdzanie domyślnej łączności

Teraz podejmiesz próbę otwarcia sesji protokołu Secure Shell (SSH) dla każdej maszyny wirtualnej. Pamiętaj, że jak na razie wdrożono sieciową grupę zabezpieczeń z regułami domyślnymi.

  1. Aby połączyć się z maszynami wirtualnymi, użyj protokołu SSH bezpośrednio z usługi Cloud Shell. Aby to zrobić, musisz uzyskać publiczne adresy IP przypisane do maszyn wirtualnych. Aby wyświetlić listę adresów IP, których użyjesz do nawiązania połączenia z maszynami wirtualnymi, uruchom następujące polecenie w usłudze Cloud Shell:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \
        --output table
    
  2. Aby ułatwić nawiązywanie połączenia z maszynami wirtualnymi w dalszej części tego ćwiczenia, przypisz publiczne adresy IP do zmiennych. Aby zapisać publiczny adres IP maszyny wirtualnej AppServer i maszyny wirtualnej DataServer w zmiennej, uruchom następujące polecenie w usłudze 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. Aby sprawdzić, czy możesz nawiązać połączenie z maszyną wirtualną AppServer , uruchom następujące polecenie w usłudze Cloud Shell:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Zostanie wyświetlony komunikat Connection timed out.

  4. Aby sprawdzić, czy możesz nawiązać połączenie z maszyną wirtualną DataServer , uruchom następujące polecenie w usłudze Cloud Shell:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    

    Otrzymasz ten sam komunikat o błędzie połączenia.

Należy pamiętać, że domyślne reguły odrzucają cały ruch przychodzący do sieci wirtualnej, chyba że ten ruch pochodzi z tej samej sieci wirtualnej. Reguła Odrzuć cały przychodzący zablokowała przychodzące połączenia SSH, które właśnie próbowano nawiązać.

Przychodzące

Nazwisko Priorytet Źródłowy adres IP Docelowy adres IP Access
Zezwalaj na ruch przychodzący dla sieci wirtualnej 65000 VIRTUAL_NETWORK VIRTUAL_NETWORK Zezwalaj
Odrzuć cały przychodzący 65500 * * Zablokuj

Tworzenie reguły zabezpieczeń dla protokołu SSH

Jak już teraz wiadomo, domyślne reguły w sieciowej grupie zabezpieczeń ERP-SERVERS-NSG obejmują regułę Odrzuć cały przychodzący. Teraz dodasz regułę, aby móc używać protokołu SSH do nawiązania połączenia z maszyną wirtualną AppServer i maszyną wirtualną DataServer.

  1. Aby utworzyć nową regułę zabezpieczeń dla ruchu przychodzącego w celu włączenia dostępu za pomocą protokołu SSH, uruchom następujące polecenie w usłudze 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. Aby sprawdzić, czy możesz teraz nawiązać połączenie z maszyną wirtualną AppServer , uruchom następujące polecenie w usłudze Cloud Shell:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Może upłynąć minuta lub dwie, zanim reguła sieciowej grupy zabezpieczeń zacznie obowiązywać. Jeśli zostanie wyświetlony komunikat o niepowodzeniu połączenia, zaczekaj chwilę i spróbuj ponownie.

  3. Teraz nawiązanie połączenia powinno być możliwe. Po wyświetleniu komunikatu Are you sure you want to continue connecting (yes/no)? wprowadź yes.

  4. Wprowadź hasło zdefiniowane podczas tworzenia maszyny wirtualnej.

  5. Aby zamknąć sesję serwera AppServer, wprowadź .exit

  6. Aby sprawdzić, czy możesz teraz nawiązać połączenie z maszyną wirtualną DataServer , uruchom następujące polecenie w usłudze Cloud Shell:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    
  7. Teraz nawiązanie połączenia powinno być możliwe. Po wyświetleniu komunikatu Are you sure you want to continue connecting (yes/no)? wprowadź yes.

  8. Wprowadź hasło zdefiniowane podczas tworzenia maszyny wirtualnej.

  9. Aby zamknąć sesję maszyny wirtualnej DataServer, wprowadź exit.

Tworzenie reguły zabezpieczeń, aby uniemożliwić dostęp do Internetu

Teraz dodaj regułę, aby maszyna wirtualna AppServer mogła komunikować się z maszyną wirtualną DataServer za pośrednictwem protokołu HTTP, ale maszyna wirtualna DataServer nie mogła komunikować się z maszyną wirtualną AppServer za pośrednictwem protokołu HTTP. To są wewnętrzne adresy IP dla tych serwerów:

Nazwa serwera Adres IP
AppServer 10.0.0.4
DataServer 10.0.1.4
  1. Aby utworzyć nową regułę zabezpieczeń dla ruchu przychodzącego w celu odmowy dostępu HTTP przez port 80, uruchom następujące polecenie w usłudze 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"
    

Testowanie łączności HTTP między maszynami wirtualnymi

W tym miejscu sprawdzisz, czy nowa reguła działa. Maszyna wirtualna AppServer powinna móc komunikować się z maszyną wirtualną DataServer za pośrednictwem protokołu HTTP. Maszyna wirtualna DataServer nie powinna mieć możliwości komunikowania się z maszyną wirtualną AppServer za pośrednictwem protokołu HTTP.

  1. Aby nawiązać połączenie z maszyną wirtualną AppServer , uruchom następujące polecenie w usłudze Cloud Shell. Sprawdź, czy maszyna wirtualna AppServer może komunikować się z maszyną wirtualną DataServer za pośrednictwem protokołu HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Wprowadź hasło zdefiniowane podczas tworzenia maszyny wirtualnej.

  3. Odpowiedź powinna zawierać komunikat 200 OK.

  4. Aby nawiązać połączenie z maszyną wirtualną DataServer , uruchom następujące polecenie w usłudze Cloud Shell. Sprawdź, czy maszyna wirtualna DataServer może komunikować się z maszyną wirtualną AppServer za pośrednictwem protokołu HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Wprowadź hasło zdefiniowane podczas tworzenia maszyny wirtualnej.

  6. Komunikacja nie powinna się powieść, ponieważ zablokowano dostęp przez port 80. Po kilku minutach powinien pojawić się komunikat Connection timed out. Aby zatrzymać polecenie przed przekroczeniem limitu czasu, wybierz Ctrl+C.

Wdrażanie grupy zabezpieczeń aplikacji

Następnie utwórz grupę zabezpieczeń aplikacji dla serwerów baz danych, aby wszystkie serwery w tej grupie mogły mieć przypisane te same ustawienia. Planujesz wdrożyć więcej serwerów baz danych i chcesz uniemożliwić tym serwerom dostęp za pośrednictwem protokołu HTTP do serwerów aplikacji. Dzięki przypisywaniu źródeł w grupie zabezpieczeń aplikacji nie musisz ręcznie obsługiwać listy adresów IP w sieciowej grupie zabezpieczeń. Zamiast tego przypisujesz interfejsy sieciowe maszyn wirtualnych, którymi chcesz zarządzać, do grupy zabezpieczeń aplikacji.

Diagram przedstawiający ćwiczenia dotyczące grup zabezpieczeń aplikacji.

  1. Aby utworzyć nową grupę zabezpieczeń aplikacji o nazwie ERP-DB-SERVERS-ASG, uruchom następujące polecenie w usłudze Cloud Shell:

    az network asg create \
        --resource-group $rg \
        --name ERP-DB-SERVERS-ASG
    
  2. Aby skojarzyć maszynę wirtualną DataServer z grupą zabezpieczeń aplikacji, uruchom następujące polecenie w usłudze 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. Aby zaktualizować regułę HTTP w sieciowej grupie zabezpieczeń ERP-SERVERS-NSG , uruchom następujące polecenie w usłudze Cloud Shell. Powinna ona odwoływać się do grupy zabezpieczeń aplikacji 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"
    

Testowanie zaktualizowanej reguły zabezpieczeń protokołu HTTP

  1. Aby nawiązać połączenie z maszyną wirtualną AppServer , uruchom następujące polecenie w usłudze Cloud Shell. Sprawdź, czy maszyna wirtualna AppServer może komunikować się z maszyną wirtualną DataServer za pośrednictwem protokołu HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Wprowadź hasło zdefiniowane podczas tworzenia maszyny wirtualnej.

  3. Tak jak poprzednio odpowiedź powinna zawierać komunikat 200 OK. Może upłynąć minuta lub dwie, zanim ustawienia grupy zabezpieczeń zaczną obowiązywać. Jeśli nie początkowo nie odebrano komunikatu 200 OK, poczekaj chwilę i spróbuj ponownie.

  4. Aby nawiązać połączenie z maszyną wirtualną DataServer, uruchom następujące polecenie w usłudze Cloud Shell. Sprawdź, czy maszyna wirtualna DataServer może komunikować się z maszyną wirtualną AppServer za pośrednictwem protokołu HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Wprowadź hasło zdefiniowane podczas tworzenia maszyny wirtualnej.

  6. Tak jak wcześniej komunikacja nie powinna się powieść, ponieważ zablokowano dostęp przez port 80. Po kilku minutach powinien pojawić się komunikat Connection timed out. Aby zatrzymać polecenie przed przekroczeniem limitu czasu, wybierz Ctrl+C.

Teraz potwierdzono, że reguła sieciowej grupy zabezpieczeń działa przy użyciu grupy zabezpieczeń aplikacji w taki sam sposób, jak w przypadku użycia źródłowego adresu IP. Jeśli dodaliśmy dodatkowe serwery danych, możemy łatwo zapewnić im odpowiednie zabezpieczenia sieciowe, dodając nowe serwery do grupy ERP-DB-SERVERS-ASG.