Delen via


NSG-controle automatiseren met azure Network Watcher-beveiligingsgroepweergave

Notitie

De WEERGAVE-API voor beveiligingsgroepen wordt niet meer onderhouden en wordt binnenkort afgeschaft. Gebruik de functie Effectieve beveiligingsregels die dezelfde functionaliteit biedt.

Klanten worden vaak geconfronteerd met de uitdaging om de beveiligingsstatus van hun infrastructuur te controleren. Deze uitdaging is niet anders voor hun VM's in Azure. Het is belangrijk om een vergelijkbaar beveiligingsprofiel toe te passen op basis van de NSG-regels (Network Security Group). Met behulp van de weergave Beveiligingsgroep kunt u nu de lijst met regels ophalen die zijn toegepast op een VIRTUELE machine binnen een NSG. U kunt een gouden NSG-beveiligingsprofiel definiëren en de beveiligingsgroepweergave initiëren op een wekelijkse frequentie en de uitvoer vergelijken met het gouden profiel en een rapport maken. Op deze manier kunt u eenvoudig alle VM's identificeren die niet voldoen aan het voorgeschreven beveiligingsprofiel.

Zie Overzicht van netwerkbeveiligingsgroepen voor meer informatie over netwerkbeveiligingsgroepen.

Vereisten

  • Als u geen Azure-account met een actief abonnement hebt, maakt u er gratis een.
  • Een virtuele machine (VM).

Scenario

In dit scenario vergelijkt u een bekende goede basislijn met de resultaten van de weergaveresultaten van de beveiligingsgroep die zijn geretourneerd voor een virtuele machine.

In dit scenario gaat u het volgende doen:

  • Een bekende goede regelset ophalen
  • Een virtuele machine ophalen met REST API
  • Weergave van beveiligingsgroepen voor virtuele machine ophalen
  • Antwoord evalueren

Regelset ophalen

De eerste stap in dit voorbeeld is het werken met een bestaande basislijn. Het volgende voorbeeld is een json die is geëxtraheerd uit een bestaande netwerkbeveiligingsgroep met behulp van de Get-AzNetworkSecurityGroup cmdlet die wordt gebruikt als basislijn voor dit voorbeeld.

[
    {
        "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"
    }
]

Regelset converteren naar PowerShell-objecten

In deze stap lezen we een json-bestand dat eerder is gemaakt met de regels die naar verwachting aanwezig zijn in de netwerkbeveiligingsgroep voor dit voorbeeld.

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

Network Watcher ophalen

De volgende stap is het ophalen van het Network Watcher-exemplaar. De $networkWatcher variabele wordt doorgegeven aan de AzNetworkWatcherSecurityGroupView cmdlet.

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

Configuratie van virtuele machines ophalen

Er is een virtuele machine vereist om de Get-AzNetworkWatcherSecurityGroupView cmdlet uit te voeren op. In het volgende voorbeeld wordt een VM-object opgehaald.

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

Weergave beveiligingsgroep ophalen

De volgende stap is het ophalen van het resultaat van de weergave van de beveiligingsgroep. Dit resultaat wordt vergeleken met de json basislijn die eerder is weergegeven.

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

De resultaten analyseren

Het antwoord wordt gegroepeerd op netwerkinterfaces. De verschillende typen regels die worden geretourneerd, zijn effectieve en standaardbeveiligingsregels. Het resultaat wordt verder uitgesplitst op de wijze waarop het wordt toegepast, hetzij op een subnet of een virtuele NIC.

Met het volgende PowerShell-script worden de resultaten van de weergave Beveiligingsgroep vergeleken met een bestaande uitvoer van een NSG. Het volgende voorbeeld is een eenvoudig voorbeeld van hoe de resultaten kunnen worden vergeleken met Compare-Object cmdlets.

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

Het volgende voorbeeld is het resultaat. U ziet twee van de regels in de eerste regelset die niet aanwezig waren in de vergelijking.

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            : <=

Volgende stappen

Zie Een netwerkbeveiligingsgroep maken, wijzigen of verwijderen om de betreffende netwerkbeveiligingsgroep en beveiligingsregels op te sporen.