Schnellstart: Erstellen eines privaten Endpunkts mithilfe von Bicep

In diesem Schnellstart verwenden Sie Bicep zum Erstellen eines privaten Endpunkts.

Bicep ist eine domänenspezifische Sprache (Domain-Specific Language, DSL), die eine deklarative Syntax zur Bereitstellung von Azure-Ressourcen verwendet. Sie bietet eine präzise Syntax, zuverlässige Typsicherheit und Unterstützung für die Wiederverwendung von Code. Bicep bietet die beste Form der Erstellung für Ihre Infrastructure-as-Code-Lösungen in Azure.

Sie können einen privaten Endpunkt auch über das Azure-Portal, über Azure PowerShell, die Azure-Befehlszeilenschnittstelle oder eine Azure Resource Manager-Vorlage erstellen.

Diagramm: Ressourcen, die im Schnellstart „Privater Endpunkt“ erstellt wurden

Voraussetzungen

Sie benötigen ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie noch nicht über ein Azure-Konto verfügen, erstellen Sie ein kostenloses Konto.

Überprüfen der Bicep-Datei

Mit dieser Bicep-Datei wird ein privater Endpunkt für eine Instanz von Azure SQL-Datenbank erstellt.

Die in dieser Schnellstartanleitung verwendete Bicep-Datei stammt aus den Azure-Schnellstartvorlagen.

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

Die Bicep-Datei definiert mehrere Azure-Ressourcen:

Bereitstellen der Bicep-Datei

  1. Speichern Sie die Bicep-Datei als main.bicep auf Ihrem lokalen Computer.

  2. Stellen Sie die Bicep-Datei entweder mit Azure CLI oder mit Azure PowerShell bereit.

    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>
    

    Hinweis

    Ersetzen Sie <admin-login> durch den Benutzernamen für den logischen SQL-Server. Ersetzen Sie <vm-login> durch den Benutzernamen für den virtuellen Computer. Sie werden zur Eingabe von sqlAdministratorLoginPassword aufgefordert. Sie werden auch aufgefordert, vmAdminPassword einzugeben. Dieses Kennwort muss mindestens zwölf Zeichen lang sein und mindestens einen Klein- und einen Großbuchstaben sowie ein Sonderzeichen enthalten.

    Nach Abschluss der Bereitstellung sollte eine Meldung mit dem Hinweis angezeigt werden, dass die Bereitstellung erfolgreich war.

Überprüfen der Bereitstellung

Hinweis

Die Bicep-Datei generiert jeweils einen eindeutigen Namen für die VM-Ressource „myVm{eindeutige ID}“ und für die SQL-Datenbank-Ressource „sqlserver{eindeutige ID}“. Ersetzen Sie {eindeutige ID} durch den entsprechenden generierten Wert.

Herstellen einer Verbindung mit einem virtuellen Computer über das Internet

Stellen Sie wie folgt über das Internet eine Verbindung mit dem virtuellen Computer myVm{eindeutige ID} her:

  1. Geben Sie in die Suchleiste des Azure-Portals myVm{eindeutige ID} ein.

  2. Wählen Sie Verbinden. Verbindung mit virtuellem Computer herstellen wird geöffnet.

  3. Wählen Sie RDP-Datei herunterladen aus. Azure erstellt eine RDP-Datei (Remotedesktopprotokoll) und lädt sie auf Ihren Computer herunter.

  4. Öffnen Sie die heruntergeladene RDP-Datei.

    a. Wählen Sie Verbinden aus, wenn eine entsprechende Aufforderung angezeigt wird.
    b. Geben Sie den Benutzernamen und das Kennwort an, die Sie beim Erstellen des virtuellen Computers angegeben haben.

    Hinweis

    Unter Umständen müssen Sie Weitere Optionen>Anderes Konto verwenden auswählen, um die Anmeldeinformationen anzugeben, die Sie beim Erstellen des virtuellen Computers eingegeben haben.

  5. Klicken Sie auf OK.

    Während des Anmeldevorgangs wird unter Umständen eine Zertifikatwarnung angezeigt. Ist dies der Fall, wählen Sie Ja oder Weiter aus.

  6. Sobald der VM-Desktop angezeigt wird, minimieren Sie ihn, um zu Ihrem lokalen Desktop zurückzukehren.

Privates Zugreifen auf den SQL-Datenbank-Server über den virtuellen Computer

Stellen Sie wie folgt mithilfe des privaten Endpunkts über den virtuellen Computer eine Verbindung mit dem SQL-Datenbank-Server her:

  1. Öffnen Sie auf dem Remotedesktop von myVM{eindeutige ID} PowerShell.

  2. Führen Sie den folgenden Befehl aus:

    nslookup sqlserver{uniqueid}.database.windows.net

    Sie erhalten eine Meldung wie die folgende:

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

  4. Führen Sie im Bereich Mit Server verbinden folgende Aktionen aus:

    • Wählen Sie unter Servertyp die Option Datenbank-Engine aus.
    • Wählen Sie unter Servername die Option sqlserver{eindeutige ID}.database.windows.net aus.
    • Geben Sie unter Benutzername den zuvor angegebenen Benutzernamen ein.
    • Geben Sie unter Kennwort das zuvor angegebene Kennwort ein.
    • Wählen Sie für Kennwort merken die Option Ja aus.
  5. Wählen Sie Verbinden.

  6. Wählen Sie im linken Bereich Datenbanken aus. Optional können Sie sample-db erstellen oder Informationen daraus abfragen.

  7. Schließen Sie die Remotedesktopverbindung mit myVm{eindeutige ID} .

Bereinigen von Ressourcen

Wenn Sie die mit dem Private Link-Dienst erstellten Ressourcen nicht mehr benötigen, löschen Sie die Ressourcengruppe. Dadurch werden der Private Link-Dienst und alle zugehörigen Ressourcen entfernt.

az group delete --name exampleRG

Nächste Schritte

Weitere Informationen zu den Diensten, die private Endpunkte unterstützen, finden Sie unter: