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

Azure Private endpoint is the fundamental building block for Private Link in Azure. It enables Azure resources, like virtual machines (VMs), to privately and securely communicate with Private Link resources such as Azure SQL server.

Diagram of resources created in private endpoint quickstart.

In this tutorial, you learn how to:

  • Create a virtual network and bastion host.
  • Create a virtual machine.
  • Create an Azure SQL server and private endpoint.
  • Test connectivity to the SQL server private endpoint.

If you don't have an Azure subscription, create a free account before you begin.

Prerequisites

  • An Azure subscription

Sign in to Azure

Sign in to the Azure portal.

Create a virtual network and an Azure Bastion host

The following procedure creates a virtual network with a resource subnet, an Azure Bastion subnet, and a Bastion host:

  1. In the portal, search for and select Virtual networks.

  2. On the Virtual networks page, select + Create.

  3. On the Basics tab of Create virtual network, enter or select the following information:

    Setting Value
    Project details
    Subscription Select your subscription.
    Resource group Select Create new.
    Enter test-rg for the name.
    Select OK.
    Instance details
    Name Enter vnet-1.
    Region Select East US 2.

    Screenshot of the Basics tab for creating a virtual network in the Azure portal.

  4. Select Next to proceed to the Security tab.

  5. In the Azure Bastion section, select Enable Bastion.

    Bastion uses your browser to connect to VMs in your virtual network over Secure Shell (SSH) or Remote Desktop Protocol (RDP) by using their private IP addresses. The VMs don't need public IP addresses, client software, or special configuration. For more information, see What is Azure Bastion?.

    Note

    Hourly pricing starts from the moment that Bastion is deployed, regardless of outbound data usage. For more information, see Pricing and SKUs. If you're deploying Bastion as part of a tutorial or test, we recommend that you delete this resource after you finish using it.

  6. In Azure Bastion, enter or select the following information:

    Setting Value
    Azure Bastion host name Enter bastion.
    Azure Bastion public IP address Select Create a public IP address.
    Enter public-ip-bastion in Name.
    Select OK.

    Screenshot of options for enabling an Azure Bastion host as part of creating a virtual network in the Azure portal.

  7. Select Next to proceed to the IP Addresses tab.

  8. In the address space box in Subnets, select the default subnet.

  9. In Edit subnet, enter or select the following information:

    Setting Value
    Subnet details
    Subnet template Leave the default of Default.
    Name Enter subnet-1.
    Starting address Leave the default of 10.0.0.0.
    Subnet size Leave the default of /24 (256 addresses).

    Screenshot of configuration details for a subnet.

  10. Select Save.

  11. Select Review + create at the bottom of the window. When validation passes, select Create.

Create test virtual machine

The following procedure creates a test virtual machine (VM) named vm-1 in the virtual network.

  1. In the portal, search for and select Virtual machines.

  2. In Virtual machines, select + Create, then Azure virtual machine.

  3. On the Basics tab of Create a virtual machine, enter or select the following information:

    Setting Value
    Project details
    Subscription Select your subscription.
    Resource group Select test-rg.
    Instance details
    Virtual machine name Enter vm-1.
    Region Select East US 2.
    Availability options Select No infrastructure redundancy required.
    Security type Leave the default of Standard.
    Image Select Ubuntu Server 22.04 LTS - x64 Gen2.
    VM architecture Leave the default of x64.
    Size Select a size.
    Administrator account
    Authentication type Select Password.
    Username Enter azureuser.
    Password Enter a password.
    Confirm password Reenter the password.
    Inbound port rules
    Public inbound ports Select None.
  4. Select the Networking tab at the top of the page.

  5. Enter or select the following information in the Networking tab:

    Setting Value
    Network interface
    Virtual network Select vnet-1.
    Subnet Select subnet-1 (10.0.0.0/24).
    Public IP Select None.
    NIC network security group Select Advanced.
    Configure network security group Select Create new.
    Enter nsg-1 for the name.
    Leave the rest at the defaults and select OK.
  6. Leave the rest of the settings at the defaults and select Review + create.

  7. Review the settings and select Create.

Note

Virtual machines in a virtual network with a bastion host don't need public IP addresses. Bastion provides the public IP, and the VMs use private IPs to communicate within the network. You can remove the public IPs from any VMs in bastion hosted virtual networks. For more information, see Dissociate a public IP address from an Azure VM.

Note

Azure provides a default outbound access IP for VMs that either aren't assigned a public IP address or are in the backend pool of an internal basic Azure load balancer. The default outbound access IP mechanism provides an outbound IP address that isn't configurable.

The default outbound access IP is disabled when one of the following events happens:

  • A public IP address is assigned to the VM.
  • The VM is placed in the backend pool of a standard load balancer, with or without outbound rules.
  • An Azure NAT Gateway resource is assigned to the subnet of the VM.

VMs that you create by using virtual machine scale sets in flexible orchestration mode don't have default outbound access.

For more information about outbound connections in Azure, see Default outbound access in Azure and Use Source Network Address Translation (SNAT) for outbound connections.

Create an Azure SQL server and private endpoint

In this section, you create a SQL server in Azure.

  1. In the search box at the top of the portal, enter SQL. Select SQL databases in the search results.

  2. In SQL databases, select + Create.

  3. In the Basics tab of Create SQL Database, enter or select the following information:

    Setting Value
    Project details
    Subscription Select your subscription.
    Resource group Select test-rg.
    Database details
    Database name Enter sql-db.
    Server Select Create new.
    Enter sql-server-1 in Server name (Server names must be unique, replace sql-server-1 with a unique value).
    Select (US) East US 2 in Location.
    Select Use SQL authentication.
    Enter a server admin sign-in and password.
    Select OK.
    Want to use SQL elastic pool? Select No.
    Workload environment Leave the default of Production.
    Backup storage redundancy
    Backup storage redundancy Select Locally redundant backup storage.
  4. Select Next: Networking.

  5. In the Networking tab of Create SQL Database, enter or select the following information:

    Setting Value
    Network connectivity
    Connectivity method Select Private endpoint.
    Private endpoints
    Select +Add private endpoint.
    Create private endpoint
    Subscription Select your subscription.
    Resource group Select test-rg.
    Location Select East US 2.
    Name Enter private-endpoint-sql.
    Target subresource Select SqlServer.
    Networking
    Virtual network Select vnet-1.
    Subnet Select subnet-1.
    Private DNS integration
    Integrate with private DNS zone Select Yes.
    Private DNS zone Leave the default of privatelink.database.windows.net.
  6. Select OK.

  7. Select Review + create.

  8. Select Create.

Important

When adding a Private endpoint connection, public routing to your Azure SQL server is not blocked by default. The setting "Deny public network access" under the "Firewall and virtual networks" blade is left unchecked by default. To disable public network access ensure this is checked.

Disable public access to Azure SQL logical server

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

  1. In the search box at the top of the portal, enter SQL server. Select SQL servers in the search results.

  2. Select sql-server-1.

  3. On the Networking page, select Public access tab, then select Disable for Public network access.

  4. Select Save.

Test connectivity to private endpoint

In this section, you use the virtual machine you created in the previous steps to connect to the SQL server across the private endpoint.

  1. In the search box at the top of the portal, enter Virtual machine. Select Virtual machines in the search results.

  2. Select vm-1.

  3. In Operations select Bastion.

  4. Enter the username and password for the virtual machine.

  5. Select Connect.

  6. To verify name resolution of the private endpoint, enter the following command in the terminal window:

    nslookup sql-server-1.database.windows.net
    

    You receive a message similar to the following example. The IP address returned is the private IP address of the private endpoint.

    Server:    127.0.0.53
    Address:   127.0.0.53#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
    
  7. Install the SQL server command line tools from Install the SQL Server command-line tools sqlcmd and bcp on Linux. Proceed with the next steps after the installation is complete.

  8. Use the following commands to connect to the SQL server you created in the previous steps.

    • Replace <server-admin> with the admin username you entered during the SQL server creation.

    • Replace <admin-password> with the admin password you entered during SQL server creation.

    • Replace sql-server-1 with the name of your SQL server.

    sqlcmd -S sql-server-1.database.windows.net -U '<server-admin>' -P '<admin-password>'
    
  9. A SQL command prompt is displayed on successful sign in. Enter exit to exit the sqlcmd tool.

Clean up resources

When you finish using the resources that you created, you can delete the resource group and all its resources:

  1. In the Azure portal, search for and select Resource groups.

  2. On the Resource groups page, select the test-rg resource group.

  3. On the test-rg page, select Delete resource group.

  4. Enter test-rg in Enter resource group name to confirm deletion, and then select Delete.

Next steps

In this tutorial, you learned how to create:

  • Virtual network and bastion host.

  • Virtual machine.

  • Azure SQL server with private endpoint.

You used the virtual machine to test connectivity privately and securely to the SQL server across the private endpoint.

As a next step, you may also be interested in the Web app with private connectivity to Azure SQL Database architecture scenario, which connects a web application outside of the virtual network to the private endpoint of a database.