Share via


Inicio rápido: Creación de un punto de conexión privado mediante Bicep

En este inicio rápido, usará Bicep para crear un punto de conexión privado.

Bicep es un lenguaje específico de dominio (DSL) que usa una sintaxis declarativa para implementar recursos de Azure. Brinda sintaxis concisa, seguridad de tipos confiable y compatibilidad con la reutilización de código. Bicep ofrece la mejor experiencia de creación para sus soluciones de infraestructura como código en Azure.

También puede crear un punto de conexión privado mediante Azure Portal, Azure PowerShell, la CLI de Azure o una plantilla de Azure Resource Manager.

Diagram of resources created in private endpoint quickstart.

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 del archivo de Bicep

Este archivo de Bicep crea un punto de conexión privado para una instancia de Azure SQL Database.

El archivo de Bicep usado en este inicio rápido forma parte de las plantillas de inicio rápido de 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
        }
      ]
    }
  }
}

El archivo de Bicep define diversos recursos de Azure:

Implementación del archivo de Bicep

  1. Guarde el archivo de Bicep como main.bicep en el equipo local.

  2. Implemente el archivo de Bicep mediante la CLI de 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

    Reemplace <admin-login> por el nombre de usuario del servidor lógico de SQL. Reemplace <vm-login> por el nombre de usuario de la máquina virtual. Se le pedirá que introduzca sqlAdministratorLoginPassword. También se le pedirá que introduzca vmAdminPassword, que debe tener al menos 12 caracteres de longitud y contener como mínimo un carácter en minúsculas, uno en mayúsculas y un carácter especial.

    Una vez finalizada la implementación, debería mostrarse un mensaje indicando que la implementación se realizó correctamente.

Validación de la implementación

Nota

El archivo de Bicep 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:

  1. En la barra de búsqueda de Azure Portal, escriba myVm{uniqueid}.

  2. Seleccione Conectar. Se abre Connect to virtual machine (Conectarse a una máquina virtual).

  3. Seleccione Descargar archivo RDP. Azure crea un archivo de Protocolo de Escritorio remoto (RDP) y lo descarga en su equipo.

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

  5. Seleccione Aceptar.

    Puede recibir una advertencia de certificado durante el proceso de inicio de sesión. Si la recibe, seleccione o Continuar.

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

  1. En el Escritorio remoto de myVm{uniqueid}, abra PowerShell.

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

  4. 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 .
  5. Seleccione Conectar.

  6. En el panel izquierdo, seleccione Bases de datos. También tiene la opción de crear o consultar información desde sample-db.

  7. Cierre la conexión a Escritorio remoto a myVm{uniqueid} .

Limpieza de recursos

Cuando ya no necesite los recursos que ha creado con el servicio Private Link, elimine el grupo de recursos. Esta acción quita el servicio Private Link y todos los recursos relacionados.

az group delete --name exampleRG

Pasos siguientes

Para más información sobre los servicios que admiten puntos de conexión privados, consulte: