快速入門:使用 Bicep 建立私人端點
在本快速入門中,您將使用 Bicep 來建立私人端點。
Bicep 是使用宣告式語法來部署 Azure 資源的特定領域語言 (DSL)。 其提供簡潔的語法、可靠的類型安全,並支援程式碼重複使用。 Bicep 能夠為您在 Azure 中的基礎結構即程式碼解決方案,提供最佳的製作體驗。
您也可以使用 Azure 入口網站、Azure PowerShell、Azure CLI 或 Azure Resource Manager 範本來建立私人端點。
必要條件
您需要具有有效訂用帳戶的 Azure 帳戶。 如果您尚未擁有 Azure 帳戶,請建立免費帳戶。
檢閱 Bicep 檔案
此 Bicep 檔案會建立 Azure SQL Database 執行個體的私人端點。
本快速入門中使用的 Bicep 檔案是來自 Azure 快速入門範本。
@description('The administrator username of the SQL logical server')
param sqlAdministratorLogin string
@description('The administrator password of the SQL logical server.')
@secure()
param sqlAdministratorLoginPassword string
@description('Username for the Virtual Machine.')
param vmAdminUsername string
@description('Password for the Virtual Machine. The password must be at least 12 characters long and have lower case, upper characters, digit and a special character (Regex match)')
@secure()
param vmAdminPassword string
@description('The size of the VM')
param VmSize string = 'Standard_D2_v3'
@description('Location for all resources.')
param location string = resourceGroup().location
var vnetName = 'myVirtualNetwork'
var vnetAddressPrefix = '10.0.0.0/16'
var subnet1Prefix = '10.0.0.0/24'
var subnet1Name = 'mySubnet'
var sqlServerName = 'sqlserver${uniqueString(resourceGroup().id)}'
var databaseName = '${sqlServerName}/sample-db'
var privateEndpointName = 'myPrivateEndpoint'
var privateDnsZoneName = 'privatelink${environment().suffixes.sqlServerHostname}'
var pvtEndpointDnsGroupName = '${privateEndpointName}/mydnsgroupname'
var vmName = take('myVm${uniqueString(resourceGroup().id)}', 15)
var publicIpAddressName = '${vmName}PublicIP'
var networkInterfaceName = '${vmName}NetInt'
var osDiskType = 'StandardSSD_LRS'
resource sqlServer 'Microsoft.Sql/servers@2021-11-01-preview' = {
name: sqlServerName
location: location
tags: {
displayName: sqlServerName
}
properties: {
administratorLogin: sqlAdministratorLogin
administratorLoginPassword: sqlAdministratorLoginPassword
version: '12.0'
publicNetworkAccess: 'Disabled'
}
}
resource database 'Microsoft.Sql/servers/databases@2021-11-01-preview' = {
name: databaseName
location: location
sku: {
name: 'Basic'
tier: 'Basic'
capacity: 5
}
tags: {
displayName: databaseName
}
properties: {
collation: 'SQL_Latin1_General_CP1_CI_AS'
maxSizeBytes: 104857600
sampleName: 'AdventureWorksLT'
}
dependsOn: [
sqlServer
]
}
resource vnet 'Microsoft.Network/virtualNetworks@2021-05-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: [
vnetAddressPrefix
]
}
}
}
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2021-05-01' = {
parent: vnet
name: subnet1Name
properties: {
addressPrefix: subnet1Prefix
privateEndpointNetworkPolicies: 'Disabled'
}
}
resource privateEndpoint 'Microsoft.Network/privateEndpoints@2021-05-01' = {
name: privateEndpointName
location: location
properties: {
subnet: {
id: subnet.id
}
privateLinkServiceConnections: [
{
name: privateEndpointName
properties: {
privateLinkServiceId: sqlServer.id
groupIds: [
'sqlServer'
]
}
}
]
}
dependsOn: [
vnet
]
}
resource privateDnsZone 'Microsoft.Network/privateDnsZones@2020-06-01' = {
name: privateDnsZoneName
location: 'global'
properties: {}
dependsOn: [
vnet
]
}
resource privateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2020-06-01' = {
parent: privateDnsZone
name: '${privateDnsZoneName}-link'
location: 'global'
properties: {
registrationEnabled: false
virtualNetwork: {
id: vnet.id
}
}
}
resource pvtEndpointDnsGroup 'Microsoft.Network/privateEndpoints/privateDnsZoneGroups@2021-05-01' = {
name: pvtEndpointDnsGroupName
properties: {
privateDnsZoneConfigs: [
{
name: 'config1'
properties: {
privateDnsZoneId: privateDnsZone.id
}
}
]
}
dependsOn: [
privateEndpoint
]
}
resource publicIpAddress 'Microsoft.Network/publicIPAddresses@2021-05-01' = {
name: publicIpAddressName
location: location
tags: {
displayName: publicIpAddressName
}
properties: {
publicIPAllocationMethod: 'Dynamic'
}
}
resource networkInterface 'Microsoft.Network/networkInterfaces@2021-05-01' = {
name: networkInterfaceName
location: location
tags: {
displayName: networkInterfaceName
}
properties: {
ipConfigurations: [
{
name: 'ipConfig1'
properties: {
privateIPAllocationMethod: 'Dynamic'
publicIPAddress: {
id: publicIpAddress.id
}
subnet: {
id: subnet.id
}
}
}
]
}
dependsOn: [
vnet
]
}
resource vm 'Microsoft.Compute/virtualMachines@2021-11-01' = {
name: vmName
location: location
tags: {
displayName: vmName
}
properties: {
hardwareProfile: {
vmSize: VmSize
}
osProfile: {
computerName: vmName
adminUsername: vmAdminUsername
adminPassword: vmAdminPassword
}
storageProfile: {
imageReference: {
publisher: 'MicrosoftWindowsServer'
offer: 'WindowsServer'
sku: '2019-Datacenter'
version: 'latest'
}
osDisk: {
name: '${vmName}OsDisk'
caching: 'ReadWrite'
createOption: 'FromImage'
managedDisk: {
storageAccountType: osDiskType
}
diskSizeGB: 128
}
}
networkProfile: {
networkInterfaces: [
{
id: networkInterface.id
}
]
}
}
}
Bicep 檔案會定義多個 Azure 資源:
- Microsoft.Sql/servers:含有範例資料庫的 SQL Database 執行個體。
- Microsoft.Sql/servers/databases:範例資料庫。
- Microsoft.Network/virtualNetworks:私人端點部署所在的虛擬網路。
- Microsoft.Network/privateEndpoints:用來存取 SQL Database 執行個體的私人端點。
- Microsoft.Network/privateDnsZones:用來解析私人端點 IP 位址的區域。
- Microsoft.Network/privateDnsZones/virtualNetworkLinks
- Microsoft.Network/privateEndpoints/privateDnsZoneGroups:用來將私人端點與私人 DNS 區域建立關聯的區域群組。
- Microsoft.Network/publicIpAddresses:用來存取虛擬機器的公用 IP 位址。
- Microsoft.Network/networkInterfaces:虛擬機器的網路介面。
- Microsoft.Compute/virtualMachines:用來測試私人端點與 SQL Database 執行個體之間連線的虛擬機器。
部署 Bicep 檔案
將 Bicep 檔案以 main.bicep 儲存至本機電腦。
使用 Azure CLI 或 Azure PowerShell 部署 Bicep 檔案。
az group create --name exampleRG --location eastus az deployment group create --resource-group exampleRG --template-file main.bicep --parameters sqlAdministratorLogin=<admin-login> vmAdminUsername=<vm-login>
注意
將 <admin-login> 取代為 SQL 邏輯伺服器的使用者名稱。 將 <vm-login> 取代為虛擬機器的使用者名稱。 系統將提示您輸入 sqlAdministratorLoginPassword。 系統也會提示您輸入 vmAdminPassword,其長度必須至少為 12 個字元,而且至少包含一個小寫和大寫字元和一個特殊字元。
當部署完成時,您應該會看到指出部署成功的訊息。
驗證部署
注意
Bicep 檔案會為虛擬機器 myVm{uniqueid} 資源以及 SQL Database sqlserver{uniqueid} 資源產生唯一的名稱。 請以您產生的值替代 {uniqueid}。
從網際網路連線至 VM
執行下列動作,從網際網路連線至 VM myVm{uniqueid}:
在 Azure 入口網站的搜尋列中,輸入 myVm{uniqueid}。
選取 Connect。 [連線至虛擬機器] 隨即開啟。
選取 [下載 RDP 檔案]。 Azure 會建立一個「遠端桌面通訊協定」(RDP) 檔案,並下載至您的電腦。
開啟所下載的 RDP 檔案。
a. 如果出現提示,請選取 [連線]。
b. 輸入您在建立 VM 時所指定的使用者名稱和密碼。注意
可能需要選取 [更多選擇]>[使用不同的帳戶],以指定您在建立 VM 時輸入的認證。
選取 [確定]。
您可能會在登入過程中收到憑證警告。 如果如此,請選取 [是] 或 [繼續]。
在 VM 桌面出現之後,將其最小化以回到您的本機桌面。
從 VM 私下存取 SQL Database 伺服器
若要使用私人端點從 VM 連線到 SQL Database 伺服器,請執行下列動作:
在 myVM{uniqueid} 的遠端桌面中,開啟 PowerShell。
執行以下命令:
nslookup sqlserver{uniqueid}.database.windows.net
您會收到類似如下的訊息:
Server: UnKnown Address: 168.63.129.16 Non-authoritative answer: Name: sqlserver.privatelink.database.windows.net Address: 10.0.0.5 Aliases: sqlserver.database.windows.net
安裝 SQL Server Management Studio。
在 [連線至伺服器] 窗格中,執行下列動作:
- 對於 [伺服器類型],選取 [資料庫引擎]。
- 對於 [伺服器名稱],選取 [sqlserver{uniqueid}.database.windows.net]。
- 對於 [使用者名稱],輸入稍早提供的使用者名稱。
- 對於 [密碼],輸入稍早提供的密碼。
- 對於 [記住密碼],選取 [是]。
選取 Connect。
在左窗格中,選取 [資料庫]。 (選擇性) 您可以從 sample-db 建立或查詢資訊。
關閉對 myVm{uniqueid} 的遠端桌面連線。
清除資源
當您不再需要先前為私人連結服務建立的資源時,請刪除資源群組。 這會移除私人連結服務和所有相關資源。
az group delete --name exampleRG
下一步
如需支援私人端點的服務詳細資訊,請參閱: