Konfiguracja Network Security Group w Azure – Powershell

2 Lis

W poprzednim wpisie pokazałem jak tworzyć w Azure maszynę wirtualną z gotowego dysku VHD z wykorzystaniem Powershell. Umyślnie pominąłem temat tworzenia NSG dla maszyny, ponieważ każdy może mieć inne wymagania co do endpointów które chce otworzyć na zewnątrz. Chciałbym w tym wpisie pokazać jakie są możliwości w tej kwestii a konfigurację pod konkretne wymagania zostawić Wam. Poza tym temat jest na tyle obszerny że poświęcenie mu odrębnego wpisu jest wskazane 🙂

Na początek krótkie wprowadzenie dla nie wtajemniczonych – czym w ogóle jest NSG (Network Security Group)? W poprzedniej wersji  Azure’a gdzie wykorzystywało się Cloud Service’y tworzyło się ACL (Access Control List) by kontrolować jakie endpoint’y są otwarte w maszynach wirtualnych a jakie są zablokowane np. dla grup adresów IP lub pojedynczych adresów. W nowym modelu gdzie wykorzystujemy grupy zasobów używamy do tego samego celu NSG, które są odrębnymi elementami grupy zasobów maszyny wirtualnej.

NSG dla interfejsu sieciowego lub subnet’u

Konfiguracja zasad ruchu sieciowego do i z endpointów może być zastosowana do całego subnet’u lub do pojedynczych interfejsów sieciowych. Wynikają z tego następujące konsekwencje:

  1. Wszystkie maszyny w subnecie z podpiętą NSG będą stosować te same reguły ruchu sieciowego. Dodatkowo każda maszyna może mieć własną NSG podpiętą do swojego interfejsu sieciowego
  2. Możemy skonfigurować kilka NSG i stosować je dla różnych interfejsów sieciowych. W ten sposób mimo że wszystkie maszyny wirtualne mogą znajdować się w jednej podsieci to można je dzielić na grupy wg. skonfigurowanych reguł sieciowych w NSG (o ile dany NIC jest jedynym podłączonym dla maszyny wirtualnej – pamiętajmy że jedna maszyna wirtualna może mieć kilka interfejsów sieciowych). Przykład: VM1, VM2, VM3 mają do swoich NIC podłączoną grupę NSG1, VM4, VM5 mają grupę NSG2, itd.

Tworząc maszynę wirtualną z dostępnych obrazów w Azure zazwyczaj NSG jest tworzona automatycznie z pre konfigurowanymi regułami takimi jak poniżej:

Reguły ruchu przychodzącego

Name Priority Source IP Source Port Destination IP Destination Port Protocol Access
ALLOW VNET INBOUND 65000 VIRTUAL_NETWORK * VIRTUAL_NETWORK * * ALLOW
ALLOW AZURE LOAD BALANCER INBOUND 65001 AZURE_LOADBALANCER * * * * ALLOW
DENY ALL INBOUND 65500 * * * * * DENY

 

Reguły ruchu wychodzącego

Name Priority Source IP Source Port Destination IP Destination Port Protocol Access
ALLOW VNET OUTBOUND 65000 VIRTUAL_NETWORK * VIRTUAL_NETWORK * * ALLOW
ALLOW INTERNET OUTBOUND 65001 * * INTERNET * * ALLOW
DENY ALL OUTBOUND 65500 * * * * * DENY
Źródło: https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-nsg/

Dodatkowo dla ruchu przychodzącego do maszyn Windows odblokowany jest port 3389 dla połączeń pulpitu zdalnego i port 22 dla SSH w maszynach z Linuxem.

UWAGA: nie zalecam kombinowania i zmieniania domyślnych reguł NSG ponieważ łatwo można coś zepsuć i stracić komunikację z maszyną wirtualną. Jakby tak się zdarzyło to najlepszym sposobem powrotu do ustawień domyślnych jest utworzenie nowej NSG.

Tworzenie NSG i reguł sieciowych

Utworzenie nowej NSG sprowadza się do wykonania komendy New-AzureRmNetworkSecurityGroup, następnie musimy ją podłączyć do NIC lub podsieci. Ale kluczem NSG są jej reguły, które tworzymy komendą New-AzureRmNetworkSecurityRuleConfig. I to właśnie od utworzenia reguł należy zacząć:

Powyższa komenda otwiera endpoint na porcie 22 używany do łączenia się SSH (zastosuję tę regułę dla maszyny Linux). Ponieważ będę się do maszyny łączył z różnych urządzeń to nie podaję konkretnych adresów IP z których będę nawiązywał połączenie. Dodatkowo otworzę endpoint na port 80, ponieważ na maszynie będę konfigurował serwer WWW

Tak samo jak w przypadku portu 22 nie zawężam listy adresów które będą mogły dostać się do maszyny na port 80 – chcę żeby każdy z Internetu mógł wchodzić na strony WWW hostowane na tym serwerze.

UWAGA: domyślne endpointy (patrz tabela wyżej) zostaną automatycznie dodane do nowo tworzonej NSG.

Teraz w końcu mogę stworzyć NSG:

Mamy NSG i reguły, które ją definiują, zobaczmy jak podpiąć NSG do interfejsu sieciowego a jak do całej podsieci.

Podłączanie NSG do NIC

Podłączanie NSG do nowo tworzonego NIC

Podajemy NSG jako jeden z parametrów komendy New-AzureRmNetworkInterface

Podłączanie NSG do istniejącego NIC

Analogicznie można odłączyć NSG od NIC podając $null zamiast $nsg w atrybucie NetworkSecurityGroup NIC:

Podłączanie NSG do całej podsieci

Podłączanie NSG do nowo tworzonej podsieci

Podobnie jak w przypadku interfejsu sieciowego podajemy NSG jako parametr komendy New-AzureRmVirtualNetworkSubnetConfig np.:

Podłączanie NSG do istniejącej podsieci

Analogicznie można odłączyć NSG od podsieci podając $null zamiast $nsg w atrybucie NetworkSecurityGroup subnet’u:

Dodawanie nowych reguł sieciowych

Chcąc dodać nową regułę do NSG używamy komendy Add-AzureRmNetworkSecurityRuleConfig, poniżej przykład:

Następnie należy zapisać zmiany tak jak poniżej

 

To wszystkie najpotrzebniejsze komendy jakie będą Wam potrzebne na początek, po bardziej szczegółowy opis zapraszam do oficjalnej dokumentacji Azure’a.

Dodaj komentarz