Automatizzare il controllo del gruppo di sicurezza di rete con la visualizzazione del gruppo di sicurezza di rete di Network Watcher di AzureAutomate NSG auditing with Azure Network Watcher Security group view

I clienti devono spesso far fronte alla sfida posta dalla verifica del comportamento di sicurezza della propria infrastruttura.Customers are often faced with the challenge of verifying the security posture of their infrastructure. Lo stesso problema si pone per le macchine virtuali in Azure.This challenge is no different for their VMs in Azure. È importante disporre di un profilo di sicurezza simile in base alle regole del gruppo di sicurezza di rete (NSG) applicate.It is important to have a similar security profile based on the Network Security Group (NSG) rules applied. Usando la visualizzazione del gruppo di sicurezza, è possibile ottenere l'elenco delle regole applicate a una macchina virtuale all'interno di un gruppo di sicurezza di rete.Using the Security Group View, you can now get the list of rules applied to a VM within an NSG. È possibile definire un profilo di sicurezza NSG elevato e avviare la visualizzazione del gruppo di sicurezza con frequenza settimanale, quindi confrontare l'output con il profilo elevato e creare un report.You can define a golden NSG security profile and initiate Security Group View on a weekly cadence and compare the output to the golden profile and create a report. In questo modo è possibile identificare con facilità tutte le macchine virtuali che non sono conformi al profilo di protezione previsto.This way you can identify with ease all the VMs that do not conform to the prescribed security profile.

Se non si ha familiarità con i gruppi di sicurezza di rete, visitare Controllare il flusso del traffico di rete con i gruppi di sicurezza di reteIf you are unfamiliar with Network Security Groups, visit Network Security Overview

Prima di iniziareBefore you begin

In questo scenario, si confronta una buona baseline nota con i risultati della visualizzazione del gruppo di sicurezza restituiti per una macchina virtuale.In this scenario, you compare a known good baseline to the security group view results returned for a virtual machine.

Questo scenario presuppone il completamento dei passaggi descritti in Creare un servizio Network Watcher per creare un servizio Network Watcher.This scenario assumes you have already followed the steps in Create a Network Watcher to create a Network Watcher. Lo scenario presuppone inoltre che esista e possa essere usato un gruppo di risorse con una macchina virtuale valida.The scenario also assumes that a Resource Group with a valid virtual machine exists to be used.

ScenarioScenario

Lo scenario illustrato in questo articolo ottiene la visualizzazione del gruppo di sicurezza per una macchina virtuale.The scenario covered in this article gets the security group view for a virtual machine.

In questo scenario si apprenderà come:In this scenario, you will:

  • Recuperare un set di buone regole notoRetrieve a known good rule set
  • Recuperare una macchina virtuale con l'API RESTRetrieve a virtual machine with Rest API
  • Ottenere la visualizzazione del gruppo di sicurezza per la macchina virtualeGet security group view for virtual machine
  • Valutare la rispostaEvaluate Response

Recuperare il set di regoleRetrieve rule set

Il primo passaggio in questo esempio consiste nell'uso di una baseline esistente.The first step in this example is to work with an existing baseline. L'esempio seguente consiste nell'estrazione di alcuni json da un gruppo di sicurezza di rete esistente usando il cmdlet Get-AzureRmNetworkSecurityGroup come baseline per l'esempio.The following example is some json extracted from an existing Network Security Group using the Get-AzureRmNetworkSecurityGroup cmdlet that is used as the baseline for this example.

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

Convertire il set di regole in oggetti di PowerShellConvert rule set to PowerShell objects

In questo passaggio il file json creato in precedenza viene letto con le regole previste nel gruppo di sicurezza di rete per questo esempio.In this step, we are reading a json file that was created earlier with the rules that are expected to be on the Network Security Group for this example.

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

Recuperare Network WatcherRetrieve Network Watcher

Il passaggio successivo consente di recuperare l'istanza di Network Watcher.The next step is to retrieve the Network Watcher instance. La variabile $networkWatcher viene passata al cmdlet AzureRmNetworkWatcherSecurityGroupView.The $networkWatcher variable is passed to the AzureRmNetworkWatcherSecurityGroupView cmdlet.

$nw = Get-AzurermResource | Where {$_.ResourceType -eq "Microsoft.Network/networkWatchers" -and $_.Location -eq "WestCentralUS" } 
$networkWatcher = Get-AzureRmNetworkWatcher -Name $nw.Name -ResourceGroupName $nw.ResourceGroupName 

Ottenere una macchina virtualeGet a VM

È necessario che una macchina virtuale esegua il cmdlet Get-AzureRmNetworkWatcherSecurityGroupView.A virtual machine is required to run the Get-AzureRmNetworkWatcherSecurityGroupView cmdlet against. Nell'esempio seguente viene ottenuto un oggetto macchina virtuale.The following example gets a VM object.

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

Recuperare la visualizzazione del gruppo di sicurezzaRetrieve security group view

Il passaggio successivo prevede il recupero del risultato della visualizzazione del gruppo di sicurezza.The next step is to retrieve the security group view result. Questo risultato viene confrontato con il file json "baseline" illustrato in precedenza.This result is compared to the "baseline" json that was shown earlier.

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

Analisi dei risultatiAnalyzing the results

La risposta è raggruppata per interfacce di rete.The response is grouped by Network interfaces. I diversi tipi di regole restituite sono regole di sicurezza efficaci e predefinite.The different types of rules returned are effective and default security rules. Il risultato viene ulteriormente scomposto in base alla modalità di applicazione, su una subnet o scheda di rete virtuale.The result is further broken down by how it is applied, either on a subnet or a virtual NIC.

Lo script PowerShell seguente confronta i risultati della visualizzazione del gruppo di sicurezza con un output esistente di un gruppo di sicurezza di rete.The following PowerShell script compares the results of the Security Group View to an existing output of an NSG. L'esempio seguente mostra come confrontare i risultati con il cmdlet Compare-Object.The following example is a simple example of how the results can be compared with Compare-Object cmdlet.

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

L'esempio seguente corrisponde al risultato.The following example is the result. È possibile visualizzare due delle regole derivanti dal primo set di regole che non erano presenti nel confronto.You can see two of the rules that were in the first rule set were not present in the comparison.

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

Passaggi successiviNext steps

Se sono state modificate le impostazioni, vedere Gestire gruppi di sicurezza di rete per tenere traccia del gruppo di sicurezza di rete e delle regole di sicurezza in questione.If settings have been changed, see Manage Network Security Groups to track down the network security group and security rules that are in question.