Schnellstart: Erstellen eines privaten Endpunkts mithilfe einer ARM-Vorlage
In dieser Schnellstartanleitung erstellen Sie mithilfe einer Azure Resource Manager-Vorlage (ARM-Vorlage) einen privaten Endpunkt.
Eine Azure Resource Manager-Vorlage ist eine JSON (JavaScript Object Notation)-Datei, welche die Infrastruktur und die Konfiguration für Ihr Projekt definiert. Die Vorlage verwendet eine deklarative Syntax. Sie beschreiben Ihre geplante Bereitstellung, ohne die Abfolge der Programmierbefehle zu schreiben, mit denen die Bereitstellung erstellt wird.
Sie können einen privaten Endpunkt auch über das Azure-Portal, Azure PowerShell oder die Azure CLI erstellen.
Wenn Ihre Umgebung die Voraussetzungen erfüllt und Sie mit der Verwendung von ARM-Vorlagen vertraut sind, wählen Sie hier die Schaltfläche In Azure bereitstellen aus. Die ARM-Vorlage wird im Azure-Portal geöffnet.
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 Vorlage
Mit dieser Vorlage wird ein privater Endpunkt für eine Instanz von Azure SQL-Datenbank erstellt.
Die in dieser Schnellstartanleitung verwendete Vorlage stammt aus den Azure-Schnellstartvorlagen.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "14846974543330599630"
}
},
"parameters": {
"sqlAdministratorLogin": {
"type": "string",
"metadata": {
"description": "The administrator username of the SQL logical server"
}
},
"sqlAdministratorLoginPassword": {
"type": "secureString",
"metadata": {
"description": "The administrator password of the SQL logical server."
}
},
"vmAdminUsername": {
"type": "string",
"metadata": {
"description": "Username for the Virtual Machine."
}
},
"vmAdminPassword": {
"type": "secureString",
"metadata": {
"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)"
}
},
"VmSize": {
"type": "string",
"defaultValue": "Standard_D2_v3",
"metadata": {
"description": "The size of the VM"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
}
},
"variables": {
"vnetName": "myVirtualNetwork",
"vnetAddressPrefix": "10.0.0.0/16",
"subnet1Prefix": "10.0.0.0/24",
"subnet1Name": "mySubnet",
"sqlServerName": "[format('sqlserver{0}', uniqueString(resourceGroup().id))]",
"databaseName": "[format('{0}/sample-db', variables('sqlServerName'))]",
"privateEndpointName": "myPrivateEndpoint",
"privateDnsZoneName": "[format('privatelink{0}', environment().suffixes.sqlServerHostname)]",
"pvtEndpointDnsGroupName": "[format('{0}/mydnsgroupname', variables('privateEndpointName'))]",
"vmName": "[take(format('myVm{0}', uniqueString(resourceGroup().id)), 15)]",
"publicIpAddressName": "[format('{0}PublicIP', variables('vmName'))]",
"networkInterfaceName": "[format('{0}NetInt', variables('vmName'))]",
"osDiskType": "StandardSSD_LRS"
},
"resources": [
{
"type": "Microsoft.Sql/servers",
"apiVersion": "2021-11-01-preview",
"name": "[variables('sqlServerName')]",
"location": "[parameters('location')]",
"tags": {
"displayName": "[variables('sqlServerName')]"
},
"properties": {
"administratorLogin": "[parameters('sqlAdministratorLogin')]",
"administratorLoginPassword": "[parameters('sqlAdministratorLoginPassword')]",
"version": "12.0",
"publicNetworkAccess": "Disabled"
}
},
{
"type": "Microsoft.Sql/servers/databases",
"apiVersion": "2021-11-01-preview",
"name": "[variables('databaseName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Basic",
"tier": "Basic",
"capacity": 5
},
"tags": {
"displayName": "[variables('databaseName')]"
},
"properties": {
"collation": "SQL_Latin1_General_CP1_CI_AS",
"maxSizeBytes": 104857600,
"sampleName": "AdventureWorksLT"
},
"dependsOn": [
"[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]"
]
},
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2021-05-01",
"name": "[variables('vnetName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[variables('vnetAddressPrefix')]"
]
}
}
},
{
"type": "Microsoft.Network/virtualNetworks/subnets",
"apiVersion": "2021-05-01",
"name": "[format('{0}/{1}', variables('vnetName'), variables('subnet1Name'))]",
"properties": {
"addressPrefix": "[variables('subnet1Prefix')]",
"privateEndpointNetworkPolicies": "Disabled"
},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
]
},
{
"type": "Microsoft.Network/privateEndpoints",
"apiVersion": "2021-05-01",
"name": "[variables('privateEndpointName')]",
"location": "[parameters('location')]",
"properties": {
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]"
},
"privateLinkServiceConnections": [
{
"name": "[variables('privateEndpointName')]",
"properties": {
"privateLinkServiceId": "[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]",
"groupIds": [
"sqlServer"
]
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]",
"[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]",
"[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
]
},
{
"type": "Microsoft.Network/privateDnsZones",
"apiVersion": "2020-06-01",
"name": "[variables('privateDnsZoneName')]",
"location": "global",
"properties": {},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
]
},
{
"type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
"apiVersion": "2020-06-01",
"name": "[format('{0}/{1}', variables('privateDnsZoneName'), format('{0}-link', variables('privateDnsZoneName')))]",
"location": "global",
"properties": {
"registrationEnabled": false,
"virtualNetwork": {
"id": "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]",
"[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
]
},
{
"type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
"apiVersion": "2021-05-01",
"name": "[variables('pvtEndpointDnsGroupName')]",
"properties": {
"privateDnsZoneConfigs": [
{
"name": "config1",
"properties": {
"privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]"
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]",
"[resourceId('Microsoft.Network/privateEndpoints', variables('privateEndpointName'))]"
]
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "2021-05-01",
"name": "[variables('publicIpAddressName')]",
"location": "[parameters('location')]",
"tags": {
"displayName": "[variables('publicIpAddressName')]"
},
"properties": {
"publicIPAllocationMethod": "Dynamic"
}
},
{
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2021-05-01",
"name": "[variables('networkInterfaceName')]",
"location": "[parameters('location')]",
"tags": {
"displayName": "[variables('networkInterfaceName')]"
},
"properties": {
"ipConfigurations": [
{
"name": "ipConfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIpAddressName'))]"
},
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]"
}
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIpAddressName'))]",
"[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]",
"[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
]
},
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2021-11-01",
"name": "[variables('vmName')]",
"location": "[parameters('location')]",
"tags": {
"displayName": "[variables('vmName')]"
},
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('VmSize')]"
},
"osProfile": {
"computerName": "[variables('vmName')]",
"adminUsername": "[parameters('vmAdminUsername')]",
"adminPassword": "[parameters('vmAdminPassword')]"
},
"storageProfile": {
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "2019-Datacenter",
"version": "latest"
},
"osDisk": {
"name": "[format('{0}OsDisk', variables('vmName'))]",
"caching": "ReadWrite",
"createOption": "FromImage",
"managedDisk": {
"storageAccountType": "[variables('osDiskType')]"
},
"diskSizeGB": 128
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
}
]
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
]
}
]
}
Die Vorlage definiert mehrere Azure-Ressourcen:
- Microsoft.Sql/servers: Die Instanz der SQL-Datenbank mit der Beispieldatenbank
- Microsoft.Sql/servers/databases: Die Beispieldatenbank
- Microsoft.Network/virtualNetworks: Das virtuelle Netzwerk, in dem der private Endpunkt bereitgestellt wird
- Microsoft.Network/privateEndpoints: Der private Endpunkt, den Sie für den Zugriff auf die Instanz von SQL-Datenbank verwenden
- Microsoft.Network/privateDnsZones: Die Zone, die Sie zum Auflösen der IP-Adresse des privaten Endpunkts verwenden
- Microsoft.Network/privateDnsZones/virtualNetworkLinks
- Microsoft.Network/privateEndpoints/privateDnsZoneGroups: Die Zonengruppe, die Sie zum Verknüpfen des privaten Endpunkts mit einer privaten DNS-Zone verwenden
- Microsoft.Network/publicIpAddresses: Die öffentliche IP-Adresse, mit der Sie auf den virtuellen Computer zugreifen
- Microsoft.Network/networkInterfaces: Die Netzwerkschnittstelle für den virtuellen Computer
- Microsoft.Compute/virtualMachines: Der virtuelle Computer, mit dem Sie die Verbindung des privaten Endpunkts mit der Instanz von SQL-Datenbank testen
Bereitstellen der Vorlage
Stellen Sie die ARM-Vorlage wie folgt in Azure bereit:
Melden Sie sich bei Azure an, und öffnen Sie die ARM-Vorlage, indem Sie hier die Schaltfläche In Azure bereitstellen auswählen. Die Vorlage erstellt den privaten Endpunkt, die Instanz von SQL-Datenbank, die Netzwerkinfrastruktur und einen zu überprüfenden virtuellen Computer.
Wählen Sie Ihre Ressourcengruppe aus, oder erstellen Sie eine neue.
Geben Sie den Anmeldenamen und das Kennwort des SQL-Administrators ein.
Geben Sie den Administratorbenutzernamen für den virtuellen Computer und das zugehörige Kennwort ein.
Lesen Sie die Geschäftsbedingungen. Wenn Sie einverstanden sind, wählen Sie Ich stimme den oben genannten Geschäftsbedingungen zu und anschließend Kaufen aus. Die Bereitstellung kann 20 Minuten oder länger dauern.
Überprüfen der Bereitstellung
Hinweis
Die ARM-Vorlage 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:
Geben Sie in die Suchleiste des Portals myVm{eindeutige ID} ein.
Wählen Sie Verbinden. Verbindung mit virtuellem Computer herstellen wird geöffnet.
Wählen Sie RDP-Datei herunterladen aus. Azure erstellt eine RDP-Datei (Remotedesktopprotokoll) und lädt sie auf Ihren Computer herunter.
Ö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.
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.
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:
Öffnen Sie auf dem Remotedesktop von myVM{eindeutige ID} PowerShell.
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
Installieren Sie SQL Server Management Studio.
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.
Wählen Sie Verbinden.
Wählen Sie im linken Bereich Datenbanken aus. Optional können Sie sample-db erstellen oder Informationen daraus abfragen.
Schließen Sie die Remotedesktopverbindung mit myVm{eindeutige ID} .
Bereinigen von Ressourcen
Wenn Sie die mit dem privaten Endpunkt erstellten Ressourcen nicht mehr benötigen, löschen Sie die Ressourcengruppe. Dadurch werden der private Endpunkt und alle zugehörigen Ressourcen entfernt.
Führen Sie zum Löschen der Ressourcengruppe das Cmdlet Remove-AzResourceGroup
aus:
Remove-AzResourceGroup -Name <your resource group name>
Nächste Schritte
Weitere Informationen zu den Diensten, die private Endpunkte unterstützen, finden Sie unter: