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에 붙여넣어 실행합니다. Cloud Shell은 Azure Portal 내에서도 실행할 수 있습니다.

    Azure CLI를 로컬로 설치하여 명령을 실행할 수도 있습니다. Azure CLI를 로컬로 실행하는 경우 az login 명령을 사용하여 Azure에 로그인합니다.

  • 다음과 같은 아웃바운드 TCP 연결이 있는 가상 머신:

    • 포트 443을 통해 스토리지 계정으로
    • 포트 80을 통해 169.254.169.254로
    • 포트 8037을 통해 168.63.129.16으로

참고 항목

  • 해당 지역에 대해 Network Watcher가 사용하도록 설정되지 않은 경우 Azure는 가상 머신 지역에 Network Watcher 인스턴스를 만듭니다. 자세한 내용은 Azure Network Watcher 사용 또는 사용 안 함을 참조하세요.
  • Network Watcher 패킷 캡처를 사용하려면 대상 가상 머신에 Network Watcher 에이전트 VM 확장을 설치해야 합니다. 자세한 내용은 Network Watcher 에이전트 설치를 참조하세요.
  • 필수 조건에 나열된 마지막 두 개의 IP 주소와 포트는 Network Watcher 에이전트를 사용하는 모든 Network Watcher 도구에 공통적으로 적용되며 경우에 따라 변경될 수 있습니다.

네트워크 보안 그룹이 네트워크 인터페이스에 연결되거나 네트워크 인터페이스가 포함된 서브넷에 연결되어 있으면 이전 포트를 통한 아웃바운드 연결을 허용하는 규칙이 있는지 확인합니다. 마찬가지로 네트워크에 사용자 정의 경로를 추가할 때 이전 포트를 통한 아웃바운드 연결을 확인합니다.

Network Watcher 에이전트 설치

1단계

az vm extension set 명령을 실행하여 게스트 가상 머신에 패킷 캡처 에이전트를 설치합니다.

Windows Virtual Machines의 경우:

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 Virtual Machines의 경우:

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단계

이제 패킷 캡처를 만들 준비가 되었습니다. 먼저, 구성할 수 있는 매개 변수를 살펴보겠습니다. 필터는 패킷 캡처에 의해 저장되는 데이터를 제한하는 데 사용할 수 있는 매개 변수 중 하나입니다. 다음 예제에서는 몇 가지 필터를 사용하여 패킷 캡처를 설정합니다. 처음 세 개의 필터는 로컬 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 명령의 출력입니다. 다음 예제는 TimeExceeded StopReason으로 인해 캡처가 중지된 경우입니다.

{
  "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 Storage 또는 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