Gestire i gruppi di sicurezza di rete usando l'interfaccia della riga di comando di AzureManage network security groups using the Azure CLI

Dopo la creazione di uno o più gruppi di risorse, è necessario potere recuperare informazioni sui gruppi di risorse, aggiungere e rimuovere regole, modificare le risorse esistenti, associare o annullare l'associazione di gruppi di sicurezza di rete ed eliminare i gruppi di sicurezza di rete.After you create one or more Network Security Groups (NSGs), you need to be able to retrieve information about your NSGs, add and remove rules, edit existing rules, associate or dissociate NSGs, and delete NSGs. In questo articolo verrà illustrato come eseguire ognuna di queste attività.In this article, you will learn how to execute each of these tasks. Prima di poter gestire i gruppi di sicurezza di rete, è importante sapere come funzionano.Before you can manage NSGs, it's important to know how NSGs work.

Nota

Azure offre due modelli di distribuzione per creare e usare le risorse: Gestione risorse e la distribuzione classica.Azure has two different deployment models for creating and working with resources: Resource Manager and classic. Questo articolo illustra l'uso del modello di distribuzione Resource Manager che Microsoft consiglia di usare invece del modello di distribuzione classica per le distribuzioni più recenti.This article covers using the Resource Manager deployment model, which Microsoft recommends for most new deployments instead of the classic deployment model.

Scenario di esempioSample Scenario

Per illustrare meglio come gestire i gruppi di sicurezza di rete, questo articolo usa lo scenario seguente.To better illustrate how to manage NSGs, this article uses the scenario below.

Scenario di una rete virtuale

In questo scenario si creerà un NSG per ogni subnet nella rete virtuale TestVNet , come illustrato di seguito:In this scenario you will create an NSG for each subnet in the TestVNet virtual network, as described below:

  • NSG-FrontEnd.NSG-FrontEnd. Il front-end NSG verrà applicato per il subnet front-end , e contiene due regole:The front end NSG will be applied to the FrontEnd subnet, and contain two rules:
    • regola-rdp.rdp-rule. Questa regola consente il traffico RDP verso il subnet front-end .This rule will allow RDP traffic to the FrontEnd subnet.
    • regola-web.web-rule. Questa regola consente il traffico HTTP verso il subnet front-end .This rule will allow HTTP traffic to the FrontEnd subnet.
  • Back-end di NSG.NSG-BackEnd. Il back-end NSG verrà applicato per il subnet back-end , e contiene due regole:The back end NSG will be applied to the BackEnd subnet, and contain two rules:
    • regola sql.sql-rule. Questa regola consente il traffico SQL solo dal subnet front-end .This rule allows SQL traffic only from the FrontEnd subnet.
    • regola-web.web-rule. Questa regola nega tutto il traffico associato ad internet proveniente dal subnet back-end .This rule denies all internet bound traffic from the BackEnd subnet.

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 il traffico 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.The combination of these rules create a DMZ-like scenario, where the back end subnet can only receive incoming traffic for SQL traffic from the front end subnet, and has no access to the Internet, while the front end subnet can communicate with the Internet, and receive incoming HTTP requests only.

Per distribuire lo scenario illustrato in precedenza, selezionare questo collegamento, fare clic su Distribuisci in Azure, sostituire i valori del parametro predefinito se necessario e seguire le istruzioni nel portale.To deploy the scenario described above, follow this link, click Deploy to Azure, replace the default parameter values if necessary, and follow the instructions in the portal. Nelle istruzioni di esempio seguenti il modello è stato usato per distribuire un gruppo di risorse con nome RG-NSG.In the sample instructions below, the template was used to deploy a resource group names RG-NSG.

PrerequisitoPrerequisite

Se questa operazione non è stata ancora eseguita, installare e configurare l'interfaccia della riga di comando di Azure 2.0 e accedere a un account Azure usando il comando az login.If you haven't yet, install and configure the latest Azure CLI 2.0 and log in to an Azure account using az login.

Visualizzare NSG esistentiView existing NSGs

Per visualizzare l'elenco di gruppi di sicurezza di rete in un gruppo di risorse specifico, eseguire il comando az network nsg list con un formato di output -o table:To view the list of NSGs in a specific resource group, run the az network nsg list command with a -o table output format:

az network nsg list -g RG-NSG -o table

Output previsto:Expected output:

Location    Name          ProvisioningState    ResourceGroup    ResourceGuid
----------  ------------  -------------------  ---------------  ------------------------------------
centralus   NSG-BackEnd   Succeeded            RG-NSG           <guid>
centralus   NSG-FrontEnd  Succeeded            RG-NSG           <guid>

Elencare tutte le regole per un NSGList all rules for an NSG

Per visualizzare le regole di un gruppo di sicurezza di rete denominato NSG-FrontEnd, eseguire il comando az network nsg show usando il filtro di query JMESPATH e il formato di output -o table:To view the rules of an NSG named NSG-FrontEnd, run the az network nsg show command using a JMESPATH query filter and the -o table output format:

    az network nsg show \
    --resource-group RG-NSG \
    --name NSG-FrontEnd \
    --query '[defaultSecurityRules[],securityRules[]][].{Name:name,Desc:description,Access:access,Direction:direction,DestPortRange:destinationPortRange,DestAddrPrefix:destinationAddressPrefix,SrcPortRange:sourcePortRange,SrcAddrPrefix:sourceAddressPrefix}' \
    -o table

Output previsto:Expected output:

Name                           Desc                                                    Access    Direction    DestPortRange    DestAddrPrefix    SrcPortRange    SrcAddrPrefix
-----------------------------  ------------------------------------------------------  --------  -----------  ---------------  ----------------  --------------  -----------------
AllowVnetInBound               Allow inbound traffic from all VMs in VNET              Allow     Inbound      *                VirtualNetwork    *               VirtualNetwork
AllowAzureLoadBalancerInBound  Allow inbound traffic from azure load balancer          Allow     Inbound      *                *                 *               AzureLoadBalancer
DenyAllInBound                 Deny all inbound traffic                                Deny      Inbound      *                *                 *               *
AllowVnetOutBound              Allow outbound traffic from all VMs to all VMs in VNET  Allow     Outbound     *                VirtualNetwork    *               VirtualNetwork
AllowInternetOutBound          Allow outbound traffic from all VMs to Internet         Allow     Outbound     *                Internet          *               *
DenyAllOutBound                Deny all outbound traffic                               Deny      Outbound     *                *                 *               *
rdp-rule                                                                               Allow     Inbound      3389             *                 *               Internet
web-rule                                                                               Allow     Inbound      80               *                 *               Internet

Nota

È possibile anche usare az network nsg rule list per elencare solo le regole personalizzate da un gruppo di sicurezza di rete.You can also use az network nsg rule list to list only the custom rules from an NSG.

Visualizzare le associazioni di NSGView NSG associations

Per visualizzare le risorse a cui l'NSG NSG-FrontEnd è associato, eseguire il comando az network nsg show:To view what resources the NSG-FrontEnd NSG is associate with, run the az network nsg show command:

az network nsg show -g RG-NSG -n nsg-frontend --query '[subnets,networkInterfaces]'

Cercare le proprietà NetworkInterfaces e Subnets come illustrato di seguito:Look for the networkInterfaces and subnets properties, as shown in the following example output:

[
  [
    {
      "addressPrefix": null,
      "etag": null,
      "id": "/subscriptions/<guid>/resourceGroups/RG-NSG/providers/Microsoft.Network/virtualNetworks/TestVNET/subnets/FrontEnd",
      "ipConfigurations": null,
      "name": null,
      "networkSecurityGroup": null,
      "provisioningState": null,
      "resourceGroup": "RG-NSG",
      "resourceNavigationLinks": null,
      "routeTable": null
    }
  ],
  null
]

Nell'esempio precedente, l'NSG non è associato ad alcuna interfaccia di rete (NIC), ma è associato a una subnet denominata FrontEnd.In the previous example, the NSG is not associated to any network interfaces (NICs), and it is associated to a subnet named FrontEnd.

Aggiungere una regolaAdd a rule

Per aggiungere una regola che consenta il traffico in ingresso alla porta 443 da qualsiasi computer all'NSG NSG-FrontEnd, immettere il comando seguente:To add a rule allowing inbound traffic to port 443 from any machine to the NSG-FrontEnd NSG, enter the following command:

az network nsg rule create  \
--resource-group RG-NSG \
--nsg-name NSG-FrontEnd  \
--name allow-https \
--description "Allow access to port 443 for HTTPS" \
--access Allow \
--protocol Tcp  \
--direction Inbound \
--priority 102 \
--source-address-prefix "*"  \
--source-port-range "*"  \
--destination-address-prefix "*" \
--destination-port-range "443"

Output previsto:Expected output:

