Inicio rápido: Creación de un punto de conexión privado mediante una plantilla de Resource Manager
En este inicio rápido, se usa una plantilla de Azure Resource Manager (plantilla de ARM) para crear un punto de conexión privado.
Una plantilla de Azure Resource Manager es un archivo de notación de objetos JavaScript (JSON) que define tanto la infraestructura como la configuración de un proyecto. La plantilla usa sintaxis declarativa. Se describe la implementación deseada sin escribir la secuencia de comandos de programación para crear la implementación.
También puede crear un punto de conexión privado mediante Azure Portal, Azure PowerShell o la CLI de Azure.
Si su entorno cumple los requisitos previos y ya está familiarizado con el uso de plantillas de ARM, seleccione el botón Implementar en Azure aquí. La plantilla de ARM se abrirá en Azure Portal.
Requisitos previos
Necesita una cuenta de Azure con una suscripción activa. Si aún no tiene una cuenta de Azure, cree una de forma gratuita.
Revisión de la plantilla
Esta plantilla crea un punto de conexión privado para una instancia de Azure SQL Database.
La plantilla usada en este inicio rápido forma parte de las plantillas de inicio rápido de Azure.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "14846974543330599630"
}
},
"parameters": {
"sqlAdministratorLogin": {
"type": "string",
"metadata": {
"description": "The administrator username of the SQL logical server"
}
},
"sqlAdministratorLoginPassword": {
"type": "secureString",
"metadata": {
"description": "The administrator password of the SQL logical server."
}
},
"vmAdminUsername": {
"type": "string",
"metadata": {
"description": "Username for the Virtual Machine."
}
},
"vmAdminPassword": {
"type": "secureString",
"metadata": {
"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)"
}
},
"VmSize": {
"type": "string",
"defaultValue": "Standard_D2_v3",
"metadata": {
"description": "The size of the VM"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
}
},
"variables": {
"vnetName": "myVirtualNetwork",
"vnetAddressPrefix": "10.0.0.0/16",
"subnet1Prefix": "10.0.0.0/24",
"subnet1Name": "mySubnet",
"sqlServerName": "[format('sqlserver{0}', uniqueString(resourceGroup().id))]",
"databaseName": "[format('{0}/sample-db', variables('sqlServerName'))]",
"privateEndpointName": "myPrivateEndpoint",
"privateDnsZoneName": "[format('privatelink{0}', environment().suffixes.sqlServerHostname)]",
"pvtEndpointDnsGroupName": "[format('{0}/mydnsgroupname', variables('privateEndpointName'))]",
"vmName": "[take(format('myVm{0}', uniqueString(resourceGroup().id)), 15)]",
"publicIpAddressName": "[format('{0}PublicIP', variables('vmName'))]",
"networkInterfaceName": "[format('{0}NetInt', variables('vmName'))]",
"osDiskType": "StandardSSD_LRS"
},
"resources": [
{
"type": "Microsoft.Sql/servers",
"apiVersion": "2021-11-01-preview",
"name": "[variables('sqlServerName')]",
"location": "[parameters('location')]",
"tags": {
"displayName": "[variables('sqlServerName')]"
},
"properties": {
"administratorLogin": "[parameters('sqlAdministratorLogin')]",
"administratorLoginPassword": "[parameters('sqlAdministratorLoginPassword')]",
"version": "12.0",
"publicNetworkAccess": "Disabled"
}
},
{
"type": "Microsoft.Sql/servers/databases",
"apiVersion": "2021-11-01-preview",
"name": "[variables('databaseName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Basic",
"tier": "Basic",
"capacity": 5
},
"tags": {
"displayName": "[variables('databaseName')]"
},
"properties": {
"collation": "SQL_Latin1_General_CP1_CI_AS",
"maxSizeBytes": 104857600,
"sampleName": "AdventureWorksLT"
},
"dependsOn": [
"[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]"
]
},
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2021-05-01",
"name": "[variables('vnetName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[variables('vnetAddressPrefix')]"
]
}
}
},
{
"type": "Microsoft.Network/virtualNetworks/subnets",
"apiVersion": "2021-05-01",
"name": "[format('{0}/{1}', variables('vnetName'), variables('subnet1Name'))]",
"properties": {
"addressPrefix": "[variables('subnet1Prefix')]",
"privateEndpointNetworkPolicies": "Disabled"
},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
]
},
{
"type": "Microsoft.Network/privateEndpoints",
"apiVersion": "2021-05-01",
"name": "[variables('privateEndpointName')]",
"location": "[parameters('location')]",
"properties": {
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]"
},
"privateLinkServiceConnections": [
{
"name": "[variables('privateEndpointName')]",
"properties": {
"privateLinkServiceId": "[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]",
"groupIds": [
"sqlServer"
]
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]",
"[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]",
"[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
]
},
{
"type": "Microsoft.Network/privateDnsZones",
"apiVersion": "2020-06-01",
"name": "[variables('privateDnsZoneName')]",
"location": "global",
"properties": {},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
]
},
{
"type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
"apiVersion": "2020-06-01",
"name": "[format('{0}/{1}', variables('privateDnsZoneName'), format('{0}-link', variables('privateDnsZoneName')))]",
"location": "global",
"properties": {
"registrationEnabled": false,
"virtualNetwork": {
"id": "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]",
"[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
]
},
{
"type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
"apiVersion": "2021-05-01",
"name": "[variables('pvtEndpointDnsGroupName')]",
"properties": {
"privateDnsZoneConfigs": [
{
"name": "config1",
"properties": {
"privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]"
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]",
"[resourceId('Microsoft.Network/privateEndpoints', variables('privateEndpointName'))]"
]
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "2021-05-01",
"name": "[variables('publicIpAddressName')]",
"location": "[parameters('location')]",
"tags": {
"displayName": "[variables('publicIpAddressName')]"
},
"properties": {
"publicIPAllocationMethod": "Dynamic"
}
},
{
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2021-05-01",
"name": "[variables('networkInterfaceName')]",
"location": "[parameters('location')]",
"tags": {
"displayName": "[variables('networkInterfaceName')]"
},
"properties": {
"ipConfigurations": [
{
"name": "ipConfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIpAddressName'))]"
},
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]"
}
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIpAddressName'))]",
"[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]",
"[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
]
},
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2021-11-01",
"name": "[variables('vmName')]",
"location": "[parameters('location')]",
"tags": {
"displayName": "[variables('vmName')]"
},
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('VmSize')]"
},
"osProfile": {
"computerName": "[variables('vmName')]",
"adminUsername": "[parameters('vmAdminUsername')]",
"adminPassword": "[parameters('vmAdminPassword')]"
},
"storageProfile": {
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "2019-Datacenter",
"version": "latest"
},
"osDisk": {
"name": "[format('{0}OsDisk', variables('vmName'))]",
"caching": "ReadWrite",
"createOption": "FromImage",
"managedDisk": {
"storageAccountType": "[variables('osDiskType')]"
},
"diskSizeGB": 128
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
}
]
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
]
}
]
}
La plantilla define varios recursos de Azure:
- Microsoft.Sql/servers: la instancia de SQL Database con la base de datos de ejemplo.
- Microsoft.Sql/servers/databases: la base de datos de ejemplo.
- Microsoft.Network/virtualNetworks: la red virtual donde se implementa el punto de conexión privado.
- Microsoft.Network/privateEndpoints: punto de conexión privado que se usa para acceder a la instancia de SQL Database.
- Microsoft.Network/privateDnsZones: zona que se usa para resolver la dirección IP del punto de conexión privado.
- Microsoft.Network/privateDnsZones/virtualNetworkLinks
- Microsoft.Network/privateEndpoints/privateDnsZoneGroups: grupo de zonas que se usa para asociar el punto de conexión privado con una zona DNS privada.
- Microsoft.Network/publicIpAddresses: dirección IP pública que se usa para acceder a la máquina virtual.
- Microsoft.Network/networkInterfaces: la interfaz de red de la máquina virtual.
- Microsoft.Compute/virtualMachines: máquina virtual que se usa para probar la conexión del punto de conexión privado a la instancia de SQL Database.
Implementación de la plantilla
Implemente la plantilla de ARM en Azure haciendo lo siguiente:
Inicie sesión en Azure y abra la plantilla de ARM; para ello, seleccione el botón Implementar en Azure aquí. La plantilla crea el punto de conexión privado, la instancia de SQL Database, la infraestructura de red y una máquina virtual que se va a validar.
Seleccione el grupo de recursos o cree uno nuevo.
Escriba el nombre y la contraseña de inicio de sesión del administrador de SQL.
Escriba el nombre de usuario y la contraseña del administrador de la máquina virtual.
Lea la declaración de los términos y condiciones. Si está de acuerdo, seleccione Acepto los términos y condiciones indicadas anteriormente y, después, seleccione Comprar. La implementación puede tardar 20 minutos o más en completarse.
Validación de la implementación
Nota
La plantilla de Resource Manager genera un nombre único para el recurso de la máquina virtual myVm{uniqueid} y para el recurso sqlserver{uniqueid} de SQL Database. Sustituya el valor generado para {uniqueid} .
Conexión a una máquina virtual desde Internet
Conéctese a la VM myVm{uniqueid} desde Internet de la siguiente manera:
En la barra de búsqueda del portal, escriba myVm{uniqueid} .
Seleccione Conectar. Se abre Connect to virtual machine (Conectarse a una máquina virtual).
Seleccione Descargar archivo RDP. Azure crea un archivo de Protocolo de Escritorio remoto (RDP) y lo descarga en su equipo.
Abra el archivo RDP descargado.
a. Si se le pide, seleccione Conectar.
b. Escriba el nombre de usuario y la contraseña que especificó cuando creó la máquina virtual.Nota
Puede que deba seleccionar Más opciones>Usar otra cuenta para especificar las credenciales que escribió al crear la máquina virtual.
Seleccione Aceptar.
Puede recibir una advertencia de certificado durante el proceso de inicio de sesión. Si la recibe, seleccione Sí o Continuar.
Cuando aparezca el escritorio de la máquina virtual, minimícelo para volver al escritorio local.
Acceso al servidor de SQL Database de forma privada desde la máquina virtual
Para conectarse al servidor de SQL Database desde la máquina virtual mediante el punto de conexión privado, realice lo siguiente:
En el Escritorio remoto de myVm{uniqueid}, abra PowerShell.
Ejecute el siguiente comando:
nslookup sqlserver{uniqueid}.database.windows.net
Recibirá un mensaje similar a este:
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
Instale SQL Server Management Studio.
En el panel Conectar al servidor, haga lo siguiente:
- En Tipo de servidor, seleccione Motor de base de datos.
- En Nombre de servidor, seleccione sqlserver{uniqueid}.database.windows.net.
- En Nombre de usuario, escriba el nombre de usuario que se proporcionó anteriormente.
- En Contraseña, escriba la contraseña que se proporcionó anteriormente.
- En Recordar contraseña, seleccione Sí.
Seleccione Conectar.
En el panel izquierdo, seleccione Bases de datos. También tiene la opción de crear o consultar información desde sample-db.
Cierre la conexión a Escritorio remoto a myVm{uniqueid} .
Limpieza de recursos
Cuando ya no necesite los recursos que ha creado con el punto de conexión privado, elimine el grupo de recursos. Al hacer esto, se eliminan el punto de conexión privado y todos los recursos relacionados.
Para eliminar el grupo de recursos, ejecute el cmdlet Remove-AzResourceGroup
:
Remove-AzResourceGroup -Name <your resource group name>
Pasos siguientes
Para más información sobre los servicios que admiten puntos de conexión privados, consulte: