Partilhar via


Guia de início rápido: criar um ponto de extremidade privado usando o Bicep

Neste início rápido, você usará o Bicep para criar um ponto de extremidade privado.

O Bicep é uma linguagem específica do domínio que utiliza sintaxe declarativa para implementar recursos do Azure. Fornece sintaxe concisa, segurança de tipos fiável e suporte para reutilização de código. O Bicep oferece a melhor experiência de criação para suas soluções de infraestrutura como código no Azure.

Você também pode criar um ponto de extremidade privado usando o portal do Azure, o Azure PowerShell, a CLI do Azure ou um Modelo do Azure Resource Manager.

Diagrama de recursos criados no início rápido do ponto de extremidade privado.

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.

Revise o arquivo Bicep

Esse arquivo Bicep cria um ponto de extremidade privado para uma instância do Banco de Dados SQL do Azure.

O arquivo Bicep que este guia de início rápido usa é de Modelos de Início Rápido do 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
        }
      ]
    }
  }
}

O arquivo Bicep define vários recursos do Azure:

Implantar o arquivo Bicep

  1. Salve o arquivo Bicep como main.bicep em seu computador local.

  2. Implante o arquivo Bicep usando a CLI do Azure ou 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

    Substitua <admin-login> pelo nome de usuário do servidor lógico SQL. Substitua <vm-login> pelo nome de usuário da máquina virtual. Você será solicitado a inserir sqlAdministratorLoginPassword. Você também será solicitado a inserir vmAdminPassword, que deve ter pelo menos 12 caracteres e conter pelo menos um caractere minúsculo e maiúsculo e um caractere especial.

    Quando a implantação terminar, você verá uma mensagem indicando que a implantação foi bem-sucedida.

Validar a implementação

Nota

O arquivo Bicep 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:

  1. Na barra de pesquisa do portal do Azure, digite myVm{uniqueid}.

  2. Selecione Ligar. Conectar-se à máquina virtual é aberto.

  3. Selecione Transferir Ficheiro RDP. O Azure cria um ficheiro RDP (Remote Desktop Protocol) e transfere-o para o seu computador.

  4. 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.

  5. Selecione OK.

    Poderá receber um aviso de certificado durante o processo de início de sessão. Se o fizer, selecione Sim ou Continuar.

  6. 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:

  1. Na Área de Trabalho Remota de myVM{uniqueid}, abra o PowerShell.

  2. 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
    
  3. Instale o SQL Server Management Studio.

  4. 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.
  5. Selecione Ligar.

  6. No painel esquerdo, selecione Bancos de dados. Opcionalmente, você pode criar ou consultar informações do sample-db.

  7. 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 serviço de link privado, exclua o grupo de recursos. Isso remove o serviço de link privado e todos os recursos relacionados.

az group delete --name exampleRG

Próximos passos

Para obter mais informações sobre os serviços que oferecem suporte a pontos de extremidade privados, consulte: