Automatyzowanie inspekcji sieciowej grupy zabezpieczeń za pomocą widoku grupy zabezpieczeń usługi Azure Network Watcher

Uwaga

Interfejs API widoku grupy zabezpieczeń nie jest już obsługiwany i wkrótce zostanie wycofany. Użyj funkcji Obowiązujące reguły zabezpieczeń, która zapewnia te same funkcje.

Klienci często borykają się z wyzwaniem weryfikacji stanu zabezpieczeń swojej infrastruktury. To wyzwanie nie różni się od maszyn wirtualnych na platformie Azure. Ważne jest, aby mieć podobny profil zabezpieczeń oparty na zastosowanych regułach sieciowej grupy zabezpieczeń. Za pomocą widoku grupy zabezpieczeń możesz teraz uzyskać listę reguł zastosowanych do maszyny wirtualnej w sieciowej grupie zabezpieczeń. Możesz zdefiniować złoty profil zabezpieczeń sieciowej grupy zabezpieczeń i zainicjować widok grupy zabezpieczeń w cotygodniowym czasie i porównać dane wyjściowe ze złotym profilem i utworzyć raport. Dzięki temu można łatwo identyfikować wszystkie maszyny wirtualne, które nie są zgodne z określonym profilem zabezpieczeń.

Aby dowiedzieć się więcej na temat sieciowych grup zabezpieczeń, zobacz Network security groups overview (Omówienie sieciowych grup zabezpieczeń).

Wymagania wstępne

Scenariusz

W tym scenariuszu porównasz znany dobry punkt odniesienia z wynikami widoku grupy zabezpieczeń zwróconym dla maszyny wirtualnej.

W tym scenariuszu wykonasz następujące elementy:

  • Pobieranie znanego dobrego zestawu reguł
  • Pobieranie maszyny wirtualnej przy użyciu interfejsu API REST
  • Uzyskiwanie widoku grupy zabezpieczeń dla maszyny wirtualnej
  • Ocena odpowiedzi

Pobieranie zestawu reguł

Pierwszym krokiem w tym przykładzie jest praca z istniejącym punktem odniesienia. W poniższym przykładzie przedstawiono kod json wyodrębniony z istniejącej sieciowej grupy zabezpieczeń przy użyciu Get-AzNetworkSecurityGroup polecenia cmdlet, które jest używane jako punkt odniesienia dla tego przykładu.

[
    {
        "Description":  null,
        "Protocol":  "TCP",
        "SourcePortRange":  "*",
        "DestinationPortRange":  "3389",
        "SourceAddressPrefix":  "*",
        "DestinationAddressPrefix":  "*",
        "Access":  "Allow",
        "Priority":  1000,
        "Direction":  "Inbound",
        "ProvisioningState":  "Succeeded",
        "Name":  "default-allow-rdp",
        "Etag":  "W/\"d8859256-1c4c-4b93-ba7d-73d9bf67c4f1\"",
        "Id":  "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Network/networkSecurityGroups/testvm1-nsg/securityRules/default-allow-rdp"
    },
    {
        "Description":  null,
        "Protocol":  "*",
        "SourcePortRange":  "*",
        "DestinationPortRange":  "111",
        "SourceAddressPrefix":  "*",
        "DestinationAddressPrefix":  "*",
        "Access":  "Allow",
        "Priority":  1010,
        "Direction":  "Inbound",
        "ProvisioningState":  "Succeeded",
        "Name":  "MyRuleDoNotDelete",
        "Etag":  "W/\"d8859256-1c4c-4b93-ba7d-73d9bf67c4f1\"",
        "Id":  "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Network/networkSecurityGroups/testvm1-nsg/securityRules/MyRuleDoNotDelete"
    },
    {
        "Description":  null,
        "Protocol":  "*",
        "SourcePortRange":  "*",
        "DestinationPortRange":  "112",
        "SourceAddressPrefix":  "*",
        "DestinationAddressPrefix":  "*",
        "Access":  "Allow",
        "Priority":  1020,
        "Direction":  "Inbound",
        "ProvisioningState":  "Succeeded",
        "Name":  "My2ndRuleDoNotDelete",
        "Etag":  "W/\"d8859256-1c4c-4b93-ba7d-73d9bf67c4f1\"",
        "Id":  "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Network/networkSecurityGroups/testvm1-nsg/securityRules/My2ndRuleDoNotDelete"
    },
    {
        "Description":  null,
        "Protocol":  "TCP",
        "SourcePortRange":  "*",
        "DestinationPortRange":  "5672",
        "SourceAddressPrefix":  "*",
        "DestinationAddressPrefix":  "*",
        "Access":  "Deny",
        "Priority":  1030,
        "Direction":  "Inbound",
        "ProvisioningState":  "Succeeded",
        "Name":  "ThisRuleNeedsToStay",
        "Etag":  "W/\"d8859256-1c4c-4b93-ba7d-73d9bf67c4f1\"",
        "Id":  "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Network/networkSecurityGroups/testvm1-nsg/securityRules/ThisRuleNeedsToStay"
    }
]

