Delen via


Quickstart: Een privé-eindpunt maken met Bicep

In deze quickstart gebruikt u Bicep om een privé-eindpunt te maken.

Bicep is een domeinspecifieke taal (DSL) die declaratieve syntaxis gebruikt om Azure-resources te implementeren. Deze taal voorziet in een beknopte syntaxis, betrouwbare typeveiligheid en ondersteuning voor hergebruik van code. Bicep biedt de beste ontwerpervaring voor uw infrastructuur als code-oplossingen in Azure.

U kunt ook een privé-eindpunt maken met behulp van Azure Portal, Azure PowerShell, de Azure CLI of een Azure Resource Manager-sjabloon.

Diagram van resources die zijn gemaakt in de quickstart voor privé-eindpunten.

Vereisten

U hebt een Azure-account met een actief abonnement nodig. Als u nog geen Azure-account hebt, maakt u gratis een account.

Het Bicep-bestand controleren

Met dit Bicep-bestand maakt u een privé-eindpunt voor een exemplaar van Azure SQL Database.

Het Bicep-bestand dat in deze quickstart wordt gebruikt, is afkomstig van Azure Quickstart-sjablonen.

@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
        }
      ]
    }
  }
}

Het Bicep-bestand definieert meerdere Azure-resources:

Het Bicep-bestand implementeren

  1. Sla het Bicep-bestand op als main.bicep op uw lokale computer.

  2. Implementeer het Bicep-bestand met behulp van Azure CLI of 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>
    

    Notitie

    Vervang <beheerdersaanmelding> door de gebruikersnaam voor de logische SQL-server. Vervang <vm-aanmelding> door de gebruikersnaam voor de virtuele machine. U wordt gevraagd om sqlAdministratorLoginPassword in te voeren. U wordt ook gevraagd om vmAdminPassword in te voeren. Dit moet ten minste 12 tekens lang zijn en ten minste één kleine letter en hoofdletter en één speciaal teken bevatten.

    Wanneer de implementatie is voltooid, ziet u een bericht waarin wordt aangegeven dat de implementatie is voltooid.

De implementatie valideren

Notitie

Het Bicep-bestand genereert een unieke naam voor de resource myVm{uniqueid} van de virtuele machine en voor de SQL Database sqlserver{uniqueid} -resource. Gebruik de voor u gegenereerde waarde in plaats van {uniekeid}.

Verbinding maken met een virtuele machine via internet

Maak als volgt verbinding met de VM myVm{uniqueid} via internet:

  1. Voer in de zoekbalk van Azure Portal myVm{uniqueid} in.

  2. Selecteer Verbinding maken. Het venster Verbinding maken met virtuele machine wordt geopend.

  3. Selecteer RDP-bestand downloaden. Azure maakt een RDP-bestand (Remote Desktop Protocol) en downloadt het naar uw computer.

  4. Open het gedownloade RDP-bestand.

    a. Selecteer Verbinding maken wanneer u hierom wordt gevraagd.
    b. Voer de gebruikersnaam en het wachtwoord in die u hebt opgegeven bij het maken van de virtuele machine.

    Notitie

    Mogelijk moet u Meer opties>selecteren. Gebruik een ander account om de referenties op te geven die u hebt ingevoerd bij het maken van de virtuele machine.

  5. Selecteer OK.

    Er wordt mogelijk een certificaatwaarschuwing weergegeven tijdens het aanmelden. Als dit het geval is, selecteert u Ja of Doorgaan.

  6. Wanneer het VM-bureaublad wordt weergegeven, minimaliseert u het om terug te gaan naar het lokale bureaublad.

Privé-toegang tot de SQL Database-server vanuit de VM

Ga als volgt te werk om verbinding te maken met de SQL Database-server vanaf de VIRTUELE machine met behulp van het privé-eindpunt:

  1. Open PowerShell op het extern bureaublad van myVM{uniqueid}.

  2. Voer de volgende opdracht uit:

    nslookup sqlserver{uniqueid}.database.windows.net

    U ontvangt een bericht dat vergelijkbaar is met deze:

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

  4. Ga als volgt te werk in het deelvenster Verbinding maken met de server :

    • Selecteer database-engine voor servertype.
    • Selecteer voor servernaam sqlserver{uniqueid}.database.windows.net.
    • Voer bij Gebruikersnaam de gebruikersnaam in die u eerder hebt opgegeven.
    • Voer voor Wachtwoord het wachtwoord in dat eerder is opgegeven.
    • Als wachtwoord onthouden selecteert u Ja.
  5. Selecteer Verbinding maken.

  6. Selecteer Databases in het linkerdeelvenster. U kunt desgewenst sample-db maken of er een query op uitvoeren.

  7. Sluit de externe bureaubladverbinding met myVm{uniekeid}.

Resources opschonen

Wanneer u de resources die u met de Private Link-service hebt gemaakt niet meer nodig hebt, verwijdert u de resourcegroep. Hiermee verwijdert u de Private Link-service en alle gerelateerde resources.

az group delete --name exampleRG

Volgende stappen

Zie voor meer informatie over de services die ondersteuning bieden voor privé-eindpunten: