教程:通过 Azure PowerShell 使用 Azure 专用终结点连接到 Azure SQL 服务器

Azure 专用终结点是 Azure 中专用链接的构建基块。 它使 Azure 资源(例如虚拟机 (VM))能够以私密方式来与专用链接资源通信。

在专用终结点快速入门中创建的资源的示意图。

本教程介绍如何执行下列操作:

  • 创建虚拟网络和 Bastion 主机。
  • 创建虚拟机。
  • 创建 Azure SQL 服务器和专用终结点。
  • 测试到 SQL 服务器专用终结点的连接。

必备条件

  • 具有活动订阅的 Azure 帐户。 创建试用版订阅
  • 如果选择在本地安装并使用 PowerShell,则本文需要 Azure PowerShell 模块 5.4.1 或更高版本。 运行 Get-Module -ListAvailable Az 查找已安装的版本。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 如果在本地运行 PowerShell,则还需运行 Connect-AzAccount -Environment AzureChinaCloud 以创建与 Azure 的连接。

创建资源组

Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。

使用 New-AzResourceGroup 创建资源组:

New-AzResourceGroup -Name 'CreateSQLEndpointTutorial-rg' -Location 'chinaeast2'

创建虚拟网络和堡垒主机

在本部分中,你将创建虚拟网络、子网和堡垒主机。

堡垒主机将用于安全地连接到虚拟机,以测试专用终结点。

使用以下命令创建虚拟网络和堡垒主机:

## Create backend subnet config. ##
$subnetConfig = New-AzVirtualNetworkSubnetConfig -Name myBackendSubnet -AddressPrefix 10.0.0.0/24

## Create Azure Bastion subnet. ##
$bastsubnetConfig = New-AzVirtualNetworkSubnetConfig -Name AzureBastionSubnet -AddressPrefix 10.0.1.0/24

## Create the virtual network. ##
$parameters1 = @{
    Name = 'MyVNet'
    ResourceGroupName = 'CreateSQLEndpointTutorial-rg'
    Location = 'chinaeast2'
    AddressPrefix = '10.0.0.0/16'
    Subnet = $subnetConfig, $bastsubnetConfig
}
$vnet = New-AzVirtualNetwork @parameters1

## Create public IP address for bastion host. ##
$parameters2 = @{
    Name = 'myBastionIP'
    ResourceGroupName = 'CreateSQLEndpointTutorial-rg'
    Location = 'chinaeast2'
    Sku = 'Standard'
    AllocationMethod = 'Static'
}
$publicip = New-AzPublicIpAddress @parameters2

## Create bastion host ##
$parameters3 = @{
    ResourceGroupName = 'CreateSQLEndpointTutorial-rg'
    Name = 'myBastion'
    PublicIpAddress = $publicip
    VirtualNetwork = $vnet
}
New-AzBastion @parameters3

部署 Azure Bastion 主机需要几分钟时间。

创建测试虚拟机

在本部分中,你将创建将用来测试专用终结点的虚拟机。

使用以下内容创建虚拟机:

## Set credentials for server admin and password. ##
$cred = Get-Credential

## Command to get virtual network configuration. ##
$vnet = Get-AzVirtualNetwork -Name myVNet -ResourceGroupName CreateSQLEndpointTutorial-rg

## Command to create network interface for VM ##
$parameters1 = @{
    Name = 'myNicVM'
    ResourceGroupName = 'CreateSQLEndpointTutorial-rg'
    Location = 'chinaeast2'
    Subnet = $vnet.Subnets[0]
}
$nicVM = New-AzNetworkInterface @parameters1

## Create a virtual machine configuration.##
$parameters2 = @{
    VMName = 'myVM'
    VMSize = 'Standard_DS1_v2'
}
$parameters3 = @{
    ComputerName = 'myVM'
    Credential = $cred
}
$parameters4 = @{
    PublisherName = 'MicrosoftWindowsServer'
    Offer = 'WindowsServer'
    Skus = '2019-Datacenter'
    Version = 'latest'
}
$vmConfig = 
New-AzVMConfig @parameters2 | Set-AzVMOperatingSystem -Windows @parameters3 | Set-AzVMSourceImage @parameters4 | Add-AzVMNetworkInterface -Id $nicVM.Id

## Create the virtual machine ##
New-AzVM -ResourceGroupName 'CreateSQLEndpointTutorial-rg' -Location 'chinaeast2' -VM $vmConfig

注意

Azure 会为未分配公共 IP 地址的 VM 或位于内部基本 Azure 负载均衡器的后端池中的 VM 提供默认出站访问 IP。 默认出站访问 IP 机制会提供不可配置的出站 IP 地址。

发生以下事件之一时,将禁用默认出站访问 IP:

  • 将公共 IP 地址分配给 VM。
  • 虚拟机被放置在标准负载平衡器的后端池中,有无出站规则均可。
  • 向 VM 的子网分配了 Azure NAT 网关资源。

在灵活业务流程模式下通过使用虚拟机规模集创建的 VM 没有默认的出站访问权限。

有关 Azure 中的出站连接的详细信息,请参阅 Azure 中的默认出站访问权限使用用于出站连接的源网络地址转换 (SNAT)

创建 Azure SQL 服务器

在本部分中,你将使用以下内容创建 SQL 服务器和数据库:

创建 SQL 服务器和数据库。 将 <sql-server-name> 替换为唯一服务器名称:

## Set and administrator and password for the SQL server. ##
$cred = Get-Credential

## Create SQL server ##
$parameters1 = @{
    ResourceGroupName = 'CreateSQLEndpointTutorial-rg'
    ServerName = '<sql-server-name>'
    SqlAdministratorCredentials = $cred
    Location = 'chinaeast2'
}
New-AzSqlServer @parameters1

## Create database. ##
$parameters2 = @{
    ResourceGroupName = 'CreateSQLEndpointTutorial-rg'
    ServerName = '<sql-server-name>'
    DatabaseName = 'mysqldatabase'
    RequestedServiceObjectiveName = 'S0'
    SampleName = 'AdventureWorksLT'
}
New-AzSqlDatabase @parameters2

创建专用终结点

在本部分中,你将使用以下命令创建专用终结点和连接:

## Place SQL server into variable. Replace <sql-server-name> with your server name ##
$server = Get-AzSqlServer -ResourceGroupName CreateSQLEndpointTutorial-rg -ServerName <sql-server-name>

## Create private endpoint connection. ##
$parameters1 = @{
    Name = 'myConnection'
    PrivateLinkServiceId = $server.ResourceID
    GroupID = 'sqlserver'
}
$privateEndpointConnection = New-AzPrivateLinkServiceConnection @parameters1

## Place virtual network into variable. ##
$vnet = Get-AzVirtualNetwork -ResourceGroupName 'CreateSQLEndpointTutorial-rg' -Name 'myVNet'

## Disable private endpoint network policy ##
$vnet.Subnets[0].PrivateEndpointNetworkPolicies = "Disabled"
$vnet | Set-AzVirtualNetwork

## Create private endpoint
$parameters2 = @{
    ResourceGroupName = 'CreateSQLEndpointTutorial-rg'
    Name = 'myPrivateEndpoint'
    Location = 'chinaeast2'
    Subnet = $vnet.Subnets[0]
    PrivateLinkServiceConnection = $privateEndpointConnection
}
New-AzPrivateEndpoint @parameters2

配置专用 DNS 区域

在本部分中,你将使用以下命令创建和配置专用 DNS 区域:

## Place virtual network into variable. ##
$vnet = Get-AzVirtualNetwork -ResourceGroupName 'CreateSQLEndpointTutorial-rg' -Name 'myVNet'

## Create private dns zone. ##
$parameters1 = @{
    ResourceGroupName = 'CreateSQLEndpointTutorial-rg'
    Name = 'privatelink.database.chinacloudapi.cn'
}
$zone = New-AzPrivateDnsZone @parameters1

