Skip to content

lab-02 - create a private endpoint for Azure SQL using Azure Portal

There are several ways you can create Azure Private Endpoint. You can use Azure Portal, Azure CLI, Azure PowerShell, ARM templates, or Bicep. In this lab, we'll use Azure POrtal to create a private endpoint for Azure SQL Server.

Task #1 - test connectivity to SQL Server

If you already created a connection to Azure SQL Server in Azure Data Studio (Task #7 of lab-01), use one. Otherwise, create a new connection to Azure SQL Server and connect to it. You should be able to connect to Azure SQL Server.

sql1

Task #2 - create a private endpoint

In the Azure portal, search for and select your SQL Server instance. Navigate to Security -> Networking -> Private access and click on + Create private endpoint button.

01

At the Create a private endpoint -> Basic tab, fill in the following parameters:

Parameter Value
Subscription your subscription
Resource group iac-ws5-rg
Name YOUR-SQL-SERVER-NAME-ple
Network Interface Name YOUR-SQL-SERVER-NAME-ple-nic
Region West Europe

02

Click on Next: Resource > button and select sqlServer as a Target sub-resource parameter under Resource tab:

03

Click on Next: Virtual Network > button and fill in the following parameters under Virtual Network tab:

Parameter Value
Virtual network iac-ws5-vnet
Subnet plinks-snet

Keep the rest of parameters as default.

04

Click on Next: DNS > button and set the following parameters under DNS tab:

Parameter Value
Subscription You subscription
Resource group iac-ws5-rg

05

Click on Next: Tags > button, skip this step (or add tags if you want to), and click on Next: Review + create > button.

It will do a validation check and if everything is valid, click on Create button to create a private endpoint. If there re some validation errors, fix them and try again.

06

It will take a few minutes to deploy private endpoint.

Task #3 - check what was deployed

Open YOUR-SQL-SERVER-NAME-ple private endpoint resource and check information under Overview tab:

07

From here we can see that private endpoint is associated with YOUR-SQL-SERVER-NAME instance of Azure SQL Server, it uses YOUR-SQL-SERVER-NAME-ple-nic Network interface that is deployed into plinks-snet subnet in iac-ws5-vnet virtual network.

Now, open YOUR-SQL-SERVER-NAME-ple-nic network interface resource and check information under Overview tab:

08

Here we can find what private IP was assigned to the private endpoint. In my case, it was 10.10.1.4. The same information you can find under Connected devices tab of iac-ws5-vnet Virtual network resource:

09

Back to YOUR-SQL-SERVER-NAME-ple private endpoint resource and check information under DNS configuration tab:

10

What we can see here is that SQL Server instance is now has YOUR-SQL-SERVER-NAME.privatelink.database.windows.net FQDN which will be resolved with 10.10.1.4 IP address.

Finally, open privatelink.database.windows.net Private DNS Zone resource and check information under Overview tab:

11

Here you can see that a new A-record was created for YOUR-SQL-SERVER-NAME instance pointing to IP address of YOUR-SQL-SERVER-NAME-ple-nic network interface.

Task #4 - resolve private endpoint

RDP into testVM, open PowerShell console, and run the following command:

$sqlServerName = (az sql server list -g iac-ws5-rg --query [0].name -o tsv)
Resolve-DnsName "$sqlServerName.database.windows.net"

You'll receive a message similar to what is displayed below:

Server:  UnKnown
Address:  168.63.129.16

Non-authoritative answer:
Name:    YOUR-SQL-SERVER-NAME.privatelink.database.windows.net
Address:  10.10.1.4
Aliases:  YOUR-SQL-SERVER-NAME.database.windows.net

As you can see from test VM the YOUR-SQL-SERVER-NAME.database.windows.net is resolved to private IP address of Azure SQL Server instance via YOUR-SQL-SERVER-NAME.privatelink.database.windows.net alias. This is because this VM is deployed on Azure and uses default Azure DNS server (168.63.129.16) and it knows about privatelink.database.windows.net Private DNS Zone and therefore can resolve YOUR-SQL-SERVER-NAME.database.windows.net to private IP address.

Run the same command from your PC and check the output.

$sqlServerName = (az sql server list -g iac-ws5-rg --query [0].name -o tsv)
Resolve-DnsName "$sqlServerName.database.windows.net"

You'll receive a message similar to what is displayed below:

Server:  dnscache01.get.no
Address:  80.232.93.171

Non-authoritative answer:
Name:    cr4.westeurope1-a.control.database.windows.net
Address:  104.40.168.105
Aliases:  YOUR-SQL-SERVER-NAME.database.windows.net
          YOUR-SQL-SERVER-NAME.privatelink.database.windows.net
          dataslice9.westeurope.database.windows.net
          dataslice9westeurope.trafficmanager.net

As you can see, from your PC YOUR-SQL-SERVER-NAME.database.windows.net is resolved to public IP address of Azure SQL Server instance. Since your PC uses either your internal home DNS server or DNS server of your internet provider, it doesn't know anything about privatelink.database.windows.net Private DNS Zone and therefore resolves YOUR-SQL-SERVER-NAME.database.windows.net to known public IP.

Task #4 - disable public access to Azure SQL server

Assume you would like to disable all public access to your Azure SQL server, and only allow connections from your virtual network.

Navigate to Networking page of YOUR-SQL-SERVER-NAME instance of Azure SQL Server, select Public access tab, then select Disable for Public network access.

sql2

Back to Azure Data Studio on your PC and try to reconnect to YOUR-SQL-SERVER-NAME.database.windows.net instance. You'll receive an error message similar to this one:

sql3

Task #5 (optional) - test connectivity to SQL server from the testVM

Remote into the testVM, download and install Azure Data Studio and add new connection to YOUR-SQL-SERVER-NAME.database.windows.net instance of Azure SQL Server as described at Task #7 of lab-01.

You should be able to connect to the SQL server instance from the testVM via private endpoint.

Task #6 - use hosts file to resolve private endpoint

Edit c:\Windows\System32\Drivers\etc\hosts (or /etc/hosts on Linux) file on your PC and add the following line. Note that you need to use your private IP address of SQL Server private endpoint.

10.10.1.4 YOUR-SQL-SERVER-NAME.database.windows.net

Save hosts file.

Now try to resolve YOUR-SQL-SERVER-NAME.database.windows.net from your PC.

$sqlServerName = (az sql server list -g iac-ws5-rg --query [0].name -o tsv)
Resolve-DnsName "$sqlServerName.database.windows.net"

Now it should be resolved to private IP address of Azure SQL Server instance.

Name                                           Type   TTL   Section    IPAddress
----                                           ----   ---   -------    ---------
YOUR-SQL-SERVER-NAME.database.windows.net               A      82234 Answer     10.10.1.4

Now, make sure that your Azure VPN connection is established, and try to reconnect to YOUR-SQL-SERVER-NAME.database.windows.net from Azure Data Studio. You'll be able to connect.

Task #7 - cleaning up

Disconnect from Azure SQL Server instance. Delete what you have added into hosts file.

Check that YOUR-SQL-SERVER-NAME.database.windows.net is now resolved to public IP address.

Resolve-DnsName "$sqlServerName.database.windows.net"