Guia de início rápido: criar um ponto de extremidade privado usando um modelo ARM
Neste início rápido, você usará um modelo do Azure Resource Manager (modelo ARM) 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 utiliza 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 seu ambiente atender aos pré-requisitos e você estiver familiarizado com o uso de modelos ARM, selecione o botão Implantar no Azure aqui. O modelo ARM será aberto no portal do Azure.
Pré-requisitos
Você precisa de uma conta do Azure com uma assinatura ativa. Se ainda não tiver uma conta do Azure, crie uma conta gratuitamente.
Rever o modelo
Este modelo cria um ponto de extremidade privado para uma instância do Banco de Dados SQL do Azure.
O modelo que este guia de início rápido usa é de 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 vários 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 onde 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: A interface de rede para a 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.
Implementar o modelo
Implante o modelo ARM no Azure fazendo o seguinte:
Entre no Azure e abra o modelo ARM selecionando o botão Implantar no Azure aqui. 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 novo.
Introduza o nome de início de sessão e a palavra-passe do administrador SQL.
Digite o nome de usuário e a senha do administrador da máquina virtual.
Leia a declaração de termos e condições. Se concordar, selecione Concordo com os termos e condições mencionados acima e, em seguida, selecione Comprar. A implantação pode levar 20 minutos ou mais para ser concluída.
Validar a implementação
Nota
O modelo 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}.
Ligar a uma VM a partir da Internet
Conecte-se à VM myVm{uniqueid} da Internet fazendo o seguinte:
Na barra de pesquisa do portal, digite myVm{uniqueid}.
Selecione Ligar. Conectar-se à máquina virtual é aberto.
Selecione Transferir Ficheiro RDP. O Azure cria um ficheiro RDP (Remote Desktop Protocol) e transfere-o para o seu computador.
Abra o ficheiro RDP transferido.
a. Se lhe for pedido, selecione Ligar.
b. Digite o nome de usuário e a senha que você especificou quando criou a VM.Nota
Talvez seja necessário selecionar Mais opções>Usar uma conta diferente para especificar as credenciais inseridas quando você criou a VM.
Selecione OK.
Poderá receber um aviso de certificado durante o processo de início de sessão. Se o fizer, selecione Sim ou Continuar.
Depois que a área de trabalho da VM for exibida, minimize-a para voltar à área de trabalho local.
Acesse o servidor do Banco de dados SQL de forma privada a partir da VM
Para se conectar ao servidor do Banco de dados SQL a partir 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 seguinte comando:
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.
No painel Conectar ao servidor, faça o seguinte:
- Para Tipo de servidor, selecione Mecanismo de Banco de Dados.
- Para Nome do servidor, selecione sqlserver{uniqueid}.database.windows.net.
- Em Nome de usuário, insira o nome de usuário fornecido anteriormente.
- Em Senha, digite a senha fornecida anteriormente.
- Em Lembrar senha, selecione Sim.
Selecione Ligar.
No painel esquerdo, selecione Bancos de dados. Opcionalmente, você pode criar ou consultar informações do sample-db.
Feche a ligação ao Ambiente de Trabalho Remoto para myVm{uniqueid}.
Clean up resources (Limpar 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 Remove-AzResourceGroup
cmdlet:
Remove-AzResourceGroup -Name <your resource group name>
Próximos passos
Para obter mais informações sobre os serviços que oferecem suporte a pontos de extremidade privados, consulte: