빠른 시작: ARM(Azure Resource Manager) 템플릿을 사용하여 Azure Network Watcher NSG 흐름 로그 구성

이 빠른 시작에서는 ARM(Azure Resource Manager) 템플릿 및 Azure PowerShell을 사용하여 NSG 흐름 로그를 사용하도록 설정하는 방법을 알아봅니다. 자세한 내용은 Azure Resource Manager란 무엇인가요?NSG 흐름 로그 개요를 참조하세요.

Azure Resource Manager 템플릿은 프로젝트의 인프라 및 구성을 정의하는 JSON(JavaScript Object Notation) 파일입니다. 이 템플릿은 선언적 구문을 사용합니다. 배포를 만들기 위한 프로그래밍 명령 시퀀스를 작성하지 않고 의도한 배포를 설명합니다.

NSG 흐름 로그 개체의 속성에 대한 개요부터 시작합니다. 샘플 템플릿을 제공합니다. 그런 다음, 로컬 Azure PowerShell 인스턴스를 사용하여 템플릿을 배포합니다.

환경이 필수 구성 요소를 충족하고 ARM 템플릿 사용에 익숙한 경우 Azure에 배포 단추를 선택합니다. 그러면 Azure Portal에서 템플릿이 열립니다.

Azure에 Resource Manager 템플릿을 배포하는 단추입니다.

필수 조건

활성 구독이 있는 Azure 계정. 구독이 없으면 시작하기 전에 계정을 만드세요.

템플릿 검토

이 빠른 시작에서 사용되는 템플릿은 Azure 빠른 시작 템플릿에서 가져온 것입니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.9.1.41621",
      "templateHash": "14580725600461536175"
    }
  },
  "parameters": {
    "networkWatcherName": {
      "type": "string",
      "defaultValue": "[format('NetworkWatcher_{0}', parameters('location'))]",
      "metadata": {
        "description": "Name of the Network Watcher attached to your subscription. Format: NetworkWatcher_<region_name>"
      }
    },
    "flowLogName": {
      "type": "string",
      "defaultValue": "FlowLog1",
      "metadata": {
        "description": "Name of your Flow log resource"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Region where you resources are located"
      }
    },
    "existingNSG": {
      "type": "string",
      "metadata": {
        "description": "Resource ID of the target NSG"
      }
    },
    "retentionDays": {
      "type": "int",
      "defaultValue": 0,
      "maxValue": 365,
      "minValue": 0,
      "metadata": {
        "description": "Retention period in days. Default is zero which stands for permanent retention. Can be any Integer from 0 to 365"
      }
    },
    "flowLogsVersion": {
      "type": "int",
      "defaultValue": 2,
      "allowedValues": [
        1,
        2
      ],
      "metadata": {
        "description": "FlowLogs Version. Correct values are 1 or 2 (default)"
      }
    },
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    }
  },
  "variables": {
    "storageAccountName": "[format('flowlogs{0}', uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    },
    {
      "type": "Microsoft.Network/networkWatchers",
      "apiVersion": "2022-01-01",
      "name": "[parameters('networkWatcherName')]",
      "location": "[parameters('location')]",
      "properties": {}
    },
    {
      "type": "Microsoft.Network/networkWatchers/flowLogs",
      "apiVersion": "2022-01-01",
      "name": "[format('{0}/{1}', parameters('networkWatcherName'), parameters('flowLogName'))]",
      "location": "[parameters('location')]",
      "properties": {
        "targetResourceId": "[parameters('existingNSG')]",
        "storageId": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
        "enabled": true,
        "retentionPolicy": {
          "days": "[parameters('retentionDays')]",
          "enabled": true
        },
        "format": {
          "type": "JSON",
          "version": "[parameters('flowLogsVersion')]"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
      ]
    }
  ]
}

다음 리소스는 템플릿에 정의되어 있습니다.

앞의 샘플에서 강조 표시된 코드는 NSG 흐름 로그 리소스 정의를 보여 줍니다.

템플릿 배포

이 자습서에서는 흐름 로깅을 사용할 수 있는 기존 리소스 그룹 및 NSG가 있는 것으로 가정합니다.

이 문서에 표시된 모든 예제 템플릿을 로컬에 azuredeploy.json으로 저장할 수 있습니다. 구독의 유효한 리소스를 가리키도록 속성 값을 업데이트합니다.

템플릿을 배포하려면 PowerShell에서 다음 명령을 실행합니다.

$context = Get-AzSubscription -SubscriptionId <subscription Id>
Set-AzContext $context
New-AzResourceGroupDeployment -Name EnableFlowLog -ResourceGroupName NetworkWatcherRG `
    -TemplateFile "C:\MyTemplates\azuredeploy.json"

참고 항목

이러한 명령은 네트워크 보안 그룹을 포함하는 리소스 그룹이 아닌 NetworkWatcherRG 리소스 그룹에 리소스를 배포합니다.

배포 유효성 검사

배포가 성공했는지 확인하는 두 가지 방법이 있습니다.

  • PowerShell 콘솔에서 ProvisioningStateSucceeded로 표시되는지 확인합니다.
  • NSG 흐름 로그 포털 페이지로 이동하여 변경 내용을 확인합니다.

배포에 문제가 있는 경우 Azure Resource Manager를 사용한 일반적인 Azure 배포 오류 해결을 참조하세요.

리소스 정리

전체 배포 모드를 사용하여 Azure 리소스를 삭제할 수 있습니다. 흐름 로그 리소스를 삭제하려면 삭제하려는 리소스를 포함하지 않고 전체 모드로 배포를 지정합니다. 전체 배포 모드에 대해 읽어보세요.

Azure Portal에서 흐름 로그를 사용하지 않도록 설정하거나 삭제할 수도 있습니다.

  1. 포털 맨 위에 있는 검색 상자에 Network Watcher를 입력합니다. 검색 결과에서 Network Watcher를 선택합니다.

  2. 로그에서 흐름 로그를 선택합니다.

  3. Network Watcher | 흐름 로그에서 삭제할 흐름 로그의 확인란을 선택합니다.

  4. 사용 안 함 또는 삭제를 선택합니다. 자세한 내용은 흐름 로그 사용 안 함 또는 흐름 로그 삭제를 참조하세요.

이 빠른 시작에서는 ARM 템플릿을 사용하여 NSG 흐름 로그를 사용하도록 설정하는 방법을 알아보았습니다. 다음으로, 트래픽 분석을 사용하여 NSG 흐름 데이터를 시각화하는 방법을 알아봅니다.