자습서: Azure Portal을 사용하여 웹 애플리케이션 방화벽이 있는 애플리케이션 게이트웨이 만들기

이 자습서에서는 Azure Portal을 사용하여 WAF(웹 애플리케이션 방화벽)이 있는 애플리케이션 게이트웨이를 만드는 방법을 보여 줍니다. WAF는 OWASP 규칙을 사용하여 애플리케이션을 보호합니다. 이러한 규칙에는 SQL 삽입, 사이트 간 스크립팅 공격 및 세션 하이재킹과 같은 공격으로부터의 보호가 포함됩니다. Application Gateway를 만든 후 올바르게 작동하는지 테스트합니다. Azure Application Gateway를 통해 수신기를 포트에 할당하고, 규칙을 만들고, 백 엔드 풀에 리소스를 추가하여 애플리케이션 웹 트래픽을 특정 리소스로 보냅니다. 간단한 설명을 위해 이 자습서에서는 공용 프런트 엔드 IP 하나, 이 애플리케이션 게이트웨이에 단일 사이트를 호스트하는 기본 수신기 하나, 백 엔드 풀에 사용되는 Linux 가상 머신 두 개, 기본 요청 회람 규칙 하나를 이용하는 간단한 설정을 사용합니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • WAF를 사용하는 애플리케이션 게이트웨이 만들기
  • 백 엔드 서버로 사용되는 가상 머신 만들기
  • 스토리지 계정 만들기 및 진단 구성
  • 애플리케이션 게이트웨이 테스트

Diagram of the Web application firewall example.

참고 항목

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

필수 조건

Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

Azure에 로그인

Azure Portal에 로그인합니다.

애플리케이션 게이트웨이 만들기

  1. Azure Portal의 왼쪽 메뉴에서 리소스 만들기를 선택합니다. 새로 만들기 창이 나타납니다.

  2. 네트워킹을 선택한 다음, 추천 목록에서 Application Gateway를 선택합니다.

기본 사항 탭

  1. 기본 사항 탭에서 다음 애플리케이션 게이트웨이 설정에 대한 값을 입력합니다.

    • 리소스 그룹: 리소스 그룹에 대해 myResourceGroupAG를 선택합니다. 이 리소스 그룹이 없으면 새로 만들기를 선택하여 새로 만듭니다.

    • 애플리케이션 게이트웨이 이름: 애플리케이션 게이트웨이의 이름으로 myAppGateway를 입력합니다.

    • 계층: WAF V2를 선택합니다.

    • WAF 정책: 새로 만들기를 선택하고 새 정책의 이름을 입력한 다음 확인을 선택합니다. 이렇게 하면 관리형 CRS(핵심 규칙 집합)를 사용하여 기본 WAF 정책이 만들어집니다.

      Screenshot of Create new application gateway: Basics tab.

  2. Azure가 사용자가 만든 리소스 간에 통신하려면 가상 네트워크가 필요합니다. 새 가상 네트워크를 만들거나 기존 가상 네트워크를 선택할 수 있습니다. 이 예제에서는 애플리케이션 게이트웨이를 만들면서 새 가상 네트워크를 만듭니다. 별도의 서브넷으로 Application Gateway 인스턴스가 만들어집니다. 이 예제에서는 두 개의 서브넷을 만듭니다. 하나는 애플리케이션 게이트웨이용이고, 다른 하나는 백 엔드 서버용입니다.

    가상 네트워크 구성에서 새로 만들기를 선택하여 새 가상 네트워크를 만듭니다. 가상 네트워크 만들기 창이 열리면 다음 값을 입력하여 가상 네트워크 및 두 개의 서브넷을 만듭니다.

    • 이름: 가상 네트워크 이름에 myVNet을 입력합니다.

    • 서브넷 이름(Application Gateway 서브넷): 서브넷 그리드에 Default라는 서브넷이 표시됩니다. 이 서브넷의 이름을 myAGSubnet으로 변경합니다.
      애플리케이션 게이트웨이 서브넷은 애플리케이션 게이트웨이만 포함할 수 있습니다. 다른 리소스는 허용되지 않습니다.

    • 서브넷 이름(백 엔드 서버 서브넷): 서브넷 그리드의 두 번째 행에서 서브넷 이름 열에 myBackendSubnet을 입력합니다.

    • 주소 범위(백 엔드 서버 서브넷): 서브넷 그리드의 두 번째 행에 myAGSubnet의 주소 범위와 겹치지 않는 주소 범위를 입력합니다. 예를 들어 myAGSubnet의 주소 범위가 10.21.0.0/24인 경우 myBackendSubnet의 주소 범위로 10.21.1.0/24를 입력합니다.

    확인을 선택하여 가상 네트워크 만들기 창을 닫고 가상 네트워크 설정을 저장합니다.

    Screenshot of Create new application gateway: Create virtual network.

  3. 기본 사항 탭에서 다른 설정에 대한 기본값을 적용한 후, 다음: 프런트 엔드를 선택합니다.