{
  "access": "Allow",
  "description": "Allow access to port 443 for HTTPS",
  "destinationAddressPrefix": "*",
  "destinationPortRange": "443",
  "direction": "Inbound",
  "etag": "W/\"<guid>\"",
  "id": "/subscriptions/<guid>/resourceGroups/RG-NSG/providers/Microsoft.Network/networkSecurityGroups/NSG-FrontEnd/securityRules/allow-https",
  "name": "allow-https",
  "priority": 102,
  "protocol": "Tcp",
  "provisioningState": "Succeeded",
  "resourceGroup": "RG-NSG",
  "sourceAddressPrefix": "*",
  "sourcePortRange": "*"
}

Modificare una regolaChange a rule

Per modificare la regola creata in precedenza per consentire solo il traffico in ingresso da Internet, eseguire il comando az network nsg rule update come illustrato di seguito:To change the rule created previously, to allow inbound traffic from the Internet only, run the az network nsg rule update command:

az network nsg rule update \
--resource-group RG-NSG \
--nsg-name NSG-FrontEnd \
--name allow-https \
--source-address-prefix Internet

Output previsto:Expected output:

{
"access": "Allow",
"description": "Allow access to port 443 for HTTPS",
"destinationAddressPrefix": "*",
"destinationPortRange": "443",
"direction": "Inbound",
"etag": "W/\"<guid>\"",
"id": "/subscriptions/<guid>/resourceGroups/RG-NSG/providers/Microsoft.Network/networkSecurityGroups/NSG-FrontEnd/securityRules/allow-https",
"name": "allow-https",
"priority": 102,
"protocol": "Tcp",
"provisioningState": "Succeeded",
"resourceGroup": "RG-NSG",
"sourceAddressPrefix": "Internet",
"sourcePortRange": "*"
}

Eliminare una regolaDelete a rule

Per eliminare la regola creata in precedenza, eseguire il comando seguente:To delete the rule created above, run the following command:

az network nsg rule delete \
--resource-group RG-NSG \
--nsg-name NSG-FrontEnd \
--name allow-https

Associare un NSG a una NICAssociate an NSG to a NIC

Per associare il gruppo di sicurezza di rete NSG-FrontEnd alla scheda di interfaccia di rete TestNICWeb1, eseguire il comando az network nic update:To associate the NSG-FrontEnd NSG to the TestNICWeb1 NIC, use the az network nic update command:

az network nic update \
--resource-group RG-NSG \
--name TestNICWeb1 \
--network-security-group NSG-FrontEnd    

Output previsto:Expected output:

{
  "dnsSettings": {
    "appliedDnsServers": [],
    "dnsServers": [],
    "internalDnsNameLabel": null,
    "internalDomainNameSuffix": "k0wkaguidnqrh0ud.gx.internal.cloudapp.net",
    "internalFqdn": null
  },
  "enableAcceleratedNetworking": false,
  "enableIpForwarding": false,
  "etag": "W/\"<guid>\"",
  "id": "/subscriptions/<guid>/resourceGroups/RG-NSG/providers/Microsoft.Network/networkInterfaces/TestNICWeb1",
  "ipConfigurations": [
    {
      "applicationGatewayBackendAddressPools": null,
      "etag": "W/\"<guid>\"",
      "id": "/subscriptions/<guid>/resourceGroups/RG-NSG/providers/Microsoft.Network/networkInterfaces/TestNICWeb1/ipConfigurations/ipconfig1",
      "loadBalancerBackendAddressPools": null,
      "loadBalancerInboundNatRules": null,
      "name": "ipconfig1",
      "primary": true,
      "privateIpAddress": "192.168.1.6",
      "privateIpAddressVersion": "IPv4",
      "privateIpAllocationMethod": "Static",
      "provisioningState": "Succeeded",
      "publicIpAddress": null,
      "resourceGroup": "RG-NSG",
      "subnet": {
        "addressPrefix": null,
        "etag": null,
        "id": "/subscriptions/<guid>/resourceGroups/RG-NSG/providers/Microsoft.Network/virtualNetworks/TestVNet/subnets/FrontEnd",
        "ipConfigurations": null,
        "name": null,
        "networkSecurityGroup": null,
        "provisioningState": null,
        "resourceGroup": "RG-NSG",
        "resourceNavigationLinks": null,
        "routeTable": null
      }
    }
  ],
  "location": "centralus",
  "macAddress": "00-0D-3A-91-A9-60",
  "name": "TestNICWeb1",
  "networkSecurityGroup": {
    "defaultSecurityRules": null,
    "etag": null,
    "id": "/subscriptions/<guid>/resourceGroups/RG-NSG/providers/Microsoft.Network/networkSecurityGroups/NSG-FrontEnd",
    "location": null,
    "name": null,
    "networkInterfaces": null,
    "provisioningState": null,
    "resourceGroup": "RG-NSG",
    "resourceGuid": null,
    "securityRules": null,
    "subnets": null,
    "tags": null,
    "type": null
  },
  "primary": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "RG-NSG",
  "resourceGuid": "<guid>",
  "tags": {},
  "type": "Microsoft.Network/networkInterfaces",
  "virtualMachine": null
}

