자습서: Azure Virtual Network NAT 게이트웨이를 사용하여 Azure Functions 아웃바운드 IP 제어

가상 NAT(Network Address Translation)는 가상 네트워크에 대한 아웃바운드 전용 인터넷 연결을 간소화합니다. 서브넷에 구성되는 경우 모든 아웃바운드 연결에서 지정된 고정 공용 IP 주소를 사용합니다. NAT는 IP 주소 허용 목록을 보안 조치로 사용하는 타사 서비스를 사용해야 하는 앱에 유용할 수 있습니다. 자세히 알아보려면 Azure NAT Gateway란?을 참조하세요.

이 자습서에서는 NAT 게이트웨이를 사용하여 HTTP 트리거 함수에서 아웃바운드 트래픽을 라우팅하는 방법을 보여 줍니다. 이 함수를 사용하면 자체의 아웃바운드 IP 주소를 확인할 수 있습니다. 이 자습서에서 다음을 수행합니다.

  • 가상 네트워크 만들기
  • 프리미엄 플랜 함수 앱 만들기
  • 공용 IP 주소 만들기
  • NAT 게이트웨이 만들기
  • NAT 게이트웨이를 통해 아웃바운드 트래픽을 라우팅하도록 함수 앱 구성

토폴로지

다음 다이어그램에서는 만드는 솔루션의 아키텍처를 보여 줍니다.

UI for NAT gateway integration

프리미엄 플랜에서 실행되는 함수는 VNet 통합 기능을 포함하는 Azure App Service의 웹앱과 동일한 호스팅 기능을 제공합니다. 문제 해결 및 고급 구성을 포함하여 VNet 통합에 대한 자세한 내용은 Azure 가상 네트워크에 앱 통합을 참조하세요.

필수 조건

이 자습서에서는 IP 주소 지정 및 서브넷 구성을 이해하는 것이 중요합니다. 주소 지정 및 서브넷 구성의 기본 사항을 설명하는 이 문서로 시작할 수 있습니다. 온라인에서 더 많은 문서와 비디오를 사용할 수 있습니다.

Azure 구독이 아직 없는 경우 시작하기 전에 무료 계정을 만듭니다.

이미 Azure 가상 네트워크와 Functions 통합 자습서를 완료한 경우 HTTP 트리거 함수 만들기로 건너뛸 수 있습니다.

가상 네트워크 만들기

  1. Azure Portal 메뉴에서 리소스 만들기를 선택합니다. Azure Marketplace에서 네트워킹>가상 네트워크를 선택합니다.

  2. 가상 네트워크 만들기에서 다음 표에서 표시한 대로 지정된 설정을 입력하거나 선택합니다.

    설정
    Subscription 구독을 선택합니다.
    Resource group 새로 만들기를 선택하고 myResourceGroup을 입력한 다음, 확인을 선택합니다.
    이름 myResourceGroup-vnet을 입력합니다.
    위치 미국 동부를 선택합니다.
  3. 완료되면 다음: IP 주소를 선택하고, IPv4 주소 공간에 대해 10.10.0.0/16을 입력합니다.

  4. 서브넷 추가를 선택한 다음, 서브넷 이름에 대해 Tutorial-Net을 입력하고, 서브넷 주소 범위에 대해 10.10.1.0/24를 입력합니다.

    IP Addresses tab for creating a vnet

  5. 추가를 선택한 다음, 검토 + 만들기를 선택합니다. 나머지 항목은 기본값으로 유지하고 만들기를 선택합니다.

  6. 가상 네트워크 만들기에서 만들기를 선택합니다.

다음으로, 프리미엄 플랜에서 함수 앱을 만듭니다. 이 플랜은 가상 네트워크 통합을 지원하는 동시에 서버리스 크기 조정을 제공합니다.

프리미엄 플랜에서 함수 앱 만들기

이 자습서에서는 프리미엄 플랜에서 함수 앱을 만드는 방법을 보여 줍니다. 전용(App Service) 플랜을 사용할 때도 동일한 기능을 사용할 수 있습니다.

참고 항목

이 자습서에 가장 적합한 환경을 위해 런타임 스택으로 .NET을 선택하고, 운영 체제로 Windows를 선택합니다. 또한 함수 앱을 가상 네트워크와 동일한 지역에 만듭니다.

  1. Azure Portal 메뉴 또는 페이지에서 리소스 만들기를 선택합니다.

  2. 새로 만들기 페이지에서 컴퓨팅>함수 앱을 선택합니다.

  3. 기본 사항 페이지에서 함수 앱 설정을 다음 표에서 지정한 대로 사용합니다.

    설정 제안 값 설명
    구독 구독 이 새 함수 앱이 만들어질 구독입니다.
    리소스 그룹 myResourceGroup 함수 앱을 만들 새 리소스 그룹의 이름입니다.
    함수 앱 이름 전역적으로 고유한 이름 새 함수 앱을 식별하는 이름입니다. 유효한 문자는 a-z(대/소문자 구분 안 함), 0-9-입니다.
    게시 코드 코드 파일 또는 Docker 컨테이너를 게시하는 옵션입니다.
    런타임 스택 기본 언어 즐겨찾는 함수 프로그래밍 언어를 지원하는 런타임을 선택합니다. 현재 Python 개발에는 포털 내 편집이 지원되지 않습니다.
    지역 기본 지역 여러분과 가까운 또는 함수가 액세스하는 다른 서비스와 가까운 지역을 선택합니다.
  4. 다음: 호스팅을 선택합니다. 호스팅 페이지에서 다음 설정을 입력합니다.

    설정 제안 값 설명
    스토리지 계정 전역적으로 고유한 이름 함수 앱에서 사용하는 스토리지 계정을 만듭니다. Storage 계정 이름은 3자에서 24자 사이여야 하고 숫자 및 소문자만 포함할 수 있습니다. 기존 계정을 사용할 수도 있습니다. 여기서는 스토리지 계정 요구 사항을 충족해야 합니다.
    운영 체제 기본 설정 운영 체제 운영 체제는 런타임 스택 선택에 따라 미리 선택되지만 필요한 경우 설정을 변경할 수 있습니다. Python은 Linux에서만 지원됩니다. 포털 내 편집은 Windows에서만 지원됩니다.
    계획 Premium 함수 앱에 리소스가 할당되는 방법을 정의하는 호스팅 계획입니다. 프리미엄을 선택합니다. 기본적으로 새 App Service 요금제가 만들어집니다. 기본 SKU 및 크기EP1입니다. 여기서 EP는 탄력적 프리미엄을 의미합니다. 자세한 내용은 프리미엄 SKU 목록을 참조하세요.
    프리미엄 계획에서 JavaScript 함수를 실행 중인 경우 vCPU 수가 더 작은 인스턴스를 선택해야 합니다. 자세한 내용은 단일 코어 프리미엄 계획 선택을 참조하세요.
  5. 다음: 모니터링을 선택합니다. 모니터링 페이지에서 다음 설정을 입력합니다.

    설정 제안 값 설명
    Application Insights 기본값 가장 가까운 지원 영역에 동일한 앱 이름의 Application Insight 리소스를 만듭니다. 이 설정을 확장하면 새 리소스 이름을 변경하거나 데이터를 저장하려는 Azure 지리적 위치에서 다른 위치를 선택합니다.
  6. 검토 + 만들기를 선택하여 앱 구성 선택을 검토합니다.

  7. 검토 + 만들기 페이지에서 설정을 검토한 다음, 만들기를 선택하여 함수 앱을 프로비저닝하고 배포합니다.

  8. 포털의 오른쪽 위 모서리에 있는 알림 아이콘을 선택하고 배포 성공 메시지를 확인합니다.

  9. 리소스로 이동을 선택하여 함수 앱을 봅니다. 대시보드에 고정을 선택할 수도 있습니다. 고정하면 대시보드에서 이 함수 앱 리소스로 쉽게 돌아올 수 있습니다.

    Deployment notification

가상 네트워크에 함수 앱 연결

이제 함수 앱을 가상 네트워크에 연결할 수 있습니다.

  1. 함수 앱의 왼쪽 메뉴에서 네트워킹을 선택한 다음, VNet 통합 아래에서 구성하려면 여기를 클릭을 선택합니다.

    Choose networking in the function app

  2. VNET 통합 페이지에서 VNet 추가를 선택합니다.

  3. 네트워크 기능 상태에서 이미지 아래의 표에 나와 있는 설정을 사용합니다.

    Define the function app virtual network

    설정 제안 값 설명
    Virtual Network MyResourceGroup-vnet 이 가상 네트워크는 이전에 만든 가상 네트워크입니다.
    서브넷 새 서브넷 만들기 함수 앱에서 사용할 서브넷을 가상 네트워크에 만듭니다. 빈 서브넷을 사용하도록 VNet 통합을 구성해야 합니다.
    서브넷 이름 Function-Net 새 서브넷의 이름입니다.
    가상 네트워크 주소 블록 10.10.0.0/16 하나의 주소 블록만 정의해야 합니다.
    서브넷 주소 블록 10.10.2.0/24 서브넷 크기는 프리미엄 플랜 함수 앱에서 확장할 수 있는 총 인스턴스 수를 제한합니다. 이 예에서는 254개의 사용 가능한 호스트 주소가 있는 /24 서브넷을 사용합니다. 이 서브넷은 과도하게 프로비저닝되지만 계산하기 쉽습니다.
  4. 확인을 선택하여 바인딩을 추가합니다. VNet 통합네트워크 기능 상태 페이지를 닫아 함수 앱 페이지로 돌아갑니다.

이제 함수 앱에서 가상 네트워크에 액세스할 수 있습니다. 연결을 사용하도록 설정하면 vnetrouteallenabled 사이트 설정이 1로 설정됩니다. 이 사이트 설정 또는 레거시 WEBSITE_VNET_ROUTE_ALL 애플리케이션 설정이 1로 설정되어야 합니다.

다음으로 HTTP 트리거 함수를 함수 앱에 추가합니다.

HTTP 트리거 함수 만들기

  1. Functions 창의 왼쪽 메뉴에서 Functions를 선택한 다음, 맨 위 메뉴에서 추가를 선택합니다.

  2. 새 함수 창에서 Http 트리거를 선택하고, 새 함수에 대한 기본 이름을 적용하거나 새 이름을 입력합니다.

  3. 코드 + 테스트에서 템플릿 생성 C# 스크립트(.csx) 코드를 다음 코드로 바꿉니다.

    #r "Newtonsoft.Json"
    
    using System.Net;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Primitives;
    using Newtonsoft.Json;
    
    public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
    
        var client = new HttpClient();
        var response = await client.GetAsync(@"https://ifconfig.me");
        var responseMessage = await response.Content.ReadAsStringAsync();
    
        return new OkObjectResult(responseMessage);
    }
    

    이 코드는 호출자의 IP 주소를 반환하는 외부 웹 사이트(이 경우에는 이 함수)를 호출합니다. 이 메서드를 사용하면 함수 앱에서 사용하는 아웃바운드 IP 주소를 쉽게 확인할 수 있습니다.

이제 함수를 실행하고 현재 아웃바운드 IP를 확인할 준비가 되었습니다.

현재 아웃바운드 IP 확인

이제 함수를 실행할 수 있습니다. 그러나 먼저 포털을 체크 인하고, 함수 앱에서 사용하는 아웃바운드 IP를 확인합니다.

  1. 함수 앱에서 속성을 선택하고, 아웃바운드 IP 주소 필드를 검토합니다.

    View function app outbound IP addresses

  2. 이제 HTTP 트리거 함수로 돌아가서 코드 + 테스트, 테스트/실행을 차례로 선택합니다.

    Test function

  3. 실행을 선택하여 함수를 실행한 다음, 출력으로 전환합니다.

    Test function output

  4. HTTP 응답 본문의 IP 주소가 앞에서 확인한 아웃바운드 IP 주소의 값 중 하나인지 확인합니다.

이제 공용 IP를 만들고, NAT 게이트웨이를 사용하여 이 아웃바운드 IP 주소를 수정할 수 있습니다.

공용 IP 만들기

  1. 리소스 그룹에서 추가를 선택하고, Azure Marketplace에서 공용 IP 주소를 검색하고, 만들기를 선택합니다. 이미지 아래의 표에서 설명하는 설정을 사용합니다.

    Create Public IP Address

    설정 제안 값
    IP 버전 IPv4
    SKU 표준
    계층 Regional
    이름 Outbound-IP
    구독 구독이 표시되는지 확인
    리소스 그룹 myResourceGroup(또는 리소스 그룹에 할당한 이름)
    위치 미국 동부(또는 다른 리소스에 할당한 위치)
    가용성 영역 영역 없음
  2. 만들기를 선택하여 배포를 제출합니다.

  3. 배포가 완료되면 새로 만든 공용 IP 주소 리소스로 이동하여 개요에서 IP 주소를 확인합니다.

    View Public IP Address

NAT 게이트웨이 만들기

이제 NAT 게이트웨이를 만들어 보겠습니다. 이전의 가상 네트워킹 자습서에서 시작할 때 Function-Net은 제안된 서브넷 이름이고, MyResourceGroup-vnet은 해당 자습서에서 제안된 가상 네트워크 이름이었습니다.

  1. 리소스 그룹에서 추가를 선택하고, Azure Marketplace에서 NAT 게이트웨이를 검색하고, 만들기를 선택합니다. 이미지 아래의 표에 나와 있는 설정을 사용하여 기본 탭을 채웁니다.

    Create NAT gateway

    설정 제안 값
    구독 구독
    리소스 그룹 myResourceGroup(또는 리소스 그룹에 할당한 이름)
    NAT 게이트웨이 이름 myNatGateway
    지역 미국 동부(또는 다른 리소스에 할당한 위치)
    가용성 영역 없음
  2. 다음: 아웃바운드 IP를 선택합니다. 공용 IP 주소 필드에서 이전에 만든 공용 IP 주소를 선택합니다. 공용 IP 접두사를 선택하지 않은 상태로 둡니다.

  3. 다음: 서브넷을 선택합니다. 가상 네트워크 필드 및 Function-Net 서브넷에서 myResourceGroup-vnet 리소스를 선택합니다.

    Select subnet

  4. 검토 + 만들기, 만들기를 차례로 선택하여 배포를 제출합니다.

배포가 완료되면 NAT 게이트웨이가 트래픽을 함수 앱 서브넷에서 인터넷으로 라우팅할 준비가 됩니다.

새 아웃바운드 IP 확인

이전 단계를 반복하여 함수를 다시 실행합니다. 이제 함수 출력에 표시된 NAT에서 구성한 아웃바운드 IP 주소가 표시됩니다.

리소스 정리

이 자습서를 완료하기 위해 리소스를 만들었습니다. 이러한 리소스에 대한 요금이 계정 상태서비스 가격 책정에 따라 청구될 수 있습니다. 추가 비용이 발생하지 않도록 방지하려면 더 이상 필요하지 않은 리소스를 삭제합니다.

  1. Azure Portal에서 리소스 그룹 페이지로 이동합니다.

    함수 앱 페이지에서 해당 페이지로 이동하려면 개요 탭을 선택한 다음, 리소스 그룹 아래의 링크를 선택합니다.

    Screenshot that shows select the resource group to delete from the function app page.

    대시보드에서 해당 페이지로 이동하려면 리소스 그룹을 선택한 다음, 이 문서에 사용한 리소스 그룹을 선택합니다.

  2. 리소스 그룹 페이지에서 포함된 리소스 목록을 검토하고 삭제하려는 항목인지 확인합니다.

  3. 리소스 그룹 삭제를 선택하고 지시를 따릅니다.

    삭제하는 데 몇 분 정도 걸릴 수 있습니다. 완료되면 알림이 잠시 표시됩니다. 또한 페이지 위쪽의 종 모양 아이콘을 선택하여 알림을 확인할 수도 있습니다.

다음 단계