Azure CLI を使用して Azure Network Watcher で仮想マシンのパケット キャプチャを管理する

Network Watcher パケット キャプチャ ツールを使用すると、Azure 仮想マシン (VM) との間のネットワーク トラフィックを記録するキャプチャ セッションを作成できます。 必要なトラフィックのみを確実にキャプチャするためにキャプチャ セッション用のフィルターが用意されています。 パケット キャプチャは、事後対応的および事前対応的な両方の方法でネットワークの異常を診断するのに役立ちます。 その適用範囲は、異常検出だけでなく、ネットワーク統計情報の収集、ネットワーク侵入に関する分析情報の取得、クライアントとサーバー間の通信のデバッグ、その他のさまざまなネットワークの課題への対処を含みます。 Network Watcher パケット キャプチャを使用すると、パケット キャプチャをリモートで開始できるため、特定の仮想マシン上で手動で実行する必要が軽減されます。

この記事では、Azure PowerShell を使用して、仮想マシンのパケット キャプチャをリモートで構成、開始、停止、ダウンロード、削除する方法について説明します。 Azure portal または Azure CLI を使用してパケット キャプチャを管理する方法については、Azure portal を使用して仮想マシンのパケット キャプチャを管理するまたは PowerShell を使用して仮想マシンのパケット キャプチャを管理するに関する記事を参照してください。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます

  • Azure Cloud Shell または Azure CLI。

    この記事の手順では、Azure Cloud Shell で Azure CLI コマンドを対話型で実行します。 Cloud Shell でコマンドを実行するには、コード ブロックの右上隅にある [Cloud Shell を開く] を選択します。 [コピー] を選択してコードをコピーし、Cloud Shell に貼り付けて実行します。 Azure portal 内から Cloud Shell を実行することもできます。

    また、Azure CLI をローカルにインストールしてコマンドを実行することもできます。 Azure CLI をローカルで実行する場合は、az login コマンドを使用して Azure にサインインします。

  • 次の送信 TCP 接続を持つ仮想マシン:

    • ポート 443 を経由するストレージ アカウントへ
    • ポート 80 を経由する 169.254.169.254 への接続
    • ポート 8037 を経由する 168.63.129.16 への接続

Note

  • 仮想マシンのリージョンで Network Watcher が有効になっていない場合、Azure ではそのリージョンに Network Watcher インスタンスを作成します。 詳細については、「Azure Network Watcher を有効または無効にする」を参照してください。
  • Network Watcher パケット キャプチャでは、対象となる仮想マシンに Network Watcher エージェント VM 拡張機能をインストールする必要があります。 詳細については、「Network Watcher エージェントをインストールする」を参照してください。
  • 前提条件」に記載されている最後の 2 つの IP アドレスとポートは、Network Watcher エージェントを使用するすべての Network Watcher ツールで共通であり、変更されることがあります。

ネットワーク セキュリティ グループが、ネットワーク インターフェイス、またはネットワーク インターフェイスが含まれるサブネットに関連付けられている場合は、前述のポート経由の送信接続を許可するルールが存在することを確認します。 同様に、ユーザー定義ルートをネットワークに追加するときに、前述のポート経由の送信接続を確保します。

Network Watcher エージェントをインストールする

手順 1

ゲスト仮想マシンにパケット キャプチャ エージェントをインストールするには、az vm extension set コマンドを実行します。

Windows 仮想マシンの場合:

az vm extension set --resource-group resourceGroupName --vm-name virtualMachineName --publisher Microsoft.Azure.NetworkWatcher --name NetworkWatcherAgentWindows --version 1.4

Linux 仮想マシンの場合:

az vm extension set --resource-group resourceGroupName --vm-name virtualMachineName --publisher Microsoft.Azure.NetworkWatcher --name NetworkWatcherAgentLinux --version 1.4

手順 2.

エージェントがインストールされていることを確認するために、リソース グループと仮想マシン名を渡して vm extension show コマンドレットを実行します。 結果のリストを調べて、エージェントがインストールされていることを確認します。

Windows 仮想マシンの場合:

az vm extension show --resource-group resourceGroupName --vm-name virtualMachineName --name NetworkWatcherAgentWindows

Linux 仮想マシンの場合:

az vm extension show --resource-group resourceGroupName --vm-name virtualMachineName --name AzureNetworkWatcherExtension

以下のサンプルは、az vm extension show の実行に対する応答の例です。

{
  "autoUpgradeMinorVersion": true,
  "forceUpdateTag": null,
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/NetworkWatcherAgentWindows",
  "instanceView": null,
  "location": "westcentralus",
  "name": "NetworkWatcherAgentWindows",
  "protectedSettings": null,
  "provisioningState": "Succeeded",
  "publisher": "Microsoft.Azure.NetworkWatcher",
  "resourceGroup": "{resourceGroupName}",
  "settings": null,
  "tags": null,
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "typeHandlerVersion": "1.4",
  "virtualMachineExtensionType": "NetworkWatcherAgentWindows"
}

パケット キャプチャを開始する

上記の手順が完了すると、パケット キャプチャ エージェントは仮想マシンにインストールされます。

手順 1

ストレージ アカウントを取得します。 このストレージ アカウントは、パケット キャプチャ ファイルの格納に使用されます。

az storage account list

手順 2.

この時点で、パケット キャプチャを作成する準備が整いました。この時点で、パケット キャプチャを作成する準備が整いました。 まず、構成するパラメーターを確認してみましょう。 フィルターは、パケットキャプチャによって格納されるデータを制限するために使用できるパラメーターです。 次の例では、いくつかのフィルターを使用してパケット キャプチャを設定します。 最初の 3 つのフィルターは、ローカル IP 10.0.0.3 から宛先ポート 20、80、443 への発信 TCP トラフィックのみを収集します。 最後のフィルターは、UDP トラフィックのみを収集します。

az network watcher packet-capture create --resource-group {resourceGroupName} --vm {vmName} --name packetCaptureName --storage-account {storageAccountName} --filters "[{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"20\"},{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"80\"},{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"443\"},{\"protocol\":\"UDP\"}]"

次の例は、az network watcher packet-capture create コマンドを実行したときに予想される出力です。

{
  "bytesToCapturePerPacket": 0,
  "etag": "W/\"b8cf3528-2e14-45cb-a7f3-5712ffb687ac\"",
  "filters": [
    {
      "localIpAddress": "10.0.0.3",
      "localPort": "",
      "protocol": "TCP",
      "remoteIpAddress": "1.1.1.1-255.255.255.255",
      "remotePort": "20"
    },
    {
      "localIpAddress": "10.0.0.3",
      "localPort": "",
      "protocol": "TCP",
      "remoteIpAddress": "1.1.1.1-255.255.255.255",
      "remotePort": "80"
    },
    {
      "localIpAddress": "10.0.0.3",
      "localPort": "",
      "protocol": "TCP",
      "remoteIpAddress": "1.1.1.1-255.255.255.255",
      "remotePort": "443"
    },
    {
      "localIpAddress": "",
      "localPort": "",
      "protocol": "UDP",
      "remoteIpAddress": "",
      "remotePort": ""
    }
  ],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/pa
cketCaptures/packetCaptureName",
  "name": "packetCaptureName",
  "provisioningState": "Succeeded",
  "resourceGroup": "NetworkWatcherRG",
  "storageLocation": {
    "filePath": null,
    "storageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/gwteststorage123abc",
    "storagePath": "https://gwteststorage123abc.blob.core.windows.net/network-watcher-logs/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/{resourceGroupName}/p
roviders/microsoft.compute/virtualmachines/{vmName}/2017/05/25/packetcapture_16_22_34_630.cap"
  },
  "target": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}",
  "timeLimitInSeconds": 18000,
  "totalBytesPerSession": 1073741824
}

パケット キャプチャを取得する

az network watcher packet-capture show-status コマンドを実行して、現在実行中または完了したパケット キャプチャの状態を取得します。

az network watcher packet-capture show-status --name packetCaptureName --location {networkWatcherLocation}

次の例は、az network watcher packet-capture show-status コマンドからの出力です。 次の例は、StopReason が TimeExceeded でキャプチャが Stopped となった場合の例です。

{
  "additionalProperties": {
    "status": "Succeeded"
  },
  "captureStartTime": "2016-12-06T17:20:01.5671279Z",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/packetCaptures/packetCaptureName",
  "name": "packetCaptureName",
  "packetCaptureError": [],
  "packetCaptureStatus": "Stopped",
  "stopReason": "TimeExceeded"
}

パケット キャプチャを停止する

az network watcher packet-capture stop コマンドを実行することで、キャプチャ セッションが進行中の場合は停止します。

az network watcher packet-capture stop --name packetCaptureName --location westcentralus

注意

このコマンドレットは、現在実行中のキャプチャ セッションまたは既に停止している既存のセッションに対して実行した場合、応答を返しません。

パケット キャプチャを削除する

az network watcher packet-capture delete --name packetCaptureName --location westcentralus

注意

パケット キャプチャを削除しても、ストレージ アカウント内のファイルは削除されません。

パケット キャプチャをダウンロードする

パケット キャプチャ セッションが完了すると、BLOB ストレージまたは VM 上のローカル ファイルにキャプチャ ファイルをアップロードできます。 パケット キャプチャの格納場所は、セッションの作成時に定義されます。 ストレージ アカウントに保存されるこれらのキャプチャ ファイルにアクセスするための便利なツールが Microsoft Azure Storage Explorer です。このツールは、https://storageexplorer.com/ からダウンロードできます

ストレージ アカウントが指定されている場合、パケット キャプチャ ファイルは、次の場所にあるストレージ アカウントに保存されます。

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