Gestire le acquisizioni di pacchetti per le macchine virtuali con Azure Network Watcher usando PowerShell

Lo strumento di acquisizione pacchetti network Watcher consente di creare sessioni di acquisizione per registrare il traffico di rete da e verso una macchina virtuale di Azure. Vengono forniti filtri per la sessione di acquisizione per assicurarsi di acquisire solo il traffico desiderato. L'acquisizione di pacchetti consente di diagnosticare le anomalie di rete in modo reattivo e proattivo. Le applicazioni si estendono oltre il rilevamento anomalie per includere la raccolta di statistiche di rete, l'acquisizione di informazioni dettagliate sulle intrusioni di rete, il debug delle comunicazioni client-server e la risoluzione di varie altre problematiche di rete. L'acquisizione di pacchetti network Watcher consente di avviare acquisizioni di pacchetti in modalità remota, riducendo la necessità di eseguire manualmente in una macchina virtuale specifica.

Questo articolo illustra come configurare, avviare, arrestare, scaricare ed eliminare in remoto un'acquisizione di pacchetti di macchine virtuali usando Azure PowerShell. Per informazioni su come gestire le acquisizioni di pacchetti usando il portale di Azure o l'interfaccia della riga di comando di Azure, vedere Gestire le acquisizioni di pacchetti per le macchine virtuali usando la portale di Azure o Gestire le acquisizioni di pacchetti per le macchine virtuali tramite l'interfaccia della riga di comando di Azure.

Prerequisiti

  • Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.

  • Azure Cloud Shell o Azure PowerShell.

    I passaggi descritti in questo articolo eseguono i cmdlet di Azure PowerShell in modo interattivo in Azure Cloud Shell. Per eseguire i comandi in Cloud Shell, selezionare Apri Cloud Shell nell'angolo superiore destro di un blocco di codice. Selezionare Copia per copiare il codice e incollarlo in Cloud Shell per eseguirlo. È anche possibile eseguire Cloud Shell dal portale di Azure.

    È anche possibile installare Azure PowerShell in locale per eseguire i cmdlet. Questo articolo richiede il modulo Az PowerShell. Per altre informazioni, vedere Come installare Azure PowerShell. Per trovare la versione installata, eseguire Get-InstalledModule -Name Az. Se si esegue PowerShell in locale, accedere ad Azure usando il cmdlet Connessione-AzAccount.

  • Una macchina virtuale con la connettività TCP in uscita seguente:

    • all'account di archiviazione sulla porta 443
    • a 169.254.169.254 sulla porta 80
    • a 168.63.129.16 sulla porta 8037

Nota

  • Azure crea un'istanza di Network Watcher nell'area della macchina virtuale se Network Watcher non è stato abilitato per tale area. Per altre informazioni, vedere Abilitare o disabilitare Azure Network Watcher.
  • L'acquisizione di pacchetti network Watcher richiede l'installazione dell'estensione macchina virtuale dell'agente Network Watcher nella macchina virtuale di destinazione. Per altre informazioni, vedere Installare l'agente Network Watcher.
  • Gli ultimi due indirizzi IP e le porte elencati nei prerequisiti sono comuni in tutti gli strumenti di Network Watcher che usano l'agente Network Watcher e possono talvolta cambiare.

Se un gruppo di sicurezza di rete è associato all'interfaccia di rete o alla subnet in cui si trova l'interfaccia di rete, assicurarsi che le regole esistano per consentire la connettività in uscita sulle porte precedenti. Analogamente, assicurarsi la connettività in uscita sulle porte precedenti quando si aggiungono route definite dall'utente alla rete.

Installare l'agente Network Watcher

Per usare l'acquisizione di pacchetti, è necessario installare l'estensione macchina virtuale dell'agente Network Watcher nella macchina virtuale.

Usare il cmdlet Get-AzVMExtension per verificare se l'estensione è installata nella macchina virtuale:

# List the installed extensions on the virtual machine.
Get-AzVMExtension -VMName 'myVM' -ResourceGroupName 'myResourceGroup' | format-table Name, Publisher, ExtensionType, EnableAutomaticUpgrade 

Se l'estensione è installata nella macchina virtuale, è possibile visualizzarla nell'output del comando precedente:

Name                         Publisher                      ExtensionType            EnableAutomaticUpgrade
----                         ---------                      -------------            ----------------------
AzureNetworkWatcherExtension Microsoft.Azure.NetworkWatcher NetworkWatcherAgentLinux                   True

Se l'estensione non è installata, usare il cmdlet Set-AzVMExtension per installarla:

# Install Network Watcher agent on a Linux virtual machine.
Set-AzVMExtension -Publisher 'Microsoft.Azure.NetworkWatcher' -ExtensionType 'NetworkWatcherAgentLinux' -Name 'AzureNetworkWatcherExtension' -VMName 'myVM' -ResourceGroupName 'myResourceGroup' -TypeHandlerVersion '1.4' -EnableAutomaticUpgrade 1 
# Install Network Watcher agent on a Windows virtual machine.
Set-AzVMExtension -Publisher 'Microsoft.Azure.NetworkWatcher' -ExtensionType 'NetworkWatcherAgentWindows' -Name 'AzureNetworkWatcherExtension' -VMName 'myVM' -ResourceGroupName 'myResourceGroup' -TypeHandlerVersion '1.4' -EnableAutomaticUpgrade 1 

Dopo aver completato l'installazione dell'estensione, viene visualizzato l'output seguente:

RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK 

Avviare un'acquisizione di pacchetti

Per avviare una sessione di acquisizione, usare il cmdlet New-AzNetworkWatcherPacketCapture :

# Place the virtual machine configuration into a variable.
$vm = Get-AzVM -ResourceGroupName 'myResourceGroup' -Name 'myVM'

# Place the storage account configuration into a variable.
$storageAccount = Get-AzStorageAccount -ResourceGroupName 'myResourceGroup' -Name 'mystorageaccount'

# Start the Network Watcher capture session.
New-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1' -TargetVirtualMachineId $vm.Id  -StorageAccountId $storageAccount.Id 

Dopo l'avvio della sessione di acquisizione, viene visualizzato l'output seguente:

ProvisioningState Name   BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ----   ----------------------- -------------------- ------------------
Succeeded         myVM_1 0                       1073741824           18000

La tabella seguente descrive i parametri facoltativi che è possibile usare con il New-AzNetworkWatcherPacketCapture cmdlet :

Parametro description
-Filter Aggiungere filtri per acquisire solo il traffico desiderato. Ad esempio, è possibile acquisire solo il traffico TCP da un indirizzo IP specifico a una porta specifica.
-TimeLimitInSeconds Impostare la durata massima della sessione di acquisizione. Il valore predefinito è 18000 secondi (5 ore).
-BytesToCapturePerPacket Impostare il numero massimo di byte da acquisire per ogni pacchetto. Tutti i byte vengono acquisiti se non vengono utilizzati o 0 immessi.
-TotalBytesPerSession Impostare il numero totale di byte acquisiti. Una volta raggiunto il valore, l'acquisizione pacchetti si arresta. Se non viene usato, vengono acquisiti fino a 1 GB (1.073.741.824 byte).
-LocalFilePath Immettere un percorso di file locale valido se si vuole salvare l'acquisizione nella macchina virtuale di destinazione, ad esempio C:\Capture\myVM_1.cap. Se si usa un computer Linux, il percorso deve iniziare con /var/captures.

Interrompere un'acquisizione di pacchetti

Usare il cmdlet Stop-AzNetworkWatcherPacketCapture per arrestare manualmente una sessione di acquisizione pacchetti in esecuzione.

# Manually stop a packet capture session.
Stop-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

Nota

Il cmdlet non restituisce una risposta se eseguita in una sessione di acquisizione attualmente in esecuzione o in una sessione già arrestata.

Ottenere un'acquisizione di pacchetti

Usare il cmdlet Get-AzNetworkWatcherPacketCapture per recuperare lo stato di un'acquisizione di pacchetti (in esecuzione o completata).

# Get information, properties, and status of a packet capture.
Get-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

L'output seguente è un esempio dell'output del Get-AzNetworkWatcherPacketCapture cmdlet . L'esempio seguente mostra il risultato ottenuto al completamento dell'acquisizione di pacchetti. Il valore PacketCaptureStatus è Stopped, mentre il valore StopReason corrisponde a TimeExceeded. Questo valore indica che l'acquisizione di pacchetti ha avuto esito positivo ed è stata eseguita per il tempo necessario.

ProvisioningState Name   Target                                                                                                                              BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ----   ------                                                                                                                              ----------------------- -------------------- ------------------
Succeeded         myVM_1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM 0                       1073741824           18000

Nota

Per ottenere altri dettagli nell'output, aggiungere | Format-List alla fine del comando.

Scaricare un'acquisizione di pacchetti

Dopo aver concluso la sessione di acquisizione pacchetti, il file di acquisizione risultante viene salvato in Archiviazione di Azure, un file locale nella macchina virtuale di destinazione o entrambi. La destinazione di archiviazione per l'acquisizione di pacchetti viene specificata durante la creazione. Per altre informazioni, vedere Avviare un'acquisizione di pacchetti.

Se viene specificato un account di archiviazione, i file di acquisizione vengono salvati nell'account di archiviazione nel percorso seguente:

https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{virtualMachineName}/{year}/{month}/{day}/packetcapture_{UTCcreationTime}.cap

Per scaricare un file di acquisizione pacchetti salvato in Archiviazione di Azure, usare il cmdlet Get-Az Archiviazione BlobContent:

# Download the packet capture file from Azure storage container.
Get-AzStorageBlobContent -Container 'network-watcher-logs' -Blob 'subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm/2024/01/25/packetcapture_22_44_54_342.cap' -Destination 'C:\Capture\myVM_1.cap'

Nota

È anche possibile scaricare il file di acquisizione dal contenitore dell'account di archiviazione usando Archiviazione di Azure Explorer. Archiviazione Explorer è un'app autonoma che è possibile usare facilmente per accedere e usare i dati Archiviazione di Azure. Per altre informazioni, vedere Introduzione a Archiviazione Explorer.

Eliminare un'acquisizione di pacchetti

# Remove a packet capture resource.
Remove-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

Importante

L'eliminazione di un'acquisizione di pacchetti in Network Watcher non elimina il file di acquisizione dall'account di archiviazione o dalla macchina virtuale. Se non è più necessario il file di acquisizione, è necessario eliminarlo manualmente dall'account di archiviazione per evitare di incorrere in costi di archiviazione.