Controllare se il traffico è consentito o negato con la verifica del flusso IP, una funzionalità di Azure Network Watcher

La verifica del flusso IP è una funzionalità di Network Watcher che consente di verificare se il traffico da o verso una macchina virtuale è consentito o negato. La convalida può essere eseguita per il traffico in ingresso o in uscita. Questo scenario è utile per stabilire se una macchina virtuale può comunicare con una risorsa esterna o back-end. La funzionalità può essere usata per verificare se le regole del gruppo di sicurezza di rete sono configurate correttamente e per risolvere i problemi dei flussi bloccati da tali regole. La verifica del flusso IP consente inoltre di verificare che il traffico che si vuole bloccare sia correttamente bloccato dal gruppo di sicurezza di rete.

Prima di iniziare

ARMclient viene usato per chiamare l'API REST con PowerShell. ARMClient è reperibile in Chocolatey in ARMClient on Chocolatey (ARMClient in Chocolatey)

Questo scenario presuppone il completamento dei passaggi descritti in Creare un servizio Network Watcher per creare un servizio Network Watcher.

Scenario

Questo scenario usa la verifica del flusso IP per verificare se una macchina virtuale può comunicare con un altro computer sulla porta 443. Se il traffico viene negato, restituisce la regola di sicurezza che nega il traffico. Per altre informazioni sulla verifica del flusso IP, leggere la panoramica sulla verifica del flusso IP

In questo scenario:

  • Recuperare una macchina virtuale
  • Chiamare la verifica del flusso IP
  • Verificare i risultati

Accedere con ARMClient

armclient login

Recuperare una macchina virtuale

Eseguire lo script seguente per restituire la macchina virtuale. Il codice seguente richiede valori per le variabili:

  • subscriptionId: l'ID sottoscrizione da usare.
  • resourceGroupName: il nome di un gruppo di risorse contenente le macchine virtuali.
$subscriptionId = "<subscription id>"
$resourceGroupName = "<resource group name>"

armclient get https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Compute/virtualMachines?api-version=2015-05-01-preview

L'informazione necessaria è l'ID, disponibile nel tipo Microsoft.Compute/virtualMachines. I risultati dovrebbero essere simili all'esempio di codice seguente:

...,
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "/subscriptions/{00000000-0000-0000-0000-000000000000}/resourceGroups/ContosoExampleRG/providers/Microsoft
.Network/networkInterfaces/contosovm842"
            }
          ]
        },
        "provisioningState": "Succeeded"
      },
      "resources": [
        {
          "id": "/subscriptions/{00000000-0000-0000-0000-000000000000}/resourceGroups/ContosoExampleRG/providers/Microsoft.Com
pute/virtualMachines/ContosoVM/extensions/CustomScriptExtension"
        }
      ],
      "type": "Microsoft.Compute/virtualMachines",
      "location": "westcentralus",
      "id": "/subscriptions/{00000000-0000-0000-0000-000000000000}/resourceGroups/ContosoExampleRG/providers/Microsoft.Compute
/virtualMachines/ContosoVM",
      "name": "ContosoVM"
    }
  ]
}

Chiamare la verifica del flusso IP

L'esempio seguente crea una richiesta per verificare il traffico per una macchina virtuale specificata. La risposta restituita indica se il traffico è consentito o negato. Se il traffico viene negato, restituisce anche la regola che blocca il traffico.

Nota

La verifica del flusso IP richiede che la risorsa VM sia allocata.

Lo script richiede l'ID risorsa di una macchina virtuale e di una scheda di interfaccia di rete nella macchina virtuale. Questi valori sono disponibili nell'output precedente.

Importante

Per tutte le chiamate REST di Network Watcher, è il nome del gruppo di risorse nell'URI della richiesta che contiene l'istanza di Network Watcher, non le risorse su cui si eseguono le azioni di diagnostica.

$subscriptionId = "<subscription id>"
$resourceGroupName = "<resource group name>"
$networkWatcherName = "<network watcher name>"
$vmName = "<vm name>"
$vmNICName = "<vm NIC name>"
$direction = "<direction of traffic>" # Examples are: Inbound or Outbound
$localIP = "<source IP>"
$localPort = "<source Port>"
$remoteIP = "<destination IP>"
$remotePort = "<destination Port>" # Examples are: 80, or 80-120
$protocol = "<UDP, TCP or *>"
$targetUri = "<uri of target resource>" # Example: /subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.compute/virtualMachine/${vmName}
$targetNic = "<uri of target nic resource>" # Example: /subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkInterfaces/${vmNICName}

$requestBody = @"
{
    'targetResourceId':  '$targetUri',
    'direction':  '$direction',
    'protocol':  '$protocol',
    'localPort':  '$localPort',
    'remotePort':  '$remotePort',
    'localIPAddress':  '$localIP',
    'remoteIPAddress':  '$remoteIP',
    'targetNICResourceId':  '$targetNic'
}
"@

armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/ipFlowVerify?api-version=2016-12-01" $requestBody -verbose

Informazioni sui risultati

La risposta che viene restituita indica se il traffico è consentito o negato. La risposta ha un aspetto simile a uno degli esempi seguenti:

Consentito

{
  "access": "Allow",
  "ruleName": "defaultSecurityRules/AllowInternetOutBound"
}

Negato

{
  "access": "Deny",
  "ruleName": "defaultSecurityRules/DefaultInboundDenyAll"
}

Passaggi successivi

Se il traffico risulta bloccato e non dovrebbe esserlo, vedere Gestire gruppi di sicurezza di rete per informazioni al riguardo.