## Create dns network link. ##
$parameters2 = @{
    ResourceGroupName = 'CreateSQLEndpointTutorial-rg'
    ZoneName = 'privatelink.database.chinacloudapi.cn'
    Name = 'myLink'
    VirtualNetworkId = $vnet.Id
}
$link = New-AzPrivateDnsVirtualNetworkLink @parameters2

## Create DNS configuration ##
$parameters3 = @{
    Name = 'privatelink.database.chinacloudapi.cn'
    PrivateDnsZoneId = $zone.ResourceId
}
$config = New-AzPrivateDnsZoneConfig @parameters3

## Create DNS zone group. ##
$parameters4 = @{
    ResourceGroupName = 'CreateSQLEndpointTutorial-rg'
    PrivateEndpointName = 'myPrivateEndpoint'
    Name = 'myZoneGroup'
    PrivateDnsZoneConfig = $config
}
New-AzPrivateDnsZoneGroup @parameters4

测试到专用终结点的连接

本部分将使用在上一步骤中创建的虚拟机通过专用终结点连接到 SQL 服务器。

  1. 登录 Azure 门户

  2. 在左侧导航窗格中选择“资源组”。

  3. 选择“CreateSQLEndpointTutorial-rg”。

  4. 选择“myVM”。

  5. myVM的“概述”页上,选择“连接”,然后选择“堡垒”。

  6. 选择蓝色的“使用堡垒”按钮。

  7. 输入在创建虚拟机期间输入的用户名和密码。

  8. 连接后,在服务器上打开 Windows PowerShell。

  9. 输入 nslookup <sqlserver-name>.database.chinacloudapi.cn。 将 <sqlserver-name> 替换为在上一步骤中创建的 SQL 服务器的名称。 你将收到类似于以下所示内容的消息:

    Server:  UnKnown
    Address:  168.63.129.16
    
    Non-authoritative answer:
    Name:    mysqlserver8675.privatelink.database.chinacloudapi.cn
    Address:  10.0.0.5
    Aliases:  mysqlserver8675.database.chinacloudapi.cn
    

    将为 SQL 服务器名称返回专用 IP 地址 10.0.0.5。 此地址位于你之前创建的虚拟网络的子网中。

  10. 在 myVM 上安装 SQL Server Management Studio

  11. 打开 SQL Server Management Studio

  12. 在连接服务器中,输入或选择以下信息

    设置
    服务器类型 选择数据库引擎
    服务器名称 输入 <sql-server-name>.database.chinacloudapi.cn
    身份验证 选择SQL Server 身份验证
    用户名 输入在服务器创建过程中所输入的用户名
    Password 输入在服务器创建过程中所输入的密码
    记住密码 选择
  13. 选择“连接”。

  14. 浏览左侧菜单中的数据库。

  15. (可选)创建或查询 mydatabase 中的信息。

  16. 关闭到 myVM 的堡垒连接。

清理资源

用完专用终结点、SQL 服务器和 VM 之后,请删除资源组及其包含的所有资源:

  1. 在门户顶部的“搜索”框中输入“CreateSQLEndpointTutorial-rg”,然后从搜索结果中选择“CreateSQLEndpointTutorial-rg” 。

  2. 选择“删除资源组”

  3. 在“键入资源组名称”中输入“CreateSQLEndpointTutorial-rg”,然后选择“删除” 。

后续步骤

在本教程中,你已创建:

  • 虚拟网络和堡垒主机。
  • 虚拟机。
  • 具有专用终结点的 Azure SQL 服务器。

你使用虚拟机通过专用终结点安全测试了到 SQL 服务器的连接。

对于下一步,你可能还会对“与 Azure SQL 数据库建立专用连接的 Web 应用”体系结构场景感兴趣,该场景将虚拟网络以外的 Web 应用程序连接到数据库的专用终结点。