애플리케이션을 Azure SQL Managed Instance에 연결
적용 대상: Azure SQL Managed Instance
이 문서는 다양한 애플리케이션 시나리오 내부 또는 Azure 가상 네트워크에서 애플리케이션을 Azure SQL Managed Instance에 연결하는 방법을 설명합니다.
현재 애플리케이션을 호스트하는 방법과 위치를 결정하는 여러 가지 옵션이 있습니다. Azure App Service 또는 Azure 가상 네트워크 통합 옵션 중 일부(예: Azure App Service Environment, Azure Virtual Machines, Virtual Machine Scale Sets)를 사용하여 클라우드에서 애플리케이션을 호스트할 수 있습니다. 하이브리드("혼합") 클라우드 접근 방식을 사용하고 애플리케이션을 온-프레미스에 유지할 수도 있습니다. 어떤 선택을 하든 다양한 애플리케이션 시나리오 내부 또는 Azure 가상 네트워크에서 애플리케이션을 Azure SQL Managed Instance에 연결할 수 있습니다.
또한 Power BI 및 Azure App Service와 같은 다중 테넌트 Azure 서비스 또는 VPN을 통해 가상 네트워크에 연결되지 않은 온-프레미스 네트워크에서와 같이 가상 네트워크 외부에서 관리형 인스턴스에 대한 데이터 액세스를 사용하도록 설정할 수도 있습니다. 이 시나리오와 유사한 시나리오를 수행하려면 Azure SQL Managed Instance에서 퍼블릭 엔드포인트 구성을 참조하세요.
동일한 VNet 내부에서 연결
SQL Managed Instance와 동일한 가상 네트워크 내에 애플리케이션을 연결하는 것이 가장 간단한 시나리오입니다. 가상 네트워크 내부 가상 머신은 다른 서브넷 내에 있더라도 서로 직접 연결할 수 있습니다. 즉, SQL Managed Instance와 동일한 가상 네트워크에 배포된 가상 머신 또는 App Service Environment 내부의 애플리케이션을 연결하려면 VNet 로컬 엔드포인트를 대상으로 하는 연결 문자열만 구성합니다.
다른 VNet 내부에서 연결
SQL Managed Instance와 위치가 다른 가상 네트워크에 상주하는 애플리케이션을 연결하려면 먼저 SQL Managed Instance가 배포된 가상 네트워크 또는 SQL Managed Instance 자체에 대한 액세스 권한을 부여해야 합니다. 두 가상 네트워크가 동일한 구독에 있을 필요는 없습니다.
다른 가상 네트워크에 있는 SQL Managed Instance에 연결하는 세 가지 옵션이 있습니다.
- 프라이빗 엔드포인트
- Azure VNet 피어링
- VNet 간 VPN 게이트웨이(Azure Portal, PowerShell, Azure CLI)
세 가지 중 프라이빗 엔드포인트는 다음과 같은 이유로 가장 안전하고 리소스 경제적인 옵션입니다.
- 가상 네트워크에서 SQL Managed Instance만 노출합니다.
- 단방향 연결만 허용합니다.
- 애플리케이션의 가상 네트워크에 하나의 IP 주소만 필요합니다.
프라이빗 엔드포인트가 시나리오의 요구 사항을 완전히 충족할 수 없는 경우 가상 네트워크 피어링을 대신 고려합니다. 피어링에서는 백본 Azure 네트워크를 사용하므로 가상 네트워크 경계를 넘은 통신에서 대기 시간이 크게 발생하지는 않습니다. 가상 네트워크 피어링은 모든 지역의 네트워크 간에 지원되는 반면(글로벌 가상 네트워크 피어링), 2020년 9월 22일 이전에 생성한 서브넷에서 호스트하는 인스턴스는 해당 지역 내 피어링만 지원합니다.
온-프레미스에서 연결
온-프레미스 애플리케이션을 SQL Managed Instance의 VNet 로컬 엔드포인트에 연결할 수 있습니다. 온-프레미스에서 액세스하기 위해 애플리케이션과 SQL Managed Instance 가상 네트워크 간에 사이트 간 연결을 만들어야 합니다. 관리형 인스턴스에 대한 데이터 전용 액세스로 충분하면 퍼블릭 엔드포인트를 통해 가상 네트워크 외부에서 연결할 수 있습니다. 자세한 내용은 Azure SQL Managed Instance에서 퍼블릭 엔드포인트 구성을 검토하세요.
온-프레미스 애플리케이션을 Azure 가상 네트워크에 연결하는 방법에는 두 가지 옵션이 있습니다.
- 사이트 간 VPN 연결(Azure Portal, PowerShell, Azure CLI)
- Azure ExpressRoute 연결
Azure 에 대한 온-프레미스 연결을 설정하고 SQL Managed Instance에 연결을 설정할 수 없는 경우 리디렉션을 위해 방화벽에서 11000~11999의 포트 범위뿐만 아니라 SQL 포트 1433의 아웃바운드 연결이 열려 있는지 확인합니다.
개발자 상자 연결
또한 개발자 상자를 SQL Managed Instance에 연결할 수도 있습니다. 따라서 가상 네트워크를 통해 개발자 상자에서 액세스하려면 먼저 개발자 상자와 SQL Managed Instance 가상 네트워크 사이를 연결해야 합니다. 이렇게 하려면 네이티브 Azure 인증서 인증을 사용하여 가상 네트워크t에 지점 및 사이트 간 연결을 구성합니다. 자세한 내용은 온-프레미스 컴퓨터에서 Azure SQL Managed Instance로 연결 지점-사이트 간 연결 구성을 참조하세요.
가상 네트워크 외부에서 관리되는 인스턴스에 대한 데이터 액세스는 Azure SQL Managed Instance에서 퍼블릭 엔드포인트 구성을 참조하세요.
Spoke 네트워크에 연결
또 다른 일반적인 시나리오는 VPN Gateway가 한 호스팅 SQL Managed Instance(허브 네트워크)와의 별도의 가상 네트워크(및 구독)(스포크 네트워크)에 설치된 경우입니다. 스포크 네트워크에서 SQL Managed Instance에 대한 연결은 다른 VNet 내에서 연결: 프라이빗 엔드포인트, VNet 피어링 또는 VNet 간 게이트웨이에 나열된 옵션 중 하나로 구성됩니다.
다음 샘플 아키텍처 다이어그램에서는 VNet 피어링을 보여줍니다.
허브 및 스포크 네트워크를 피어링하는 경우 VPN 게이트웨이에 허브 네트워크의 IP 주소가 표시되는지 확인합니다. 이렇게 하려면 피어링 설정에서 다음과 같이 변경합니다.
- VPN 게이트웨이를 호스트하는 가상 네트워크(스포크 네트워크)에서 피어링, SQL Managed Instance에 피어링된 가상 네트워크 연결로 차례로 이동한 다음, 게이트웨이 전송 허용을 선택합니다.
- SQL Managed Instance를 호스트하는 가상 네트워크(허브 네트워크)에서 피어링, VPN 게이트웨이에 피어링된 가상 네트워크 연결로 차례로 이동한 다음, 원격 게이트웨이 사용을 선택합니다.
Azure App Service 연결
가상 네트워크와 통합될 때 Azure App Service에서 호스트하는 애플리케이션을 연결할 수도 있습니다. 이렇게 하려면 다른 VNet 내부에서 연결에 나열된 메커니즘 중 하나를 선택합니다. 가상 네트워크 외부에서 관리형 인스턴스에 대한 데이터 액세스는 Azure SQL Managed Instance에서 퍼블릭 엔드포인트 구성을 참조하세요.
Azure App Service를 SQL Managed Instance에 연결하는 특수한 경우는 SQL Managed Instance 가상 네트워크에 피어링된 네트워크에 Azure App Service를 통합하는 경우입니다. 해당 경우에는 다음 구성을 설정해야 합니다.
- SQL Managed Instance 가상 네트워크에는 게이트웨이가 없어야 합니다.
- SQL Managed Instance 가상 네트워크에는
Use remote gateways
옵션이 설정되어 있어야 합니다. - 피어링된 가상 네트워크에는
Allow gateway transit
옵션이 설정되어 있어야 합니다.
이 시나리오는 다음 다이어그램에서 설명합니다.
참고 항목
가상 네트워크 통합 기능은 ExpressRoute 게이트웨이가 있는 가상 네트워크와 앱을 통합하지 않습니다. ExpressRoute 게이트웨이가 공존 모드로 구성되어 있어도 가상 네트워크 통합은 작동하지 않습니다. ExpressRoute 연결을 통해 리소스에 액세스해야 하는 경우에는 가상 네트워크에서 실행되는 App Service Environment를 사용할 수 있습니다.
가상 네트워크를 통한 Azure App Service 액세스 문제 해결은 가상 네트워크 및 애플리케이션 문제 해결을 검토하세요.
연결 문제 해결
연결 문제를 해결하려면 다음을 검토하세요.
동일한 가상 네트워크이지만 다른 서브넷 내의 Azure 가상 머신에서 SQL Managed Instance에 연결할 수 없는 경우 VM 서브넷에 액세스를 차단할 수도 있는 네트워크 보안 그룹이 설정되어 있는지 확인합니다. 또한 Azure 경계 내에서 리디렉션을 통해 연결하는 데 필요하므로 11000~11999 범위의 포트뿐만 아니라 SQL 포트 1433에 대한 아웃바운드 연결을 엽니다.
가상 네트워크와 연결된 경로 테이블에 대해 게이트웨이 경로 전파를 사용하지 않도록 설정해야 합니다.
지점 및 사이트 간 VPN을 사용할 경우 Azure Portal에서 구성을 확인하여 수신/송신 숫자가 보이는지 확인합니다. 0이 아닌 숫자는 Azure가 온-프레미스에서 트래픽을 라우팅하는 것을 나타냅니다.
클라이언트 머신(VPN 클라이언트를 사용 중인)에 사용자가 액세스해야 하는 모든 가상 네트워크에 대한 경로 항목이 있는지 확인합니다. 경로는
%AppData%\Roaming\Microsoft\Network\Connections\Cm\<GUID>\routes.txt
에 저장됩니다.이 이미지와 같이 관련된 각 가상 네트워크에 대한 항목이 두 개, 포털에서 구성된 VPN 엔드포인트에 대한 항목이 세 개 있습니다.
경로를 확인하는 또 다른 방법은 다음 명령을 사용하는 것입니다. 출력에는 다양한 서브넷에 대한 경로가 표시됩니다.
C:\ >route print -4 =========================================================================== Interface List 14...54 ee 75 67 6b 39 ......Intel(R) Ethernet Connection (3) I218-LM 57...........................rndatavnet 18...94 65 9c 7d e5 ce ......Intel(R) Dual Band Wireless-AC 7265 1...........................Software Loopback Interface 1 Adapter=========================================================================== IPv4 Route Table =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 10.83.72.1 10.83.74.112 35 10.0.0.0 255.255.255.0 On-link 172.26.34.2 43 10.4.0.0 255.255.255.0 On-link 172.26.34.2 43 =========================================================================== Persistent Routes: None
가상 네트워크 피어링을 사용하는 경우 게이트웨이 전송 허용 및 원격 게이트웨이 사용 설정을 위한 지침을 따랐는지 확인합니다.
가상 네트워크 피어링을 사용하여 Azure App Service에서 호스트된 애플리케이션을 연결하고 SQL Managed Instance 가상 네트워크에 공용 IP 주소 범위가 있는 경우 호스트된 애플리케이션 설정에서 아웃바운드 트래픽을 공용 IP 네트워크로 라우팅할 수 있도록 해야 합니다. 지역 가상 네트워크 통합의 지침을 따릅니다.
권장되는 버전의 드라이버 및 도구
이전 버전이 작동할 수 있지만 다음 테이블에는 SQL Managed Instance에 연결할 권장되는 최소 버전의 도구 및 드라이버가 나와 있습니다.
드라이버/도구 | 버전 |
---|---|
.NET Framework | 4.6.1(또는 .NET Core) |
ODBC 드라이버 | v17 |
PHP 드라이버 | 5.2.0 |
JDBC 드라이버 | 6.4.0 |
Node.js 드라이버 | 2.1.1 |
OLEDB 드라이버 | 18.0.2.0 |
SSMS | 18.0 이상 |
SMO | 150 이상 |