Partager via


Démarrage rapide : Créer une instance Private Endpoint à l’aide de Bicep

Dans ce guide de démarrage rapide, vous allez utiliser Bicep pour créer un point de terminaison privé.

Bicep est un langage spécifique à un domaine (DSL) qui utilise la syntaxe déclarative pour déployer des ressources Azure. Il fournit une syntaxe concise, une cohérence des types fiable et une prise en charge de la réutilisation du code. Bicep offre la meilleure expérience de création pour vos solutions d’infrastructure en tant que code dans Azure.

Vous pouvez également créer un point de terminaison privé à l'aide du portail Azure, d’Azure PowerShell, d’Azure CLI ou d'un modèle Azure Resource Manager.

Diagramme des ressources créées dans le guide de démarrage rapide d'un point de terminaison privé.

Prérequis

Vous devez avoir un compte Azure avec un abonnement actif. Si vous n’avez pas encore de compte Azure, créez-en un gratuitement.

Examiner le fichier Bicep

Ce fichier Bicep crée un point de terminaison privé pour une instance d’Azure SQL Database.

Le fichier Bicep que nous utilisons dans ce guide de démarrage rapide est tiré des modèles de démarrage rapide 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
        }
      ]
    }
  }
}

Le fichier Bicep définit plusieurs ressources Azure :

Déployer le fichier Bicep

  1. Enregistrez le fichier Bicep en tant que main.bicep sur votre ordinateur local.

  2. Déployez le fichier Bicep à l’aide d’Azure CLI ou d’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>
    

    Notes

    Remplacez <admin-login> par le nom d'utilisateur du serveur logique SQL. Remplacez <vm-login> par le nom d’utilisateur de la machine virtuelle. Il vous sera demandé de saisir sqlAdministratorLoginPassword. Vous serez également invité à entrer vmAdminPassword, qui doit comporter au moins 12 caractères et au moins un caractère minuscule, un caractère majuscule et un caractère spécial.

    Une fois le déploiement terminé, un message doit s’afficher pour indiquer que le déploiement a réussi.

Valider le déploiement

Notes

Le fichier Bicep génère un nom unique pour la ressource de la machine virtuelle myVm{uniqueid} et pour celle de SQL Database sqlserver{uniqueid}. Remplacez la valeur générée pour {uniqueid} .

Se connecter à une machine virtuelle à partir d’Internet

Connectez-vous à la machine virtuelle myVm{uniqueid} via Internet en procédant comme suit :

  1. Dans la barre de recherche du portail Azure, saisissez myVm{uniqueid}.

  2. Sélectionnez Connecter. Se connecter à une machine virtuelle s’ouvre.

  3. Sélectionnez Télécharger le fichier RDP. Azure crée un fichier RDP (Remote Desktop Protocol) et le télécharge sur votre ordinateur.

  4. Ouvrez le fichier .rdp téléchargé.

    a. Si vous y êtes invité, sélectionnez Se connecter.
    b. Entrez le nom d’utilisateur et le mot de passe que vous avez indiqué lors de la création de la machine virtuelle.

    Notes

    Vous devrez peut-être sélectionner Plus de choix>Utiliser un autre compte pour spécifier les informations d’identification que vous avez entrées lors de la création de la machine virtuelle.

  5. Sélectionnez OK.

    Un avertissement de certificat peut s’afficher pendant le processus de connexion. Si vous en recevez un, sélectionnez Oui ou Continuer.

  6. Une fois le bureau de la machine virtuelle affiché, réduisez-le pour revenir à votre poste de travail local.

Accéder au serveur SQL Database en privé à partir de la machine virtuelle

Voici comment vous allez vous connecter au serveur SQL Database depuis la machine virtuelle en utilisant le point de terminaison privé :

  1. Dans le Bureau à distance de myVM{uniqueid}, ouvrez PowerShell.

  2. Exécutez la commande suivante :

    nslookup sqlserver{uniqueid}.database.windows.net

    Vous recevez un message similaire à celui-ci :

      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. Installez SQL Server Management Studio.

  4. Dans le volet Se connecter au serveur, procédez comme suit :

    • Pour Type de serveur, sélectionnez Moteur de base de données.
    • Pour Nom du serveur, sélectionnez sqlserver{uniqueid}.database.windows.net.
    • Pour Nom d’utilisateur, entrez le nom d’utilisateur fourni précédemment.
    • Pour Mot de passe, entrez le mot de passe fourni précédemment.
    • Pour Mémoriser le mot de passe, sélectionnez Oui.
  5. Sélectionnez Connecter.

  6. Dans le volet gauche, sélectionnez Bases de données. Si vous le souhaitez, vous pouvez créer ou interroger des informations à partir de sample-db.

  7. Fermez la connexion du Bureau à distance à myVm{uniqueid} .

Nettoyer les ressources

Quand vous n’avez plus besoin des ressources que vous avez créées avec le service de liaison privée, supprimez le groupe de ressources. Cette action supprime le service de liaison privée et toutes les ressources qui y sont associées.

az group delete --name exampleRG

Étapes suivantes

Pour plus d’informations sur les services qui prennent en charge les points de terminaison privés, consultez :