共用方式為


快速入門:使用 Bicep 建立私人端點

在本快速入門中,您將使用 Bicep 來建立私人端點。

Bicep 是使用宣告式語法來部署 Azure 資源的特定領域語言 (DSL)。 其提供簡潔的語法、可靠的類型安全,並支援程式碼重複使用。 Bicep 能夠為您在 Azure 中的基礎結構即程式碼解決方案,提供最佳的製作體驗。

您也可以使用 Azure 入口網站Azure PowerShellAzure CLIAzure 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 資源:

部署 Bicep 檔案

  1. 將 Bicep 檔案以 main.bicep 儲存至本機電腦。

  2. 使用 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}

  1. 在 Azure 入口網站的搜尋列中,輸入 myVm{uniqueid}

  2. 選取 Connect。 [連線至虛擬機器] 隨即開啟。

  3. 選取 [下載 RDP 檔案]。 Azure 會建立一個「遠端桌面通訊協定」(RDP) 檔案,並下載至您的電腦。

  4. 開啟所下載的 RDP 檔案。

    a. 如果出現提示,請選取 [連線]
    b. 輸入您在建立 VM 時所指定的使用者名稱和密碼。

    注意

    可能需要選取 [更多選擇]>[使用不同的帳戶],以指定您在建立 VM 時輸入的認證。

  5. 選取 [確定]。

    您可能會在登入過程中收到憑證警告。 如果如此,請選取 [是] 或 [繼續]

  6. 在 VM 桌面出現之後,將其最小化以回到您的本機桌面。

從 VM 私下存取 SQL Database 伺服器

若要使用私人端點從 VM 連線到 SQL Database 伺服器,請執行下列動作:

  1. 在 myVM{uniqueid} 的遠端桌面中,開啟 PowerShell。

  2. 執行以下命令:

    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
    
  3. 安裝 SQL Server Management Studio。

  4. 在 [連線至伺服器] 窗格中,執行下列動作:

    • 對於 [伺服器類型],選取 [資料庫引擎]
    • 對於 [伺服器名稱],選取 [sqlserver{uniqueid}.database.windows.net]
    • 對於 [使用者名稱],輸入稍早提供的使用者名稱。
    • 對於 [密碼],輸入稍早提供的密碼。
    • 對於 [記住密碼],選取 [是]
  5. 選取 Connect

  6. 在左窗格中,選取 [資料庫]。 (選擇性) 您可以從 sample-db 建立或查詢資訊。

  7. 關閉對 myVm{uniqueid} 的遠端桌面連線。

清除資源

當您不再需要先前為私人連結服務建立的資源時,請刪除資源群組。 這會移除私人連結服務和所有相關資源。

az group delete --name exampleRG

下一步

如需支援私人端點的服務詳細資訊,請參閱: