Creare gruppi di sicurezza di rete mediante PowerShell

È possibile usare un gruppo di sicurezza di rete per controllare il traffico verso una o più istanze di macchina virtuale, le istanze del ruolo, le schede di rete (NIC) o i subnet in una rete virtuale. Un NSG contiene le regole di controllo di accesso che consentono o negano il traffico in base alla direzione del traffico, al protocollo, all’indirizzo e alla porta di origine e all’indirizzo e alla porta di destinazione. Le regole di un gruppo di sicurezza di rete possono essere modificate in qualsiasi momento e le modifiche vengono applicate a tutte le istanze associate.

Per ulteriori informazioni su NSGs, visitare Informazioni su NSG.

Azure offre due modelli di distribuzione, ovvero Azure Resource Manager e la distribuzione classica. Microsoft consiglia di creare le risorse tramite il modello di distribuzione Resource Manager. Per altre informazioni sulle differenze tra i due modelli, leggere l'articolo Understand Azure deployment models (Informazioni sui modelli di distribuzione di Azure). Questo articolo illustra il modello di distribuzione Gestione risorse. È anche possibile creare gruppi di sicurezza di rete con il modello di distribuzione classica.

Scenario

Per illustrare meglio come creare un NSG, in questo documento verrà utilizzato lo scenario seguente.

Scenario di una rete virtuale

In questo scenario si creerà un NSG per ogni subnet nella rete virtuale TestVNet , come illustrato di seguito:

  • NSG-FrontEnd. Il front-end NSG verrà applicato per il subnet front-end , e contiene due regole:
    • regola-rdp. Questa regola consente il traffico RDP verso il subnet front-end .
    • regola-web. Questa regola consente il traffico HTTP verso il subnet front-end .
  • Back-end di NSG. Il back-end NSG verrà applicato per il subnet back-end , e contiene due regole:
    • regola sql. Questa regola consente il traffico SQL solo dal subnet front-end .
    • regola-web. Questa regola nega tutto il traffico associato ad internet proveniente dal subnet back-end .

La combinazione di queste regole crea uno scenario simile alla rete perimetrale, dove la subnet di back-end può solo ricevere traffico in ingresso per SQL dalla subnet front-end e non dispone dell'accesso a Internet, mentre la subnet front-end può comunicare con Internet e ricevere solo le richieste HTTP in ingresso.

I comandi di esempio PowerShell riportati di seguito prevedono un ambiente semplice già creato in base allo scenario precedente. Se si desidera eseguire i comandi così come sono visualizzati in questo documento, creare innanzitutto l'ambiente di test distribuendo questo modello, fare clic su Distribuisci in Azure, sostituire i valori di parametro predefiniti, se necessario e seguire le istruzioni nel portale.

Come creare il gruppo di sicurezza di rete per la subnet front-end

