이 문서에서는 온-프레미스 네트워크 또는 Azure 가상 네트워크 내에서 App Service 웹앱 또는 함수 앱에 대한 향상된 보안 프라이빗 연결을 설정하는 방법을 보여 줍니다. 또한 퍼블릭 인터넷을 사용하지 않고 Azure Private Link를 통해 앱과 다른 Azure PaaS 서비스 간에 향상된 보안 연결을 설정하는 방법을 보여 줍니다.
이 문서에서 Azure 앱 Service는 기본, 표준 및 프리미엄 계층과 같은 다른 App Service 고객과 공유 인프라가 있는 가격 책정 계층을 참조합니다. App Service Environment는 전용 지원 인프라를 사용하여 가상 네트워크에 직접 배포되며 격리된 가격 책정 계층을 사용하며 이 문서의 초점이 아닙니다.
아키텍처
이 아키텍처의 Visio 파일을 다운로드합니다.
데이터 흐름
웹앱은 Azure App Service 지역 가상 네트워크 통합을 사용하여 Azure 가상 네트워크의 위임된 서브넷 VNet 통합 서브넷을 통해 Azure 서비스에 연결합니다.
- VNet 통합 서브넷 및 프라이빗 엔드포인트 서브넷 네트워크는 여러 구독에서 별도의 가상 네트워크에 있습니다. 두 네트워크는 모두 허브 및 스포크 네트워크 구성의 일부로 허브 가상 네트워크와 피어링됩니다. 지역 가상 네트워크 통합을 위해 피어링된 가상 네트워크는 동일한 Azure 지역에 있어야 합니다.
Azure Private Link 서비스는 프라이빗 엔드포인트 가상 네트워크에서 PaaS 서비스, 웹앱, Azure SQL Database, Azure 스토리지 계정 및 Azure 키 자격 증명 모음에 대한 프라이빗 엔드포인트를 설정합니다.
예제에서 이 가상 네트워크는 프라이빗 엔드포인트 배포에만 사용됩니다. VM(가상 머신)과 같은 다른 리소스는 이 가상 네트워크에 배포되지 않습니다. 서브넷 크기를 선택할 때 프라이빗 엔드포인트를 추가해야 하는 미래 수요가 고려되었습니다.
온-프레미스 네트워크와 Azure 가상 네트워크는 S2S(사이트 간) VPN 또는 Azure ExpressRoute 프라이빗 피어링을 통해 연결할 수 있습니다. 온-프레미스 네트워크의 사용자는 개인 네트워크를 통해서만 향상된 보안으로 비공개로 앱에 액세스합니다.
이 예제에서는 온-프레미스 네트워크와 Azure 가상 네트워크가 ExpressRoute 프라이빗 피어링을 통해 연결됩니다.
이미 DNS(Domain Name System) 솔루션이 적용된 온-프레미스 네트워크의 경우 온-프레미스 DNS 솔루션은 Azure에 배포된 DNS Private Resolver 서비스의 인바운드 엔드포인트에 요청을 전달하는 조건부 전달자를 통해 Azure 프라이빗 DNS 레코드(예: azurewebsites.net)에 DNS 트래픽을 전달하도록 구성됩니다. DNS Private Resolver는 Azure DNS를 쿼리하고 Azure 프라이빗 DNS 가상 네트워크 링크에 대한 정보를 받습니다. 그런 다음, 가상 네트워크에 연결된 프라이빗 DNS 영역에서 확인이 이루어집니다.
또한 프라이빗 DNS 영역은 프라이빗 엔드포인트 가상 네트워크와 동일한 구독에 배포됩니다.
이 예제에서 온-프레미스 네트워크의 IP 주소 192.168.0.254에 있는 DNS 전달자 머신은 호스트 이름 azurewebsites.net에 대한 모든 DNS 확인 요청을 Azure에서 주소 10.0.0.132에 있는 DNS Private Resolver 서비스의 인바운드 엔드포인트에 전달합니다. 그런 다음, 요청은 가상 네트워크에 연결된 Azure 프라이빗 DNS 영역을 통해 IP 주소가 168.63.129.16인 Azure 제공 DNS 서비스에 의해 확인됩니다.
DNS 전달 규칙 집합을 사용하여 Azure에서 온-프레미스, 다른 클라우드 공급자 또는 외부 DNS 서버로 이름 확인을 조건부로 전달할 수 있으려면 아웃바운드 엔드포인트가 필요합니다.
이 시나리오에서는 DNS 전달 규칙 집합을 구성할 필요가 없습니다.
다음 앱 서비스 구성이 있어야 합니다.
키 값 WEBSITE_DNS_SERVER 168.63.129.16 가상 네트워크는 모든 Azure 프라이빗 DNS 영역에 연결됩니다.
- 프라이빗 엔드포인트가 있는 가상 네트워크는 프라이빗 DNS 영역에 자동으로 연결됩니다. 다른 가상 네트워크는 별도로 연결해야 합니다.
웹앱은 Azure Firewall을 통해 프라이빗 엔드포인트 가상 네트워크에 있는 PaaS 서비스의 프라이빗 엔드포인트와 통신합니다.
Azure Firewall에서 애플리케이션 규칙은 VNet 통합 서브넷과 PaaS 리소스 프라이빗 엔드포인트 간에 통신을 허용하도록 구성됩니다. 대상 FQDN(정규화된 도메인 이름)은 다음과 같습니다.
*.azurewebsites.net
*.database.windows.net
*.core.windows.net
*.vaultcore.azure.net
Azure SQL, Azure Storage 계정 및 Azure Key Vault의 방화벽 및 가상 네트워크 구성은 VNet 통합 서브넷의 트래픽만 허용합니다. 이 구성은 다른 가상 네트워크 또는 퍼블릭 인터넷에 대한 통신을 허용하지 않습니다.
구성 요소
- Azure App Service는 웹 애플리케이션과 함수 앱을 호스트하므로 인프라를 관리할 필요 없이 자동 스케일링과 고가용성이 허용됩니다.
- Azure SQL Database는 관계형 데이터, 공간 데이터, JSON 및 XML을 지원하는 범용 관계형 데이터베이스 관리되는 서비스입니다.
- Azure Storage 계정은 HTTP 또는 HTTPS를 통해 전 세계 어디서나 액세스할 수 있는 Azure Storage 데이터의 고유한 네임스페이스를 제공합니다. 여기에는 Blob, 파일 공유, 큐, 테이블, 디스크 등의 모든 Azure Storage 데이터 개체가 포함됩니다.
- Azure Key Vault는 API 키, 암호, 인증서, 암호화 키 또는 클라우드 앱과 서비스에서 사용하는 기타 비밀을 안전하게 저장하고 액세스하기 위한 서비스입니다.
- Azure Virtual Network는 Azure에서 개인 네트워크의 기본 구성 요소입니다. VM과 같은 Azure 리소스는 가상 네트워크를 통해 서로, 인터넷 및 온-프레미스 네트워크와 안전하게 통신할 수 있습니다.
- Azure Private Link는 Azure Storage 및 SQL Database 같은 Azure PaaS 서비스 또는 고객 또는 파트너 서비스에 연결하기 위해 가상 네트워크에 프라이빗 엔드포인트를 제공합니다.
- Azure ExpressRoute 프라이빗 피어링은 프라이빗 연결을 통해 온-프레미스 네트워크를 Microsoft 클라우드로 확장합니다. Azure ExpressRoute를 사용하는 대신 온-프레미스와 Azure 네트워크 간에 사이트 간 VPN을 설정할 수도 있습니다.
- Azure Firewall은 Azure Virtual Network 리소스를 보호하는 데 도움이 되는 관리형 클라우드 기반 네트워크 보안 서비스입니다.
- 프라이빗 DNS 영역은 가상 네트워크에서 도메인 이름을 관리하고 확인하기 위한 신뢰할 수 있고 안전한 DNS 서비스를 제공합니다.
- DNS Private Resolver를 사용하면 VM 기반 DNS 서버를 배포하지 않고도 온-프레미스 환경에서 Azure DNS 프라이빗 영역을 쿼리하거나 그 반대로 쿼리할 수 있습니다.
대안
프라이빗 연결을 위한 대체 접근 방식은 App Service Environment를 사용하여 격리된 환경에서 웹 애플리케이션을 호스트하는 것입니다. App Service Environment는 App Service 고객 간의 공유 호스팅 인프라 를 방지합니다. 데이터베이스의 경우 가상 네트워크에 Azure SQL Managed Instance를 기본적으로 배포할 수 있으므로 가상 네트워크 통합 또는 프라이빗 엔드포인트가 필요하지 않습니다. 이 제품은 단일 테넌트 격리 배포 및 기타 기능을 제공하기 때문에 일반적으로 비용이 더 많이 듭니다.
App Service Environment가 있지만 SQL Managed Instance를 사용하지 않는 경우에도 Azure SQL 데이터베이스에 대한 프라이빗 연결에 프라이빗 엔드포인트를 사용할 수 있습니다. SQL Managed Instance가 이미 있지만 App Service를 사용하는 경우에도 지역 VNet 통합을 사용하여 SQL Managed Instance 개인 주소에 연결할 수 있습니다.
Key Vault 또는 Storage 같은 일부 다른 Azure 서비스의 경우 Web Apps에서 매우 안전한 프라이빗 연결에 프라이빗 엔드포인트를 사용하는 방법의 대안이 없습니다.
잠재적인 사용 사례
- 온-프레미스 네트워크 또는 Azure 가상 네트워크 내에서 프라이빗 엔드포인트를 통해 향상된 보안으로 App Service 웹앱 또는 함수 앱에 비공개로 액세스합니다.
- 웹앱 또는 함수 앱에서 Azure PaaS(Platform as a Service) 제품에 연결합니다.
- 다른 웹앱
- SQL Database
- Azure Storage
- Key Vault
- 인바운드 연결을 위해 Azure 프라이빗 엔드포인트를 지원하는 다른 모든 서비스
고려 사항
이러한 고려 사항은 워크로드의 품질을 향상시키는 데 사용할 수 있는 일단의 지침 원칙인 Azure Well-Architected Framework의 핵심 요소를 구현합니다. 자세한 내용은 Microsoft Azure Well-Architected Framework를 참조하세요.
보안
우수한 보안은 중요한 데이터 및 시스템에 대한 고의적인 공격과 악용을 방어합니다. 자세한 내용은 보안 요소의 개요를 참조하세요.
웹앱용 프라이빗 엔드포인트를 사용하면 다음을 수행할 수 있습니다.
- 프라이빗 엔드포인트를 구성하여 웹앱을 보호함으로써 퍼블릭 노출을 방지합니다.
- VPN 또는 ExpressRoute 프라이빗 피어링을 사용하여 가상 네트워크에 연결되는 온-프레미스 네트워크에서 향상된 보안으로 Web Apps에 연결합니다. 웹앱에 대한 인바운드 연결은 온-프레미스 네트워크에서 또는 Azure 가상 네트워크 내에서만 허용됩니다.
- 가상 네트워크에서 데이터 반출을 방지합니다.
필요에 따라 Azure Web Application Firewall을 사용하여 Application Gateway 또는 Azure Front Door와 같은 서비스를 통해 앱을 전면에 배치하여 웹앱에 대한 인바운드 연결의 보안을 추가로 향상할 수 있습니다. 웹앱용 프라이빗 엔드포인트를 사용하도록 설정하면 웹앱의 액세스 제한 구성이 평가되지 않습니다.
이 시나리오는 App Service 웹앱에서 데이터베이스, Storage 또는 Key Vault와 같은 다운스트림 종속성으로 아웃바운드 연결의 보안도 향상합니다.
모든 트래픽 또는 프라이빗 트래픽(RFC1918 트래픽이라고도 함)만 가상 네트워크로 라우팅하도록 애플리케이션 라우팅을 구성할 수 있습니다. 모두 라우팅 설정을 사용하여 이 동작을 구성합니다. 모두 라우팅을 사용하지 않는 경우 웹앱은 프라이빗 트래픽만 가상 네트워크로 라우팅합니다. 퍼블릭 주소에 대한 트래픽을 차단하려면 가상 네트워크에 대한 모든 라우팅 설정을 사용하도록 설정합니다. 네트워크 보안 그룹을 사용하여 가상 네트워크 또는 인터넷의 리소스에 대한 아웃바운드 트래픽을 차단할 수도 있습니다. 모두 라우팅을 사용하는 경우 NSG는 RFC1918 트래픽에만 적용됩니다.
이 예제에서는 웹앱이 가상 네트워크에 없는 서비스와 통신할 필요가 없으므로 모두 라우팅이 사용하도록 설정됩니다.
이 시나리오의 중요한 보안 고려 사항은 PaaS 리소스의 방화벽 구성입니다.
SQL Database 방화벽 옵션
프라이빗 연결을 사용하지 않고 지정된 IP 주소 범위의 인바운드 트래픽만 허용하는 방화벽 규칙을 추가할 수 있습니다. 또 다른 접근 방식은 서버에 액세스하도록 Azure 서비스를 허용하는 것입니다. 이 접근 방식은 Azure 내의 트래픽만 허용하도록 방화벽을 잠급니다. 그러나 이 트래픽에는 모든 Azure 지역과 기타 고객이 포함됩니다.
앱의 아웃바운드 IP 주소만 데이터베이스에 액세스하도록 허용하는 더 제한적인 방화벽 규칙을 추가할 수도 있습니다. 그러나 이러한 IP 주소는 여러 App Services와 공유되며 동일한 아웃바운드 IP 주소를 사용하는 동일한 배포 스탬프에 있는 다른 고객의 트래픽을 허용합니다.
가상 네트워크를 통해 프라이빗 연결을 사용하면 다른 사용자가 데이터베이스에 액세스하지 못하도록 하는 다음 방화벽 옵션이 제공됩니다.
- 이 예제에서는 VNet 통합, VNet 통합 서브넷에서 위임된 지역 서브넷의 트래픽만 허용하는 가상 네트워크 규칙을 만듭니다. 데이터베이스가 해당 서브넷의 트래픽을 식별할 수 있도록 위임된 서브넷에는 Microsoft.Sql에 대해 구성된 서비스 엔드포인트가 있어야 합니다.
- 공용 네트워크 액세스를 거부하도록 방화벽을 구성합니다. 이렇게 하면 다른 모든 방화벽 규칙이 꺼지고 프라이빗 엔드포인트를 통해서만 데이터베이스에 액세스할 수 있습니다.
공용 네트워크 액세스를 거부하는 옵션은 가장 안전한 구성입니다. 그러나 이 옵션을 사용하는 경우 프라이빗 엔드포인트를 호스트하는 가상 네트워크를 통해서만 데이터베이스 액세스가 가능합니다. 데이터베이스에 연결하려면 웹앱 이외의 모든 항목이 가상 네트워크에 직접 연결되어야 합니다.
예를 들어, 로컬 컴퓨터의 SSMS(SQL Server Management Studio)에서 배포 또는 긴급 수동 연결은 VPN 또는 ExpressRoute 연결을 통해 가상 네트워크에 연결하는 경우를 제외하고는 데이터베이스에 연결할 수 없습니다. 가상 네트워크의 VM에 원격으로 연결하고 해당 위치에서 SSMS를 사용할 수도 있습니다. 예외적인 경우 공용 네트워크 액세스를 일시적으로 허용하고 다른 구성 옵션을 사용하여 위험을 줄일 수 있습니다.
Storage 계정 및 Key Vault 방화벽 옵션
스토리지 계정 및 키 자격 증명 모음에는 인터넷에서 액세스할 수 있는 퍼블릭 엔드포인트가 있습니다. 스토리지 계정 및 키 자격 증명 모음에 대한 프라이빗 엔드포인트를 만들 수도 있습니다. 이렇게 하면 해당 서비스에 가상 네트워크의 개인 IP 주소가 할당되고 프라이빗 링크를 통해 가상 네트워크와 각 서비스 간 모든 트래픽을 보호할 수 있습니다.
프라이빗 엔드포인트를 만들 때 VNet 통합 서브넷은 프라이빗 링크를 통해 향상된 보안으로 비공개로 서비스에 액세스할 수 있습니다. 그러나 스토리지 계정 및 키 자격 증명 모음은 다른 Azure 가상 네트워크에서 계속 액세스할 수 있습니다. 다른 가상 네트워크의 액세스를 차단하려면 이 위임된 서브넷에 대한 서비스 엔드포인트를 만듭니다.
가용성
App Service, Azure SQL Database, Azure Storage 및 Azure Key Vault에 대한 Private Link 지원은 모든 퍼블릭 지역에서 사용할 수 있습니다. 다른 지역의 가용성을 확인하려면 Azure Private Link 가용성을 참조 하세요.
Private Link는 아키텍처에 대한 다른 구성 요소 및 가용성 고려 사항을 도입합니다. Private Link 서비스에는 고가용성 SLA가 포함됩니다. 전체 솔루션의 복합 SLO를 계산할 때 이 SLA를 고려해야 합니다.
확장성
허브-스포크 네트워크 아키텍처에서 Azure 프라이빗 DNS 영역과 PaaS용 Azure Private Link 서비스를 통합하는 방법에 관한 자세한 내용은 Private Link와 DNS의 대규모 통합을 참조하세요.
글로벌 피어링
가상 네트워크를 통해 연결할 수 있는 Azure 지역의 모든 서비스는 허브-스포크 토폴로지의 가상 네트워크 피어링 등을 통해 PaaS 서비스의 프라이빗 엔드포인트에 연결할 수 있습니다. 그러나 App Service 지역 VNet 통합의 경우 피어링된 가상 네트워크는 동일한 Azure 지역에 있어야 합니다.
글로벌 피어링 지원이 없으면 App Service에서 다른 Azure 지역의 데이터베이스 또는 기타 프라이빗 엔드포인트로 지역 간 연결에 이 솔루션을 사용할 수 없습니다. 예를 들어, 이 솔루션은 부분 장애 조치(failover)를 지원하기 위한 다중 지역 배포에서 작동하지 않습니다. 이 경우 웹앱은 한 지역에서 활성 상태로 유지되지만 다른 지역의 장애 조치된 데이터베이스에 연결되거나 그 반대로 연결되어야 합니다. 그러나 이 상황에 대한 다른 솔루션이 있습니다.
Web Apps를 다른 지역의 가상 네트워크에 연결해야 하는 경우 필수 게이트웨이 VNet 통합을 설정할 수 있습니다. 필수 게이트웨이 VNet 통합은 Azure ExpressRoute와 연결된 가상 네트워크에서 사용할 수 없다는 제한 사항이 있습니다.
로깅 및 모니터링
Azure Private Link는 Azure Monitor와 통합되어 데이터가 이동하는지 확인할 수 있습니다.
Azure Network Watcher의 연결 문제 해결 서비스를 사용하여 가상 네트워크의 VM에서 프라이빗 엔드포인트 리소스의 FQDN으로 연결을 추적할 수도 있습니다.
비용 최적화
비용 최적화는 불필요한 비용을 줄이고 운영 효율성을 높이는 방법을 찾는 것입니다. 자세한 내용은 비용 최적화 핵심 요소 개요를 참조하세요.
Basic, Standard, Premium v2, Premium v3, Isolated v2 App Service 및 Azure Functions Premium 플랜에서 지원되는 가격 책정 계층에는 App Service 지역 VNet 통합에 대한 추가 비용이 없습니다.
프라이빗 엔드포인트는 컨테이너화 여부에 관계없이 Basic, Standard, Premium v2, Premium v3 및 Isolated v2 App Service 플랜에서 호스트되는 Windows 웹앱 및 Linux 웹앱에 사용할 수 있고 Premium 플랜에 배포된 함수 앱에도 사용할 수 있습니다.
PaaS 서비스의 프라이빗 엔드포인트를 사용하도록 설정하는 Azure Private Link 서비스에는 시간당 요금과 대역폭에 대한 프리미엄을 더한 값에 따라 발생하는 관련 비용이 있습니다. 자세한 내용은 Private Link 가격 책정 페이지를 참조하세요. 클라이언트 가상 네트워크에서 허브 가상 네트워크의 Azure Firewall로 연결하면 요금이 발생합니다. 허브 가상 네트워크의 Azure Firewall에서 피어링된 가상 네트워크의 프라이빗 엔드포인트로 연결하는 경우에는 요금이 청구되지 않습니다.
Azure 프라이빗 DNS 영역 비용은 Azure에서 호스트되는 DNS 영역 수와 수신된 DNS 쿼리 수에 따라 결정됩니다.
이 시나리오를 실행하는 비용을 살펴보려면 Azure 가격 계산기 예측을 참조하세요. 이 문서에 설명된 모든 서비스는 소규모 애플리케이션에 대한 적절한 기본값으로 미리 구성됩니다. 사용 사례의 가격 변동을 확인하려면 예상 사용량에 맞게 변수를 적절하게 변경하세요.
참가자
Microsoft에서 이 문서를 유지 관리합니다. 이 문서를 처음에 작성한 기여자는 다음과 같습니다.
보안 주체 작성자:
- Ankit Singhal | 클라우드 솔루션 설계자
비공개 LinkedIn 프로필을 보려면 LinkedIn에 로그인합니다.
다음 단계
- 프라이빗 엔드포인트를 사용하여 Azure 가상 네트워크와 Azure Functions 통합 방법에 관한 단계별 참고 자료를 참조하세요.
- 다양한 네트워크 토폴로지에서 프라이빗 엔드포인트로 향하는 트래픽을 검사하도록 Azure Firewall 애플리케이션 규칙을 구성하는 단계를 참조하세요.
- App Service의 인바운드 및 아웃바운드 시나리오와 이 경우에 사용할 기능에 관한 자세한 내용은 App Service 네트워킹 기능 개요를 참조하세요.
- Azure Web Apps의 프라이빗 엔드포인트에 관한 자세한 내용은 Azure Web Apps의 프라이빗 엔드포인트 사용을 참조하세요.
- App Service 웹앱을 Azure Virtual Network와 통합하는 방법에 대한 자세한 내용은 Azure 가상 네트워크와 앱 통합을 참조하세요.
- 일부 PaaS 서비스의 FQDN은 공용 IP 주소에 대해 자동으로 확인될 수 있습니다. 프라이빗 엔드포인트에 연결하도록 DNS 구성을 재정의하는 방법에 관한 내용은 Azure 프라이빗 엔드포인트 DNS 구성을 참조하세요.