Annullare l'associazione tra un NSG e una NICDissociate an NSG from a NIC

Per annullare l'associazione del gruppo di sicurezza di rete NSG-FrontEnd dalla scheda di interfaccia di rete TestNICWeb1 eseguire di nuovo il comando az network nsg rule update ma sostituire l'argomento --network-security-group con una stringa vuota ("").To dissociate the NSG-FrontEnd NSG from the TestNICWeb1 NIC, run the az network nsg rule update command again but replace the --network-security-group argument with an empty string ("").

az network nic update --resource-group RG-NSG --name TestNICWeb3 --network-security-group ""

Nell'output la chiave networkSecurityGroup è impostata su null.In the output, the networkSecurityGroup key is set to null.

Annullare l'associazione tra un NSG e una subnetDissociate an NSG from a subnet

Per annullare l'associazione del gruppo di sicurezza di rete NSG-FrontEnd dalla subnet FrontEnd eseguire il comando az network nsg rule update, ma sostituire l'argomento --network-security-group con una stringa vuota ("").To dissociate the NSG-FrontEnd NSG from the FrontEnd subnet, again run the az network nsg rule update command again but replace the --network-security-group argument with an empty string ("").

az network vnet subnet update \
--resource-group RG-NSG \
--vnet-name testvnet \
--name FrontEnd \
--network-security-group ""

Nell'output la chiave networkSecurityGroup è impostata su null.In the output, the networkSecurityGroup key is set to null.

Associare un gruppo di sicurezza di rete a una subnetAssociate an NSG to a subnet

Per associare di nuovo il gruppo di sicurezza di rete NSG-FrontEnd alla subnet FrontEnd, eseguire il comando seguente:To associate the NSG-FrontEnd NSG to the FrontEnd subnet again, run the following command:

az network vnet subnet update \
--resource-group RG-NSG \
--vnet-name testvnet \
--name FrontEnd \
--network-security-group NSG-FrontEnd

Nell'output il valore della chiave networkSecurityGroup è simile al seguente:In the output, the networkSecurityGroup key has something similar for the value:

"networkSecurityGroup": {
    "defaultSecurityRules": null,
    "etag": null,
    "id": "/subscriptions/0e220bf6-5caa-4e9f-8383-51f16b6c109f/resourceGroups/RG-NSG/providers/Microsoft.Network/networkSecurityGroups/NSG-FrontEnd",
    "location": null,
    "name": null,
    "networkInterfaces": null,
    "provisioningState": null,
    "resourceGroup": "RG-NSG",
    "resourceGuid": null,
    "securityRules": null,
    "subnets": null,
    "tags": null,
    "type": null
  }

Eliminare un gruppo di sicurezza di reteDelete an NSG

È possibile eliminare un NSG solo se non è associato ad alcuna risorsa.You can only delete an NSG if it's not associated to any resource. Per eliminare un NSG, seguire questa procedura:To delete an NSG, complete the following steps:

  1. Per controllare le risorse associate a un NSG, eseguire azure network nsg show come illustrato in Visualizzare le associazioni di NSG.To check the resources associated to an NSG, run the azure network nsg show as shown in View NSGs associations.
  2. Se l'NSG è associato a una o più NIC, eseguire azure network nic set come illustrato in Annullare l'associazione tra un NSG e una NIC per ognuna delle NIC.If the NSG is associated to any NICs, run the azure network nic set as shown in Dissociate an NSG from a NIC for each NIC.
  3. Se l'NSG è associato a una o più subnet, eseguire azure network vnet subnet set come illustrato in Annullare l'associazione tra un NSG e una subnet per ognuna delle subnet.If the NSG is associated to any subnet, run the azure network vnet subnet set as shown in Dissociate an NSG from a subnet for each subnet.
  4. Per eliminare l'NSG, eseguire il comando seguente:To delete the NSG, run the following command:

    az network nsg delete --resource-group RG-NSG --name NSG-FrontEnd
    

    Passaggi successiviNext steps

  5. Abilitare la registrazione per gli NSG.Enable logging for NSGs.