프런트 엔드 탭

  1. 프런트 엔드 탭에서 프런트 엔드 IP 주소 형식퍼블릭으로 설정되어 있는지 확인합니다.
    사용 사례에 따라 프런트 엔드 IP를 공용 또는 모두로 구성할 수 있습니다. 이 예제에서는 공용 프런트 엔드 IP를 선택합니다.

    참고 항목

    Application Gateway v2 SKU의 경우 현재 공용모두 프런트 엔드 IP 주소 형식이 지원됩니다. 프라이빗 프런트 엔드 IP 구성만 현재 지원되지 않습니다.

  2. 공용 IP 주소에 대해 새로 추가를 선택하고 공용 IP 주소 이름으로 myAGPublicIPAddress를 입력한 다음, 확인을 선택합니다.

    Screenshot of Create new application gateway: Frontends.

  3. 완료되면 다음: 백 엔드를 선택합니다.

백 엔드 탭

백 엔드 풀은 요청을 처리하는 백 엔드 서버로 요청을 라우팅하는 데 사용됩니다. 백 엔드 풀은 NIC, 가상 머신 확장 집합, 공용 IP, 내부 IP, FQDN(정규화된 도메인 이름) 및 다중 테넌트 백 엔드(예: Azure App Service)로 구성될 수 있습니다. 이 예제에서는 애플리케이션 게이트웨이가 있는 빈 백 엔드 풀을 만든 다음, 나중에 백 엔드 대상을 백 엔드 풀에 추가합니다.

  1. 백 엔드 탭에서 백 엔드 풀 추가를 선택합니다.

  2. 열리는 백 엔드 풀 추가 창에서 다음 값을 입력하여 빈 백 엔드 풀을 만듭니다.

    • 이름: 백 엔드 풀의 이름으로 myBackendPool을 입력합니다.
    • 대상 없이 백 엔드 풀 추가: 를 선택하여 대상이 없는 백 엔드 풀을 만듭니다. 애플리케이션 게이트웨이를 만든 후에 백 엔드 대상을 추가합니다.
  3. 백 엔드 풀 추가 창에서 추가를 선택하여 백 엔드 풀 구성을 저장하고 백 엔드 탭으로 돌아갑니다.

    Screenshot of Create new application gateway: Backends.

  4. 백 엔드 탭에서 다음: 구성을 선택합니다.

구성 탭

구성 탭에서 라우팅 규칙을 사용하여 만든 프런트 엔드 및 백 엔드 풀을 연결합니다.

  1. 라우팅 규칙 열에서 라우팅 규칙 추가를 선택합니다.

  2. 열리는 라우팅 규칙 추가 창에서 규칙 이름으로 myRoutingRule을 입력합니다.

  3. 우선 순위에 우선 순위 번호를 입력합니다.

  4. 라우팅 규칙에는 수신기가 필요합니다. 라우팅 규칙 추가 창 내의 수신기 탭에서 수신기에 대해 다음 값을 입력합니다.

    • 수신기 이름: 수신기 이름으로 myListener를 입력합니다.

    • 프런트 엔드 IP: 공용을 선택하여 프런트 엔드에 대해 만든 공용 IP를 선택합니다.

      수신기 탭에서 다른 설정에 대해 기본값을 그대로 적용한 다음, 백 엔드 대상 탭을 선택하여 나머지 라우팅 규칙을 구성합니다.

    Screenshot showing Create new application gateway: listener.

  5. 백 엔드 대상 탭에서 백 엔드 대상으로 myBackendPool을 선택합니다.

  6. 백 엔드 설정의 경우 새로 추가를 선택하여 새 백 엔드 설정을 만듭니다. 이 설정은 회람 규칙의 동작을 결정합니다. 열리는 백 엔드 추가 설정 창에서 백 엔드 설정 이름으로 myBackendSetting을 입력합니다. 이 창에서 다른 설정에 대해 기본값을 그대로 적용한 다음, 추가를 선택하여 라우팅 규칙 추가 창으로 돌아갑니다.

    Screenshot showing Create new application gateway, Backend setting.

  7. 라우팅 규칙 추가 창에서 추가를 선택하여 라우팅 규칙을 저장하고 구성 탭으로 돌아옵니다.

    Screenshot showing Create new application gateway: routing rule.

  8. 완료되면 다음: 태그를 선택하고 다음: 리뷰 + 만들기를 클릭합니다.

리뷰 + 만들기 탭

리뷰 + 만들기 탭에서 설정을 검토한 다음, 만들기를 선택하여 가상 네트워크, 공용 IP 주소 및 애플리케이션 게이트웨이를 만듭니다. Azure가 애플리케이션 게이트웨이를 만들 때까지 몇 분 정도 걸릴 수 있습니다.

배포가 성공적으로 완료될 때까지 기다렸다가 다음 섹션으로 이동합니다.

백 엔드 대상 추가

이 예제에서는 가상 머신을 대상 백 엔드로 사용합니다. 기존 가상 머신을 사용해도 되고 새로 만들어도 됩니다. Azure에서 애플리케이션 게이트웨이의 백 엔드 서버로 사용할 두 개의 가상 머신을 만듭니다.

이 작업을 수행하려면 다음이 필요합니다.

  1. 백 엔드 서버로 사용할 두 개의 새 Linux VM인 myVMmyVM2를 만듭니다.
  2. 애플리케이션 게이트웨이가 성공적으로 만들어졌는지 확인하기 위해 가상 머신에 NGINX를 설치합니다.
  3. 백 엔드 서버를 백 엔드 풀에 추가합니다.

가상 머신 만들기

  1. Azure Portal에서 리소스 만들기를 선택합니다. 리소스 만들기 창이 나타납니다.

  2. 가상 머신에서 만들기를 선택합니다.

  3. 기본 사항 탭에서 다음 가상 머신 설정의 값을 입력합니다.

    • 리소스 그룹: 리소스 그룹 이름으로 myResourceGroupAG를 선택합니다.
    • 가상 머신 이름: 가상 머신 이름으로 myVM을 입력합니다.
    • 이미지: Ubuntu Server 20.04 LTS - Gen2.
    • 인증 유형: 암호
    • 사용자 이름: 관리자 사용자 이름으로 사용할 이름을 입력합니다.
    • 암호: 관리자 암호의 암호를 입력합니다.
    • 공용 인바운드 포트: 없음을 선택합니다.
  4. 다른 기본값을 적용한 후, 다음: 디스크를 선택합니다.

  5. 디스크 탭 기본값을 적용한 후, 다음: 네트워킹을 선택합니다.

  6. 네트워킹 탭에서 가상 네트워크myVNet이 선택되었고 서브넷myBackendSubnet으로 설정되었는지 확인합니다.

  7. 공용 IP에 대해 없음을 선택합니다.

  8. 다른 기본값을 적용한 후, 다음: 관리를 선택합니다.

  9. 다음: 모니터링을 선택하고 부팅 진단사용하지 않도록 설정합니다. 나머지는 기본값으로 두고 검토 + 만들기를 선택합니다.

  10. 검토 + 만들기 탭에서 설정을 검토하고, 유효성 검사 오류를 수정하고, 만들기를 선택합니다.

  11. 가상 머신 만들기가 완료되기를 기다렸다가 계속합니다.

테스트를 위해 NGINX 설치

이 예에서는 Azure가 애플리케이션 게이트웨이를 성공적으로 만들었는지만 확인할 목적으로 가상 머신에 NGINX를 설치합니다.

  1. Bash Cloud Shell을 엽니다. 이렇게 하려면 Azure Portal의 상단 탐색 모음에서 Cloud Shell 아이콘을 선택한 다음 드롭다운 목록에서 Bash를 선택합니다.

    Screenshot showing the Bash Cloud Shell.

  2. 다음 명령을 실행하여 가상 머신에 NGINX를 설치합니다.

     az vm extension set \
     --publisher Microsoft.Azure.Extensions \
     --version 2.0 \
     --name CustomScript \
     --resource-group myResourceGroupAG \
     --vm-name myVM \
     --settings '{ "fileUris": ["https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/install_nginx.sh"], "commandToExecute": "./install_nginx.sh" }'
    
  3. 이전에 완료한 다음 단계에서 두 번째 가상 머신을 만들고 NGINX를 설치합니다. 가상 머신 이름과 cmdlet의 --vm-name 설정에 myVM2를 사용합니다.

백 엔드 풀에 백 엔드 서버 추가

  1. 모든 리소스를 선택한 다음, myAppGateway를 선택합니다.

  2. 왼쪽 메뉴에서 백 엔드 풀을 선택합니다.

  3. myBackendPool을 선택합니다.

  4. 대상 유형 아래의 드롭다운 목록에서 가상 머신을 선택합니다.

  5. 대상 아래의 드롭다운 목록에서 myVM에 연결된 네트워크 인터페이스를 선택합니다.

  6. myVM2에 대해 반복합니다.

    Add backend servers

  7. 저장을 선택합니다.

  8. 배포가 완료될 때까지 기다렸다가 다음 단계로 진행합니다.

애플리케이션 게이트웨이 테스트

애플리케이션 게이트웨이를 만들기 위해 반드시 NGINX가 필요한 것은 아니지만, Azure가 애플리케이션 게이트웨이를 성공적으로 만들었는지 확인하기 위해 설치했습니다. 웹 서비스를 사용하여 애플리케이션 게이트웨이를 테스트합니다.

  1. 개요 페이지에서 애플리케이션 게이트웨이에 대한 공용 IP 주소를 찾습니다. Screenshot of Application Gateway public IP address on the Overview page.

    또는 모든 리소스를 선택하고, 검색 상자에 myAGPublicIPAddress를 입력한 다음, 검색 결과에서 선택할 수도 있습니다. Azure는 공용 IP 주소를 개요 페이지에 표시합니다.

  2. 공용 IP 주소를 복사하여 브라우저의 주소 표시줄에 붙여넣습니다.

  3. 응답을 확인합니다. 응답이 유효하면 애플리케이션 게이트웨이가 성공적으로 만들어졌으며 백 엔드에 성공적으로 연결할 수 있다는 의미입니다.

    Screenshot of testing the application gateway.

리소스 정리

애플리케이션 게이트웨이로 만든 리소스가 더 이상 필요 없으면 리소스 그룹을 제거합니다. 리소스 그룹을 제거하면 애플리케이션 게이트웨이 및 모든 관련 리소스도 함께 제거됩니다.

리소스 그룹을 제거하려면:

  1. Azure Portal의 왼쪽 메뉴에서 리소스 그룹을 선택합니다.
  2. 리소스 그룹 페이지의 목록에서 myResourceGroupAG를 검색하여 선택합니다.
  3. 리소스 그룹 페이지에서 리소스 그룹 삭제를 선택합니다.
  4. 리소스 그룹 이름 입력myResourceGroupAG를 입력한 다음, 삭제를 선택합니다.

다음 단계