Per creare un gruppo di sicurezza di rete denominato NSG-FrontEnd in base allo scenario, seguire la procedura riportata di seguito:

  1. Se è la prima volta che si utilizza Azure PowerShell, vedere Come installare e configurare Azure PowerShell e seguire le istruzioni fino al termine della procedura per accedere ad Azure e selezionare la sottoscrizione desiderata.
  2. Creare una regola di sicurezza che consente l'accesso alla porta 3389 da Internet.

    $rule1 = New-AzureRmNetworkSecurityRuleConfig -Name rdp-rule -Description "Allow RDP" `
    -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 `
    -SourceAddressPrefix Internet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange 3389
    
  3. Creare una regola di sicurezza che consente l'accesso da Internet alla porta 80.

    $rule2 = New-AzureRmNetworkSecurityRuleConfig -Name web-rule -Description "Allow HTTP" `
    -Access Allow -Protocol Tcp -Direction Inbound -Priority 101 `
    -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * `
    -DestinationPortRange 80
    
  4. Aggiungere le regole create in precedenza a un nuovo gruppo di sicurezza di rete denominato NSG-FrontEnd.

    $nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName TestRG -Location westus `
    -Name "NSG-FrontEnd" -SecurityRules $rule1,$rule2
    
  5. Selezionare le regole create nel gruppo di sicurezza di rete digitando:

    $nsg
    

    L'output che mostra solo le regole di sicurezza:

     SecurityRules        : [
                              {
                                "Name": "rdp-rule",
                                "Etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"",
                                "Id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestRG/providers/Microsoft.Network/networkSecurityGroups/NSG-FrontEnd/securityRules/rdp-rule",
                                "Description": "Allow RDP",
                                "Protocol": "Tcp",
                                "SourcePortRange": "*",
                                "DestinationPortRange": "3389",
                                "SourceAddressPrefix": "Internet",
                                "DestinationAddressPrefix": "*",
                                "Access": "Allow",
                                "Priority": 100,
                                "Direction": "Inbound",
                                "ProvisioningState": "Succeeded"
                              },
                              {
                                "Name": "web-rule",
                                "Etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"",
                                "Id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestRG/providers/Microsoft.Network/networkSecurityGroups/NSG-FrontEnd/securityRules/web-rule",
                                "Description": "Allow HTTP",
                                "Protocol": "Tcp",
                                "SourcePortRange": "*",
                                "DestinationPortRange": "80",
                                "SourceAddressPrefix": "Internet",
                                "DestinationAddressPrefix": "*",
                                "Access": "Allow",
                                "Priority": 101,
                                "Direction": "Inbound",
                                "ProvisioningState": "Succeeded"
                              }
                            ]
    
  6. Associare il gruppo di sicurezza di rete creato in precedenza per la subnet front-end .

    $vnet = Get-AzureRmVirtualNetwork -ResourceGroupName TestRG -Name TestVNet
    Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name FrontEnd `
    -AddressPrefix 192.168.1.0/24 -NetworkSecurityGroup $nsg
    

    Output che mostra solo le impostazioni della subnet FrontEnd , notare il valore per la proprietà NetworkSecurityGroup :

                 Subnets           : [
                                       {
                                         "Name": "FrontEnd",
                                         "Etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"",
                                         "Id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestRG/providers/Microsoft.Network/virtualNetworks/TestVNet/subnets/FrontEnd",
                                         "AddressPrefix": "192.168.1.0/24",
                                         "IpConfigurations": [
                                           {
                                             "Id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/TestNICWeb2/ipConfigurations/ipconfig1"
                                           },
                                           {
                                             "Id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/TestNICWeb1/ipConfigurations/ipconfig1"
                                           }
                                         ],
                                         "NetworkSecurityGroup": {
                                           "Id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestRG/providers/Microsoft.Network/networkSecurityGroups/NSG-FrontEnd"
                                         },
                                         "RouteTable": null,
                                         "ProvisioningState": "Succeeded"
                                       }
    
    Avviso

    L'output per il comando precedente mostra il contenuto per l'oggetto di configurazione della rete virtuale, che esiste solo nei computer in cui si esegue PowerShell. È necessario eseguire il cmdlet Set-AzureRmVirtualNetwork per salvare queste impostazioni in Azure.

  7. Salvare le nuove impostazioni di rete virtuale in Azure.

    Set-AzureRmVirtualNetwork -VirtualNetwork $vnet
    

    L'output che mostra solo la parte NSG:

     "NetworkSecurityGroup": {
       "Id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestRG/providers/Microsoft.Network/networkSecurityGroups/NSG-FrontEnd"
     }
    

Come creare il gruppo di sicurezza di rete per la subnet back-end

Per creare un gruppo di sicurezza di rete denominato NSG-BackEnd in base allo scenario precedente, seguire questa procedura:

  1. Creare una regola di sicurezza che consente l'accesso dalla subnet front-end per la porta 1433 (porta predefinita usata da SQL Server).

    $rule1 = New-AzureRmNetworkSecurityRuleConfig -Name frontend-rule `
    -Description "Allow FE subnet" `
    -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 `
    -SourceAddressPrefix 192.168.1.0/24 -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange 1433
    
  2. Creare una regola di sicurezza che blocca l'accesso a Internet.

    $rule2 = New-AzureRmNetworkSecurityRuleConfig -Name web-rule `
    -Description "Block Internet" `
    -Access Deny -Protocol * -Direction Outbound -Priority 200 `
    -SourceAddressPrefix * -SourcePortRange * `
    -DestinationAddressPrefix Internet -DestinationPortRange *
    
  3. Aggiungere le regole create in precedenza a un nuovo gruppo di sicurezza di rete denominato NSG-BackEnd.

    $nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName TestRG `
    -Location westus -Name "NSG-BackEnd" `
    -SecurityRules $rule1,$rule2
    
  4. Associare il gruppo di sicurezza di rete creato in precedenza per la subnet BackEnd .

    Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name BackEnd ` 
    -AddressPrefix 192.168.2.0/24 -NetworkSecurityGroup $nsg
    

    Output che mostra solo le impostazioni della subnet BackEnd , notare il valore per la proprietà NetworkSecurityGroup :

     Subnets           : [
                   {
                     "Name": "BackEnd",
                     "Etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"",
                     "Id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestRG/providers/Microsoft.Network/virtualNetworks/TestVNet/subnets/BackEnd",
                     "AddressPrefix": "192.168.2.0/24",
                     "IpConfigurations": [...],
                     "NetworkSecurityGroup": {
                       "Id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/TestRG/providers/Microsoft.Network/networkSecurityGroups/NSG-BackEnd"
                     },
                     "RouteTable": null,
                     "ProvisioningState": "Succeeded"
                   }
    
  5. Salvare le nuove impostazioni di rete virtuale in Azure.

    Set-AzureRmVirtualNetwork -VirtualNetwork $vnet
    

Come rimuovere un gruppo di sicurezza di rete

Per eliminare un gruppo di sicurezza di rete esistente, denominato NSG-Frontend in questo caso, attenersi a questa procedura:

Eseguire il comando Remove- AzureRmNetworkSecurityGroup illustrato di seguito e assicurarsi di includere il gruppo di risorse in cui si trova il gruppo di sicurezza di rete.

Remove-AzureRmNetworkSecurityGroup -Name "NSG-FrontEnd" -ResourceGroupName "TestRG"