Guida introduttiva: Creare un endpoint privato con Bicep
In questa guida introduttiva si userà Bicep per creare un endpoint privato.
Bicep è un linguaggio specifico di dominio (DSL) che usa la sintassi dichiarativa per distribuire le risorse di Azure. Offre sintassi concisa, indipendenza dai tipi affidabile e supporto per il riutilizzo del codice. Bicep offre la migliore esperienza di creazione per le soluzioni di infrastruttura come codice in Azure.
È anche possibile creare un endpoint privato usando il portale di Azure, Azure PowerShell, l'interfaccia della riga di comando di Azure o un modello di Azure Resource Manager.
Prerequisiti
È necessario un account Azure con una sottoscrizione attiva. Se non si ha già un account Azure, è possibile crearne uno gratuitamente.
Esaminare il file Bicep
Questo file Bicep crea un endpoint privato per un'istanza di database SQL di Azure.
Il file Bicep usato da questa guida introduttiva proviene dai modelli di avvio rapido di 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
}
]
}
}
}
Il file Bicep definisce più risorse di Azure:
- Microsoft.Sql/servers: istanza di database SQL con il database di esempio.
- Microsoft.Sql/servers/databases: database di esempio.
- Microsoft.Network/virtualNetworks: rete virtuale in cui viene distribuito l'endpoint privato.
- Microsoft.Network/privateEndpoints: endpoint privato usato per accedere all'istanza di database SQL.
- Microsoft.Network/privateDnsZones: zona usata per risolvere l'indirizzo IP dell'endpoint privato.
- Microsoft.Network/privateDnsZones/virtualNetworkLinks
- Microsoft.Network/privateEndpoints/privateDnsZoneGroups: gruppo di zone usato per associare l'endpoint privato a una zona DNS privata.
- Microsoft.Network/publicIpAddresses: indirizzo IP pubblico usato per accedere alla macchina virtuale.
- Microsoft.Network/networkInterfaces: interfaccia di rete per la macchina virtuale.
- Microsoft.Compute/virtualMachines: macchina virtuale usata per testare la connessione dell'endpoint privato all'istanza di database SQL.
Distribuire il file Bicep
Salvare il file Bicep come main.bicep nel computer locale.
Distribuisci il file Bicep usando l'interfaccia della riga di comando di Azure o Azure PowerShell.
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>
Nota
Sostituire <admin-login> con il nome utente per il server logico SQL. Sostituire <vm-login> con il nome utente per la macchina virtuale. Verrà richiesto di immettere sqlAdministratorLoginPassword. Verrà inoltre richiesto di immettere vmAdminPassword, che deve avere una lunghezza di almeno 12 caratteri e contenere almeno un carattere minuscolo e maiuscolo e un carattere speciale.
Al termine della distribuzione verrà visualizzato un messaggio che indica che la distribuzione è stata completata.
Convalidare la distribuzione
Nota
Il file Bicep genera un nome univoco per la risorsa myVm{uniqueid} della macchina virtuale e per la risorsa database SQL sqlserver{uniqueid}. Sostituire il valore generato per {UniqueId}.
Connettersi a una VM da Internet
Connettersi alla macchina virtuale myVm{uniqueid} da Internet eseguendo le operazioni seguenti:
Nella barra di ricerca portale di Azure immettere myVm{uniqueid}.
Selezionare Connetti. Verrà visualizzata la finestra Connetti alla macchina virtuale.
Selezionare Scarica file RDP. Azure crea un file RDP (Remote Desktop Protocol) e lo scarica nel computer.
Aprire il file RDP scaricato.
a. Quando richiesto, selezionare Connetti.
b. Immettere il nome utente e la password specificati al momento della creazione della macchina virtuale.Nota
Potrebbe essere necessario selezionare Altre opzioni>Usare un account diverso per specificare le credenziali immesse al momento della creazione della macchina virtuale.
Seleziona OK.
Durante il processo di accesso potrebbe essere visualizzato un avviso relativo al certificato. Se sì, selezionare Sì oppure Continua.
Quando viene visualizzato il desktop della macchina virtuale, ridurlo a icona per tornare al desktop locale.
Accedere al server di database SQL privatamente dalla macchina virtuale
Per connettersi al server database SQL dalla macchina virtuale usando l'endpoint privato, eseguire le operazioni seguenti:
Nel Desktop remoto di myVM{uniqueid}aprire PowerShell.
Esegui questo comando:
nslookup sqlserver{uniqueid}.database.windows.net
Verrà visualizzato un messaggio simile al seguente:
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
Installare SQL Server Management Studio.
Nel riquadro Connetti al server eseguire le operazioni seguenti:
- In Tipo di server selezionare motore di database.
- In Nome server selezionare sqlserver{uniqueid}.database.windows.net.
- Per Nome utente immettere il nome utente specificato in precedenza.
- Per Password immettere la password specificata in precedenza.
- Per Memorizza password selezionare Sì.
Selezionare Connetti.
Nel riquadro sinistro selezionare Database. Facoltativamente, è possibile creare o eseguire query sulle informazioni di sample-db.
Chiudere la connessione Desktop remoto a myVm{uniqueid}.
Pulire le risorse
Quando le risorse create con il servizio Collegamento privato non sono più necessarie, eliminare il gruppo di risorse. Oltre al servizio Collegamento privato verranno rimosse tutte le risorse correlate.
az group delete --name exampleRG
Passaggi successivi
Per altre informazioni sui servizi che supportano endpoint privati, vedere: