Início Rápido: Criar um ponto de extremidade privado usando um modelo do ARM
Neste guia de início rápido, você usará um modelo do ARM (Azure Resource Manager) para criar um ponto de extremidade privado.
Um Modelo do Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do seu projeto. O modelo usa a sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.
Você também pode criar um ponto de extremidade privado usando o portal do Azure, o Azure PowerShell ou a CLI do Azure.
Se o seu ambiente atender aos pré-requisitos e você estiver familiarizado com o uso de modelos do ARM, selecione o botão Implantar no Azure. O modelo do ARM será aberto no portal do Azure.
Pré-requisitos
Você precisa de uma conta do Azure com uma assinatura ativa. Se você ainda não tiver uma conta do Azure, crie uma conta gratuitamente.
Examinar o modelo
Este modelo cria um ponto de extremidade privado para uma instância do Banco de Dados SQL do Azure.
O modelo que usamos neste início rápido é proveniente dos Modelos de Início Rápido do 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'))]"
]
}
]
}
O modelo define múltiplos recursos do Azure:
- Microsoft.Sql/servers: a instância do Banco de Dados SQL com o banco de dados de exemplo.
- Microsoft.Sql/servers/databases: o banco de dados de exemplo.
- Microsoft.Network/virtualNetworks: a rede virtual em que o ponto de extremidade privado é implantado.
- Microsoft.Network/privateEndpoints: o ponto de extremidade privado que você usa para acessar a instância do Banco de Dados SQL.
- Microsoft.Network/privateDnsZones: a zona que você usa para resolver o endereço IP do ponto de extremidade privado.
- Microsoft.Network/privateDnsZones/virtualNetworkLinks
- Microsoft.Network/privateEndpoints/privateDnsZoneGroups: o grupo de zonas que você usa para associar o ponto de extremidade privado a uma zona DNS privada.
- Microsoft.Network/publicIpAddresses: o endereço IP público que você usa para acessar a máquina virtual.
- Microsoft.Network/networkInterfaces: o adaptador de rede da máquina virtual.
- Microsoft.Compute/virtualMachines: a máquina virtual que você usa para testar a conexão do ponto de extremidade privado com a instância do Banco de Dados SQL.
Implantar o modelo
Implante o modelo do ARM no Azure fazendo o seguinte:
Selecione o botão Implantar no Azure abaixo para entrar no Azure e abrir o modelo do ARM. O modelo cria o ponto de extremidade privado, a instância do Banco de Dados SQL, a infraestrutura de rede e uma máquina virtual a ser validada.
Selecione seu grupo de recursos ou crie um.
Digite as credenciais e a senha do Administrador do SQL.
Digite o nome de usuário e a senha do administrador da máquina virtual.
Leia os termos e condições. Selecione Concordo com os termos e condições declarados acima e selecione Comprar. A implantação pode levar 20 minutos ou mais para ser concluída.
Validar a implantação
Observação
O modelo do ARM gera um nome exclusivo para o recurso myVm{uniqueid} da máquina virtual e para o recurso sqlserver{uniqueid} do Banco de Dados SQL. Substitua o valor gerado por {uniqueid} .
Conecte uma VM a partir da Internet
Conecte-se à VM myVm{uniqueid} a partir da Internet da seguinte forma:
Na barra de pesquisa do portal, insira myVm{uniqueid} .
Selecione Conectar. Conectar-se à máquina virtual é aberto.
Selecione Baixar Arquivo RDP. O Azure cria um arquivo .rdp (protocolo RDP) e ele é baixado no computador.
Abra o arquivo RDP baixado.
a. Se solicitado, selecione Conectar.
b. Insira o nome de usuário e a senha que você especificou quando criou a VM.Observação
Talvez seja necessário selecionar Mais opções>Usar uma conta diferente para especificar as credenciais inseridas durante a criação da VM.
Selecione OK.
Você pode receber um aviso de certificado durante o processo de entrada. Se você decidir, selecione Sim ou Continuar.
Depois que a área de trabalho da VM for exibida, minimize-a para voltar para a área de trabalho local.
Acessar o servidor do Banco de Dados SQL de maneira privada da VM
Para se conectar ao servidor do Banco de Dados SQL da VM usando o ponto de extremidade privado, faça o seguinte:
Na Área de Trabalho Remota de myVM{uniqueid}, abra o PowerShell.
Execute o comando a seguir:
nslookup sqlserver{uniqueid}.database.windows.net
Você receberá uma mensagem semelhante a esta:
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 o SQL Server Management Studio.
Na janela Conectar ao servidor, faça o seguinte:
- Em Tipo de servidor, selecione Mecanismo de Banco de Dados.
- Em Nome do servidor, selecione sqlserver{uniqueid}.database.windows.net.
- Em Nome de usuário, insira o nome de usuário que foi fornecido anteriormente.
- Em Senha, insira a senha que foi fornecida anteriormente.
- Em Lembrar senha, selecione Sim.
Selecione Conectar.
No painel esquerdo, selecione Bancos de dados. Opcionalmente, crie ou consulte informações no sample-db.
Feche a conexão de Área de Trabalho Remota com myVm{uniqueid} .
Limpar os recursos
Quando não precisar mais dos recursos criados com o ponto de extremidade privado, exclua o grupo de recursos. Isso remove o ponto de extremidade privado e todos os recursos relacionados.
Para excluir o grupo de recursos, execute o cmdlet Remove-AzResourceGroup
:
Remove-AzResourceGroup -Name <your resource group name>
Próximas etapas
Para obter mais informações sobre os serviços que dão suporte a um ponto de extremidade privado, confira: