PowerShell を使用して Azure Network Watcher で仮想マシン スケール セットのパケット キャプチャを管理する
Network Watcher のパケット キャプチャを使用すると、仮想マシン スケール セット インスタンスとの間で送受信されるトラフィックを追跡するキャプチャ セッションを作成できます。 必要なトラフィックのみを確実にキャプチャするためにキャプチャ セッション用のフィルターが用意されています。 パケット キャプチャは、事後と事前、どちらの場合でもネットワークの異常を診断するのに役立ちます。 その他の用途には、ネットワーク統計の収集や、ネットワークへの侵入に関する情報の取得などがあり、クライアントとサーバー間の通信のデバッグなどに役立ちます。 パケット キャプチャをリモートでトリガーできることで、目的の仮想マシン スケール セット インスタンスでパケット キャプチャを手動で実行する負担が軽減され、貴重な時間を節約できます。
この記事では、パケット キャプチャで現在利用できるさまざまな管理作業について説明します。
開始する前に
この記事では、次のリソースがあることを前提としています。
- パケット キャプチャを作成するリージョン内の Network Watcher インスタンス
重要
パケット キャプチャには仮想マシン スケール セット拡張機能 AzureNetworkWatcherExtension
が必要です。 Windows VM への拡張機能のインストールについては、Windows 用 Azure Network Watcher Agent 仮想マシン拡張機能に関する記事をご覧ください。Linux VM の場合は、Linux 用 Azure Network Watcher Agent 仮想マシン拡張機能に関する記事をご覧ください。
仮想マシン スケール セット拡張機能をインストールする
手順 1
$vmss = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"
手順 2
仮想マシン スケール セット/仮想マシン スケール セット インスタンスに networkWatcherAgent をインストールする
Add-AzVmssExtension -VirtualMachineScaleSet $vmss -Name "AzureNetworkWatcherExtension" -Publisher "Microsoft.Azure.NetworkWatcher" -Type "NetworkWatcherAgentWindows" -TypeHandlerVersion "1.4" -AutoUpgradeMinorVersion $True
Update-AzVmss -ResourceGroupName "$resourceGroupName" -Name $virtualMachineScaleSetName -VirtualMachineScaleSet $vmss
Update-AzVmssInstance -ResourceGroupName "$resourceGroupName" -VMScaleSetName $vmss.Name -InstanceId 0
> The `Set-AzVMExtension` cmdlet may take several minutes to complete.
手順 3.
エージェントがインストールされていることを確認するには、手順 1 に従います
Get-AzVMss -ResourceGroupName $vmss.ResourceGroupName -VMNScaleSetName $vmss.Name
パケット キャプチャを開始する
上記の手順が完了すると、パケット キャプチャ エージェントが仮想マシン スケール セットにインストールされます。
手順 1
次の手順では、Network Watcher インスタンスを取得します。 この変数は、手順 4 で New-AzNetworkWatcherPacketCapture
コマンドレットに渡されます。
$networkWatcher = Get-AzNetworkWatcher | Where {$_.Location -eq "westcentralus" }
手順 2
ストレージ アカウントを取得します。 このストレージ アカウントは、パケット キャプチャ ファイルの格納に使用されます。
$storageAccount = Get-AzStorageAccount -ResourceGroupName testrg -Name testrgsa123
手順 3
フィルターを使用して、パケット キャプチャによって格納されるデータを制限できます。 次の例では、2 つのフィルターを設定します。 最初のフィルターは、ローカル IP 10.0.0.3 から宛先ポート 20、80、443 への送信 TCP トラフィックのみを収集します。 2 番目のフィルターは、UDP トラフィックのみを収集します。
$filter1 = New-AzPacketCaptureFilterConfig -Protocol TCP -RemoteIPAddress "1.1.1.1-255.255.255.255" -LocalIPAddress "10.0.0.3" -LocalPort "1-65535" -RemotePort "20;80;443"
$filter2 = New-AzPacketCaptureFilterConfig -Protocol UDP
Note
単一のパケット キャプチャに対して複数のフィルターを定義できます。
手順 4
パケット キャプチャのスコープを作成する
$s1 = New-AzPacketCaptureScopeConfig -Include "0", "1"
手順 5.
New-AzNetworkWatcherPacketCaptureV2
コマンドレットを実行してパケット キャプチャ プロセスを開始し、前の手順で取得した必要な値を渡します。
New-AzNetworkWatcherPacketCaptureV2 -NetworkWatcher $networkwatcher -PacketCaptureName $pcName -TargetId $vmss.Id -TargetType "azurevmss" -StorageAccountId $storageAccount.id -Filter $filter1, $filter2
パケット キャプチャを取得する
Get-AzNetworkWatcherPacketCapture
コマンドレットを実行して、現在実行中または完了したパケット キャプチャの状態を取得します。
Get-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName "PacketCaptureTest"
次の例は、Get-AzNetworkWatcherPacketCapture
コマンドレットからの出力です。 次の例はキャプチャ完了後です。 PacketCaptureStatus 値は Stopped で、StopReason は TimeExceeded です。 この値は、パケット キャプチャが成功し、所定の時間実行されたことを示します。
Name : PacketCaptureTest
Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatcher
s/NetworkWatcher_westcentralus/packetCaptures/PacketCaptureTest
Etag : W/"4b9a81ed-dc63-472e-869e-96d7166ccb9b"
ProvisioningState : Succeeded
Target : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testrg/providers/Microsoft.Compute/virtualMachines/testvm1
BytesToCapturePerPacket : 0
TotalBytesPerSession : 1073741824
TimeLimitInSeconds : 60
StorageLocation : {
"StorageId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testrg/providers/Microsoft.Storage/storageA
ccounts/examplestorage",
"StoragePath": "https://examplestorage.blob.core.windows.net/network-watcher-logs/subscriptions/00000000-0000-0000-0000-00000
0000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/testvm1/2017/02/01/packetcapture_22_42_48_238.cap"
}
Filters : [
{
"Protocol": "TCP",
"RemoteIPAddress": "1.1.1.1-255.255.255",
"LocalIPAddress": "10.0.0.3",
"LocalPort": "1-65535",
"RemotePort": "20;80;443"
},
{
"Protocol": "UDP",
"RemoteIPAddress": "",
"LocalIPAddress": "",
"LocalPort": "",
"RemotePort": ""
}
]
CaptureStartTime : 2/1/2017 10:43:01 PM
PacketCaptureStatus : Stopped
StopReason : TimeExceeded
PacketCaptureError : []
パケット キャプチャを停止する
Stop-AzNetworkWatcherPacketCapture
コマンドレットを実行することで、キャプチャ セッションが進行中の場合は停止します。
Stop-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName "PacketCaptureTest"
注意
このコマンドレットは、現在実行中のキャプチャ セッションまたは既に停止している既存のセッションに対して実行した場合、応答を返しません。
パケット キャプチャを削除する
Remove-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName "PacketCaptureTest"
注意
パケット キャプチャを削除しても、ストレージ アカウント内のファイルは削除されません。
パケット キャプチャをダウンロードする
パケット キャプチャ セッションが完了すると、BLOB ストレージまたはインスタンス上のローカル ファイルにキャプチャ ファイルをアップロードできます。 パケット キャプチャの格納場所は、セッションの作成時に定義されます。 ストレージ アカウントに保存されるこれらのキャプチャ ファイルにアクセスするための便利なツールが Microsoft Azure Storage Explorer です。このツールは、https://storageexplorer.com/ からダウンロードできます
ストレージ アカウントが指定されている場合、パケット キャプチャ ファイルは、次の場所にあるストレージ アカウントに保存されます。
複数のインスタンスが選択されている場合
https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachinescalesets/{VMSSName}/{year}/{month}/{day}/packetCapture_{creationTime}
1 つのインスタンスが選択されている場合
https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachinescalesets/{VMSSName}/virtualMachines/{instance}/{year}/{month}/{day}/packetCapture_{creationTime}.cap
次の手順
IP フロー検証の確認に関する記事を参照して、VM で送受信される特定のトラフィックが許可されているかどうかを調べる