[AWS] Scramble

Azure SQL Database에 Azure VM에서 쿼리 날리기

Randy, the engineer 2025. 9. 26. 15:42

잘 모르겠는 내용은 아래 공식문서를 참고하며 작성했습니다:

 

https://learn.microsoft.com/en-us/azure/azure-sql/database/connect-query-portal?view=azuresql

 

Query SQL Database with Query Editor in the Azure Portal - Azure SQL Database

Learn how to connect to an Azure SQL database and use the Azure portal query editor (preview) to run Transact-SQL (T-SQL) queries.

learn.microsoft.com

 

Public Access 허용

Azure 웹 콘솔에서 쿼리를 날리기 위해서는 Query editor라고 하는 서비스를 이용해야 합니다. 그런데 이 서비스는 Public network access를 필요로 합니다. (위 공식문서에 따르면 그렇습니다)

 

그러나 우리는 DB를 인터넷으로부터 지켜야 할 의무가 있습니다.

특히 위의 공식문서에서 public access를 열어줄 때도 최소 허용의 원칙을 위해 우리가 사용할 IPv4주소만 열어주어야 하는데,

저같은 경우엔 랩탑을 통해 다양한 장소에서 이 서비스에 접속하기 때문에 해당 서비스도 유효하지 않습니다.

 

IP주소가 고정되는 직장인 분들도 public access를 직접 열기보다는 Point-to-Site 혹은 Site-to-Site서비스를 이용하는게 더 좋아보이기도 합니다:

https://learn.microsoft.com/en-us/azure/vpn-gateway/point-to-site-about?wt.mc_id=searchAPI_azureportal_inproduct_rmskilling&sessionId=1c3640194df6445c9e0ef59e6ca5136e

 

About Azure Point-to-Site VPN connections - Azure VPN Gateway

Learn about Point-to-Site VPN.

learn.microsoft.com


Azure Bastion

우리는 Bastion이라고 하는 서비스를 이용할 예정입니다.

 

Bastion, 배스천이라고 발음하는데요,

배스천이란게 무엇인지 궁금하시다면 아래 문서를 참고바랍니다:

https://cloud.ibm.com/docs/solution-tutorials?topic=solution-tutorials-vpc-secure-management-bastion-server&locale=ko

 

IBM Cloud Docs

 

cloud.ibm.com

https://learn.microsoft.com/ko-kr/azure/bastion/bastion-overview

 

Azure Bastion 정보

RDP/SSH 포트를 외부에 노출하지 않고 가상 머신에 안전하고 원활한 RDP/SSH 연결을 제공하는 Azure Bastion에 대해 알아봅니다.

learn.microsoft.com

 

배스천을 통해 Azure SQL Database에 접근해보겠습니다.

Bastion을 통해 Azure SQL Database에 접근하려면

Azure SQL Database에서 public access는 막혀있더라도, 'private access link'는 허용되어있어야 합니다.

 

허용되어있다면, 이제 Bastion으로 접속할 VM을 만들어봅시다.

 

어차피 Azure Bastion을 활용하면 웹 콘솔에서 SSH 접속이 가능하므로 굳이 퍼블릭에 만들지 않고 프라이빗 영역에 생성하도록 하겠습니다.

저는 VM을 프라이빗으로 만들 때 'Login with Microsoft Entra ID'라는걸 활성화해두었습니다.

 

잘은 모르지만 왠지 이걸 활성화 해두어야 VM에 편하게 연결할 수 있을 것 같았기 때문입니다.

 

이렇게 만들어졌다면 Connect -> Bastion으로 들어와서 연결을 시도해줍니다.

그냥 Connect도 있긴 하지만 제가 프라이빗 서브넷에 만들면서 public ip도 안만들었고, TCP22 연결 허용도 안열어줬기때문에 이론적으로 불가능합니다.

 

또한 VM을 생성할 때 'SSH key pair'를 발급할지 password로 할지 정하는데요,

철통보안을 중시한다면 SSH key pair를 발급받아서 secret key를 로컬에 안전하게 저장하는게 최고입니다.

그러나 그렇게 불편하게 보안을 유지하고싶진 않다, 간단한 프로젝트 용도다 라고하신다면 password로 설정해도 좋을 것 같습니다.

 

저는 실제 배포환경에 만들고있기 때문에 SSH key pair로 발급받았습니다.


SQL 쿼리 날리기

이제 Azure SQL Database에 쿼리를 날려야 합니다.

그 전에 연결부터 해야하는데, 현재 저의 아키텍처는

 

같은 VPC 안에 private VM과 Azure SQL Database를 생성해둔 상태입니다.

private VM은 public ip가 없어서 Bastion으로 접속했고,

Azure SQL Database도 public access point를 제거하여 private access link만 존재하는 상태입니다.

 

 

이를 Bastion을 활용하여 SQL 쿼리를 날려보도록 하겠습니다.

 

DB의 connect with...을 열어보면 Azure Data Studio와 Visual Studio가 있지만, 제가 한번 해보니까 이들은 DB에 대해 public access를 필요로 하더라고요.

근데 저는 보안을 위해 public access는 다 차단했으니 이 방법은 불가능합니다.

 

그러니 우리는 이제 아까 만들어놓은 VM을 활용해서 연결을 해봅시다.

아래 공식문서를 바탕으로 실습을 진행해봤습니다.

 

https://learn.microsoft.com/en-us/azure/private-link/tutorial-private-endpoint-sql-portal#test-connectivity-to-private-endpoint

 

Tutorial: Connect to an Azure SQL server using an Azure Private Endpoint - Azure portal

Get started with this tutorial to learn how to connect to a storage account privately via Azure Private Endpoint using the Azure portal.

learn.microsoft.com

 

일단 VM에 접속하기 전에, 패키지를 하나 다운받아야 하므로 NAT gatway가 필요할 수 있습니다.

 

NAT gateway까지 설정을 완료했다면 VM에 접속을 한번 해봅시다.

 

nslookup [servername]

VM의 cli에 이런 식으로 명령어를 입력하면 아래와같은 결과가 나와야 합니다.

 

Server:    unknown
Address:   172.0.0.53

Non-authoritative answer:
sql-server-8675.database.windows.netcanonical name = sql-server-8675.privatelink.database.windows.net.
Name:sql-server-8675.privatelink.database.windows.net
Address: 10.1.0.4

이렇게 결과가 나오지 않으면 vm이 Azure SQL Database를 찾지 못한다는 의미입니다.

 

만약 찾으셨다면, 아래와 같은 명령어를 입력해서 SQL로 접근합니다.

sqlcmd -S server-name.database.windows.net -U '<server-admin>' -P '<admin-password>'

근데 저는 sqlcmd라는 명령어가 없었습니다. 다운로드를 받아야 하는데, 이것과 관련된 공식문서가 또 있더군요.

 

https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools?view=sql-server-ver17&tabs=ubuntu-install%2Codbc-ubuntu-2204

 

Install the sqlcmd and bcp SQL Server Command-Line Tools on Linux - SQL Server

Learn how to install the SQL Server command-line tools, Microsoft ODBC drivers, and their dependencies on Linux.

learn.microsoft.com

 

위 공식문서를 바탕으로 sqlcmd라는 명령어를 설치했습니다.

 

그리고 이제 명령어를 입력해야하는데, 저는 'server-admin'과 'admin-password'를 만든 적이 없습니다.

Azure SQL Database를 만들 때 설정했다고 하는데... 기억이 안나네요.

server-admin은 configuration에서 볼 수 있겠고, admin-password는 변경해보도록 합시다.

 

https://learn.microsoft.com/en-us/answers/questions/1855217/how-do-i-reset-the-admin-user-password-on-my-two-m

 

How do I reset the admin user password on my two MS SQL databases - Microsoft Q&A

During company re-org the password to the admin user on my prep and prod MS SQL databases has been lost. How do I get them reset please?

learn.microsoft.com

https://stackoverflow.com/questions/73852789/cant-reset-password-for-azure-sql-server-greyed-out

 

Can't reset password for Azure SQL server (greyed out)

I've got a brand new SQL database inside my new Azure server and I want to allow access to some users that I have designated with the 'Contributor' role, so they can write some SQL code. However, t...

stackoverflow.com

저는 Reset password 버튼이 비활성화되어있어서 한번 더 찾아봤습니다.

'Support only Microsoft Entra authentication for this server' 버튼을 비활성화해야 바꿀 수 있더라고요.

 

비밀번호를 바꾸고 연결을 시도해봤습니다.

 

 

이렇게 DB에 잘 연결된 것을 확인할 수 있습니다.

 

저는 대화형 모드로 sqlcmd를 설치했기 때문에 명령어를 모두 입력하고 'go'라는 키워드를 입력해야 이때까지 입력한 명령어가 서버로 전송됩니다.

그리고 sql 입력창에서 나올때는 'exit' 키워드를 입력하면 됩니다.

 

 

 

 

그런데 뭔가 Microsoft Entra ID / authentication으로 더 편하게 연결할 수 있는 방법이 있을 것 같은데, 제가 Azure를 잘 몰라서 그런지 파악하기가 힘드네요... 혹시 더 쉽고 안전한 방법 아시는 분이 있으시다면 댓글 남겨주시면 감사하겠습니다.