Konwertowanie zestawu reguł na obiekty programu PowerShell

W tym kroku odczytujemy plik json, który został utworzony wcześniej z regułami, które powinny znajdować się w sieciowej grupie zabezpieczeń w tym przykładzie.

$nsgbaserules = Get-Content -Path C:\temp\testvm1-nsg.json | ConvertFrom-Json

Pobieranie usługi Network Watcher

Następnym krokiem jest pobranie wystąpienia usługi Network Watcher. Zmienna $networkWatcher jest przekazywana do AzNetworkWatcherSecurityGroupView polecenia cmdlet .

$networkWatcher = Get-AzResource | Where {$_.ResourceType -eq "Microsoft.Network/networkWatchers" -and $_.Location -eq "WestCentralUS" } 

Pobieranie konfiguracji maszyny wirtualnej

Maszyna wirtualna jest wymagana do uruchomienia Get-AzNetworkWatcherSecurityGroupView polecenia cmdlet. Poniższy przykład pobiera obiekt maszyny wirtualnej.

$VM = Get-AzVM -ResourceGroupName "testrg" -Name "testvm1"

Pobieranie widoku grupy zabezpieczeń

Następnym krokiem jest pobranie wyniku widoku grupy zabezpieczeń. Ten wynik jest porównywany z plikiem json "odniesienia", który został pokazany wcześniej.

$secgroup = Get-AzNetworkWatcherSecurityGroupView -NetworkWatcher $networkWatcher -TargetVirtualMachineId $VM.Id

Analiza wyników

Odpowiedź jest grupowana według interfejsów sieciowych. Różne typy zwracanych reguł to obowiązujące i domyślne reguły zabezpieczeń. Wynik jest dodatkowo podzielony na sposób ich stosowania w podsieci lub wirtualnej karcie sieciowej.

Poniższy skrypt programu PowerShell porównuje wyniki widoku grupy zabezpieczeń z istniejącymi danymi wyjściowymi sieciowej grupy zabezpieczeń. Poniższy przykład to prosty przykład porównywania wyników z poleceniem Compare-Object cmdlet.

Compare-Object -ReferenceObject $nsgbaserules `
-DifferenceObject $secgroup.NetworkInterfaces[0].NetworkInterfaceSecurityRules `
-Property Name,Description,Protocol,SourcePortRange,DestinationPortRange,SourceAddressPrefix,DestinationAddressPrefix,Access,Priority,Direction

Poniższy przykład jest wynikiem. W porównaniu widać dwie reguły, które znajdowały się w pierwszym zestawie reguł.

Name                     : My2ndRuleDoNotDelete
Description              : 
Protocol                 : *
SourcePortRange          : *
DestinationPortRange     : 112
SourceAddressPrefix      : *
DestinationAddressPrefix : *
Access                   : Allow
Priority                 : 1020
Direction                : Inbound
SideIndicator            : <=

Name                     : ThisRuleNeedsToStay
Description              : 
Protocol                 : TCP
SourcePortRange          : *
DestinationPortRange     : 5672
SourceAddressPrefix      : *
DestinationAddressPrefix : *
Access                   : Deny
Priority                 : 1030
Direction                : Inbound
SideIndicator            : <=

Następne kroki

Zobacz Tworzenie, zmienianie lub usuwanie sieciowej grupy zabezpieczeń, aby śledzić sieciową grupę zabezpieczeń i reguły zabezpieczeń, które są kwestionowane.