다음을 통해 공유


Azure App Service 액세스 제한 설정

참고 항목

2024년 6월 1일부터, 새로 만들어진 모든 App Service 앱에는 명명 규칙 <app-name>-<random-hash>.<region>.azurewebsites.net을 사용하여 고유한 기본 호스트 이름을 생성할 수 있는 옵션이 제공됩니다. 기존 앱 이름은 변경되지 않은 상태로 유지됩니다.

예: myapp-ds27dh7271aah175.westus-01.azurewebsites.net

자세한 내용은 App Service 리소스의 고유 기본 호스트 이름을 참조하세요.

액세스 제한을 설정하여 앱에 대한 네트워크 액세스를 제어하는 ​​우선 순위가 지정된 허용/거부 목록을 정의할 수 있습니다. 이 목록에는 IP 주소나 Azure Virtual Network 서브넷이 포함될 수 있습니다. 하나 이상의 항목이 있는 경우 목록 끝에 암시적 모두 거부가 표시됩니다. 액세스 제한에 대해 자세히 알아보려면 액세스 제한 개요로 이동합니다.

액세스 제한 기능은 모든 Azure App Service 호스팅 워크로드와 함께 작동합니다. 워크로드에는 웹앱, API 앱, Linux 앱, Linux 사용자 정의 컨테이너 및 Functions가 포함될 수 있습니다.

앱에 대한 요청이 수행될 경우 액세스 제한 목록 규칙과 비교하여 FROM 주소를 평가합니다. FROM 주소가 Microsoft.Web의 서비스 엔드포인트로 구성된 서브넷에 있는 경우 원본 서브넷을 액세스 제한 목록의 가상 네트워크 규칙과 비교합니다. 주소가 목록의 규칙을 기준으로 허용되지 않을 경우 서비스는 HTTP 403 상태 코드로 답변합니다.

액세스 제한 기능은 코드가 실행되는 작업자 역할의 업스트림에 해당하는 App Service 프런트 엔드 역할에 구현됩니다. 따라서 액세스 제한은 사실상 네트워크 ACL(액세스 제어 목록)입니다.

Azure 가상 네트워크에서 웹앱에 대한 액세스를 제한하는 기능은 서비스 엔드포인트 를 사용합니다. 서비스 엔드포인트를 사용하면 선택한 서브넷에서 다중 테넌트 서비스에 대한 액세스를 제한할 수 있습니다. App Service Environment에서 호스트하는 앱에 대한 트래픽을 제한하는 것은 작동하지 않습니다. App Service Environment에 있는 경우 IP 주소 규칙을 적용하여 해당 앱에 대한 액세스를 제어할 수 있습니다.

참고 항목

서비스 엔드포인트는 네트워킹 측과 사용으로 설정되는 Azure 서비스 모두에서 사용으로 설정되어야 합니다. 서비스 엔드포인트를 지원하는 Azure 서비스 목록은 Virtual Network 서비스 엔드포인트를 참조하세요.

액세스 제한 흐름 다이어그램.

포털에서 액세스 제한 규칙 관리

앱에 액세스 제한 규칙을 추가하려면 다음 단계를 수행합니다.

  1. Azure Portal에 로그인합니다.

  2. 액세스 제한을 추가하려는 앱을 선택합니다.

  3. 왼쪽 메뉴에서 네트워킹을 선택합니다.

  4. 네트워킹 페이지의 인바운드 트래픽 구성에서 공용 네트워크 액세스 설정을 선택합니다.

    Azure Portal의 App Service 네트워킹 옵션 창 스크린샷.

  5. 액세스 제한 페이지에서 앱에 정의된 액세스 제한 규칙의 목록을 검토합니다.

    선택한 앱에 정의된 액세스 제한 규칙 목록을 보여 주는 Azure Portal의 액세스 제한 페이지 스크린샷.

    목록에는 앱에 적용되는 현재 제한 사항이 모두 표시됩니다. 앱에 가상 네트워크 제한이 있는 경우 이 테이블에는 서비스 엔드포인트가 Microsoft.Web에 사용하도록 설정되어 있는지 표시됩니다. 앱에 제한이 정의되지 않고 불일치 규칙이 ‘거부’로 설정되어 있지 않은 경우 어디서나 앱에 액세스할 수 있습니다.

사용 권한

Azure Portal이나 CLI를 통해 또는 사이트 구성 속성을 직접 설정할 때 액세스 제한을 구성하려면 서브넷이나 상위 수준에 대해 다음과 같은 역할 기반 액세스 제어 권한이 있습니다.

작업 설명
Microsoft.Web/sites/config/read 웹앱 구성 설정을 가져옵니다.
Microsoft.Web/sites/config/write 웹앱 구성 설정을 업데이트합니다.
Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action* 스토리지 계정 또는 SQL 데이터베이스 같은 리소스를 서브넷에 조인합니다.
Microsoft.Web/sites/write** 웹앱 설정 업데이트

*가상 네트워크(서비스 엔드포인트) 규칙을 추가할 때만 필요합니다.

**Azure Portal을 통해 액세스 제한을 업데이트하는 경우에만 필요합니다.

서비스 엔드포인트 기반 규칙을 추가하고 가상 네트워크가 앱과 다른 구독에 있는 경우 가상 네트워크가 있는 구독이 Microsoft.Web 리소스 공급자에 등록되어 있는지 확인해야 합니다. 이 설명서에 따라 공급자를 명시적으로 등록할 수 있지만 구독에서 첫 번째 웹앱을 만들 때 자동으로 등록되기도 합니다.

액세스 제한 규칙 추가

앱에 액세스 제한 규칙을 추가하려면 액세스 제한 페이지에서 추가를 선택합니다. 저장해야만 규칙이 적용됩니다.

규칙은 우선 순위 열의 가장 작은 번호부터 우선적으로 적용됩니다. 불일치 규칙을 구성하지 않으면 단일 규칙을 추가해도 암시적 모두 거부가 적용됩니다.

액세스 제한 추가 창에서 규칙을 만들 때 다음을 수행합니다.

  1. 작업에서 허용 또는 거부를 선택합니다.

    ‘액세스 제한 추가’ 창의 스크린샷.

  2. 선택적으로 규칙의 이름과 설명을 입력합니다.

  3. 우선 순위 상자에서 우선 순위 값을 입력합니다.

  4. 형식 드롭다운 목록에서 규칙의 형식을 선택합니다. 다양한 규칙 형식은 다음 섹션에서 설명합니다.

  5. 규칙별 정보를 입력한 후 규칙 추가를 선택하여 목록에 규칙을 추가합니다.

마지막으로 액세스 제한 페이지에서 다시 저장을 선택합니다.

참고 항목

  • 액세스 제한 규칙은 512개로 제한됩니다. 512개가 넘는 액세스 제한 규칙이 필요하면 Azure Front Door, Azure App Gateway 또는 대체 WAF와 같은 독립 실행형 보안 제품을 설치하는 것이 좋습니다.

IP 주소 기반 규칙 설정

이전 섹션에 간략히 설명된 프로시저를 따르되, 다음과 같은 추가 작업을 수행합니다.

  • 4단계의 형식 드롭다운 목록에서 IPv4IPv6을 선택합니다.

IPv4와 IPv6 둘 다 CIDR(Classless Inter-Domain Routing) 표기법을 사용하여 IP 주소 블록을 지정합니다. 주소를 지정하려면 1.2.3.4/32와 같이 처음 4개의 8진수로 IP 주소를 나타내고 /32로 마스크를 나타낼 수 있습니다. 모든 주소에 대한 IPv4 CIDR 표기법은 0.0.0.0/0입니다. CIDR 표기법에 관한 자세한 내용은 Classless Inter-domain Routing을 참조하세요.

참고 항목

IP 기반 액세스 제한 규칙은 앱이 App Service Environment에 있는 경우 가상 네트워크 주소 범위만 처리합니다. 앱이 다중 테넌트 서비스에 있는 경우 서비스 엔드포인트를 사용하여 가상 네트워크의 일부 서브넷으로 트래픽을 제한해야 합니다.

서비스 엔드포인트 기반 규칙 설정

  • 4단계의 형식 드롭다운 목록에서 Virtual Network를 선택합니다.

    Virtual Network 형식이 선택된 ‘제한 추가’ 창의 스크린샷.

액세스를 제한하려는 항목과 일치하는 구독, Virtual Network서브넷 드롭다운 목록을 지정합니다.

서비스 엔드포인트를 사용하여 선택한 Azure 가상 네트워크 서브넷에 대한 액세스를 제한할 수 있습니다. 선택한 서브넷에 대한 서비스 엔드포인트가 Microsoft.Web에서 아직 사용되지 않는 경우 누락된 Microsoft.Web 서비스 엔드포인트 무시 확인란을 선택하지 않는 한 자동으로 사용됩니다. 앱에서 서비스 엔드포인트는 사용하고 서브넷은 사용하지 않도록 설정할 수 있는 시나리오는 대체로 서브넷에서 사용하도록 설정할 권한이 있는지에 따라 달라집니다.

다른 사용자가 서브넷에서 서비스 엔드포인트를 사용하도록 설정해야 하는 경우 누락된 Microsoft.Web 서비스 엔드포인트를 무시 확인란을 선택합니다. 앱은 나중에 서브넷에서 사용하도록 설정할 것을 예측하여 서비스 엔드포인트에 대해 구성됩니다.

서비스 엔드포인트를 사용하여 App Service Environment에서 실행되는 앱에 대한 액세스를 제한할 수 없습니다. 앱이 App Service Environment에 있는 경우 IP 액세스 규칙을 적용하여 해당 앱에 대한 액세스를 제어할 수 있습니다.

서비스 엔드포인트를 사용하면 애플리케이션 게이트웨이 또는 기타 WAF(웹 애플리케이션 방화벽) 디바이스로 앱을 구성할 수 있습니다. 또한 보안 백 엔드를 사용하여 다중 계층 애플리케이션을 구성할 수 있습니다. 자세한 내용은 네트워킹 기능 및 App Service서비스 엔드포인트와 Application Gateway 통합을 참조하세요.

참고 항목

  • VIP(가상 IP)에서 IP 기반 TLS/SSL 바인딩을 사용하는 웹앱에는 서비스 엔드포인트가 지원되지 않습니다.

서비스 태그 기반 규칙 설정

  • 4단계의 형식 드롭다운 목록에서 서비스 태그를 선택합니다.

    서비스 태그 형식이 선택된 ‘제한 추가’ 창의 스크린샷.

공개적으로 사용할 수 있는 모든 서비스 태그는 액세스 제한 규칙에서 지원됩니다. 각 서비스 태그는 Azure 서비스의 IP 범위 목록을 나타냅니다. 이 서비스 목록과 특정 범위의 링크는 서비스 태그 문서에서 찾을 수 있습니다. Azure Resource Manager 템플릿이나 스크립팅을 사용하여 지역 범위 규칙과 같은 고급 규칙을 구성합니다.

참고 항목

Azure Portal 또는 Azure CLI를 통해 서비스 태그 기반 규칙을 만들 때 선택/유효성 검사를 위한 서비스 태그의 전체 목록을 얻으려면 구독 수준에서 읽기 액세스 권한이 필요합니다. 또한 리소스 공급자를 Microsoft.Network 구독에 등록해야 합니다.

규칙 편집

  1. 기존 액세스 제한 규칙 편집을 시작하려면 액세스 제한 페이지에서 편집하려는 규칙을 선택합니다.

  2. 액세스 제한 편집 창에서 변경한 후 규칙 업데이트를 선택합니다.

  3. 저장을 선택하여 변경 내용을 저장합니다.

    기존 액세스 제한 규칙의 필드를 보여 주는 Azure Portal의 ‘액세스 제한 편집’ 창의 스크린샷.

    참고 항목

    규칙을 편집할 때 규칙 형식 간에 전환할 수 없습니다.

규칙 삭제

  1. 규칙을 삭제하려면 액세스 제한 페이지에서 삭제하려는 규칙을 선택한 다음, 삭제를 선택합니다.

  2. 저장을 선택하여 변경 내용을 저장합니다.

삭제할 액세스 제한 규칙 옆에 ‘제거’ 줄임표가 표시된 ‘액세스 제한’ 페이지의 스크린샷.

액세스 제한 고급 시나리오

다음 섹션에서는 액세스 제한을 사용하는 몇 가지 고급 시나리오에 관해 설명합니다.

http 헤더로 필터링

모든 규칙의 일부로 http 헤더 필터를 추가할 수 있습니다. 지원되는 http 헤더 이름은 다음과 같습니다.

  • X-Forwarded-For
  • X-Forwarded-Host
  • X-Azure-FDID
  • X-FD-HealthProbe

헤더 이름마다 최대 8개의 값을 쉼표로 구분하여 추가할 수 있습니다. http 헤더 필터는 규칙 자체 후에 평가되며 규칙을 적용하려면 두 조건이 모두 참이어야 합니다.

다중 원본 규칙

다중 원본 규칙을 사용하면 단일 규칙에 최대 8개의 IP 범위 또는 8개의 서비스 태그를 결합할 수 있습니다. IP 범위가 512개 이상이거나 논리 규칙을 만들려는 경우 다중 원본 규칙을 사용합니다. 논리 규칙은 여러 IP 범위가 단일 http 헤더 필터와 결합되는 위치일 수 있습니다.

다중 원본 규칙은 단일 원본 규칙을 정의하는 것과 같은 방식으로 정의되지만 각 범위는 쉼표로 구분됩니다.

PowerShell 예제:

Add-AzWebAppAccessRestrictionRule -ResourceGroupName "ResourceGroup" -WebAppName "AppName" `
  -Name "Multi-source rule" -IpAddress "192.168.1.0/24,192.168.10.0/24,192.168.100.0/24" `
  -Priority 100 -Action Allow

단일 IP 주소 차단

단일 IP 주소 또는 IP 주소 블록을 명시적으로 차단하지만 다른 모든 항목에 대한 액세스를 허용하려는 시나리오의 경우 특정 IP 주소에 대한 거부 규칙을 추가하고 일치하지 않는 규칙 작업을 허용하도록 구성합니다.

차단된 단일 IP 주소를 표시하는 Azure Portal의 ‘액세스 제한’ 페이지 스크린샷.

SCM 사이트에 대한 액세스 제한

앱에 대한 액세스를 제어할 수 있을 뿐만 아니라 앱에서 사용하는 SCM(고급 도구) 사이트에 대한 액세스도 제한할 수 있습니다. SCM 사이트는 웹 배포 엔드포인트이자 Kudu 콘솔입니다. 앱에서 SCM 사이트에 대한 액세스 제한을 별도로 할당하거나 앱과 SCM 사이트 모두에 대해 같은 제한 세트를 사용할 수 있습니다. 기본 사이트 규칙 사용 확인란을 선택하면 규칙 목록이 숨겨지고 기본 사이트의 규칙이 사용됩니다. 확인란의 선택을 취소하면 SCM 사이트 설정이 다시 표시됩니다.

SCM 사이트 또는 앱에 대한 액세스 제한이 설정되어 있지 않음을 보여 주는 Azure Portal의 ‘액세스 제한’ 페이지 스크린샷.

특정 Azure Front Door 인스턴스에 대한 액세스 제한

Azure Front Door에서 애플리케이션으로 이동하는 트래픽은 AzureFrontDoor.Backend 서비스 태그에 정의된 잘 알려진 IP 범위 세트에서 시작됩니다. 서비스 태그 제한 규칙을 사용하여 Azure Front Door에서 시작되는 트래픽으로만 제한할 수 있습니다. 트래픽이 특정 인스턴스에서만 시작되도록 하려면 Azure Front Door가 보내는 고유한 http 헤더를 기반으로 들어오는 요청을 추가로 필터링해야 합니다.

Azure Front Door 제한을 추가하는 방법을 보여 주는 Azure Portal의 ‘액세스 제한’ 페이지 스크린샷.

PowerShell 예제:

$afd = Get-AzFrontDoor -Name "MyFrontDoorInstanceName"
Add-AzWebAppAccessRestrictionRule -ResourceGroupName "ResourceGroup" -WebAppName "AppName" `
  -Name "Front Door example rule" -Priority 100 -Action Allow -ServiceTag AzureFrontDoor.Backend `
  -HttpHeader @{'x-azure-fdid' = $afd.FrontDoorId}

프로그래밍 방식으로 액세스 제한 관리

액세스 제한을 프로그래밍 방식으로 관리할 수 있습니다. 아래에서는 액세스 제한에 대한 규칙을 추가하는 방법 및 기본 사이트고급 도구 사이트 모두에 대해 일치하지 않는 규칙 작업을 변경하는 방법에 대한 예제를 찾을 수 있습니다.

기본 사이트에 대한 액세스 제한 규칙 추가

다음 옵션 중 하나를 선택하여 기본 사이트에 대한 액세스 제한 규칙을 프로그래밍 방식으로 추가할 수 있습니다.

Cloud Shell에서 다음 명령을 실행할 수 있습니다. az webapp config access-restriction 명령에 대한 자세한 내용은 이 페이지를 참조하세요.

az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
  --rule-name 'IP example rule' --action Allow --ip-address 122.133.144.0/24 --priority 100

az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
  --rule-name "Azure Front Door example" --action Allow --priority 200 --service-tag AzureFrontDoor.Backend \
  --http-header x-azure-fdid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

고급 도구 사이트에 대한 액세스 제한 규칙 추가

다음 옵션 중 하나를 선택하여 고급 도구 사이트에 대한 액세스 제한 규칙을 프로그래밍 방식으로 추가할 수 있습니다.

Cloud Shell에서 다음 명령을 실행할 수 있습니다. az webapp config access-restriction 명령에 대한 자세한 내용은 이 페이지를 참조하세요.

az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
  --rule-name 'IP example rule' --action Allow --ip-address 122.133.144.0/24 --priority 100 --scm-site true

기본 사이트에 대한 일치하지 않는 규칙 작업 변경

다음 옵션 중 하나를 선택하여 프로그래밍 방식으로 기본 사이트에 대한 일치하지 않는 규칙 작업을 변경할 수 있습니다.

Cloud Shell에서 다음 명령을 실행할 수 있습니다. az resource 명령에 대한 자세한 내용은 이 페이지를 참조하세요. ipSecurityRestrictionsDefaultAction에 허용되는 값은 Allow 또는 Deny입니다.

az resource update --resource-group ResourceGroup --name AppName --resource-type "Microsoft.Web/sites" \
  --set properties.siteConfig.ipSecurityRestrictionsDefaultAction=Allow

고급 도구 사이트에 대한 일치하지 않는 규칙 작업 변경

다음 옵션 중 하나를 선택하여 프로그래밍 방식으로 고급 도구 사이트에 대한 일치하지 않는 규칙 작업을 변경할 수 있습니다.

Cloud Shell에서 다음 명령을 실행할 수 있습니다. az resource 명령에 대한 자세한 내용은 이 페이지를 참조하세요. scmIpSecurityRestrictionsDefaultAction에 허용되는 값은 Allow 또는 Deny입니다.

az resource update --resource-group ResourceGroup --name AppName --resource-type "Microsoft.Web/sites" \
  --set properties.siteConfig.scmIpSecurityRestrictionsDefaultAction=Allow

Azure Functions 액세스 제한 설정

App Service 플랜과 같은 기능을 사용하는 함수 앱에 대한 액세스 제한도 사용할 수 있습니다. 액세스 제한을 사용하는 경우 허용되지 않는 IP에 대해 Azure Portal 코드 편집기도 사용하지 않게 설정합니다.

다음 단계

Azure Functions에 대한 액세스 제한
서비스 엔드포인트와 Application Gateway 통합
Azure App Service의 고급 액세스 제한 시나리오 - 블로그 게시물