Краткое руководство. Создание частной конечной точки с помощью шаблона ARM
В этом кратком руководстве показано, как создать частную конечную точку с помощью шаблона Azure Resource Manager (шаблона ARM).
Шаблон Azure Resource Manager — это файл нотации объектов JavaScript (JSON), который определяет инфраструктуру и конфигурацию проекта. В шаблоне используется декларативный синтаксис. Вы описываете предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.
Вы также можете создать частную конечную точку с помощью портала Azure, Azure PowerShellили Azure CLI.
Если окружение соответствует предварительным требованиям и вы знакомы с использованием шаблонов ARM, нажмите кнопку Развертывание в Azure. Шаблон ARM откроется на портале Azure.
Необходимые компоненты
Вам потребуется учетная запись Azure с активной подпиской. Если у вас еще нет учетной записи Azure, создайте ее бесплатно.
Изучение шаблона
Этот шаблон позволяет создать частную конечную точку для экземпляра базы данных SQL Azure.
Шаблон, используемый в этом кратком руководстве, взят из шаблонов быстрого запуска Azure.
{
"$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'))]"
]
}
]
}
Этот шаблон определяет пять ресурсов Azure:
- Microsoft.Sql/servers: экземпляр База данных SQL с примером базы данных.
- Microsoft.Sql/servers/databases: пример базы данных.
- Microsoft.Network/virtualNetworks: виртуальная сеть, в которой развернута частная конечная точка.
- Microsoft.Network/privateEndpoints. Частная конечная точка, используемая для доступа к экземпляру Базы данных SQL.
- Microsoft.Network/privateDnsZones. Зона, используемая для разрешения IP-адреса частной конечной точки.
- Microsoft.Network/privateDnsZones/virtualNetworkLinks.
- Microsoft.Network/privateEndpoints/privateDnsZoneGroups. Группа зон, используемая для сопоставления частной конечной точки с частной зоной DNS.
- Microsoft.Network/publicIpAddresses. Общедоступный IP-адрес для доступа к виртуальной машине.
- Microsoft.Network/networkInterfaces: сетевой интерфейс для виртуальной машины.
- Microsoft.Compute/virtualMachines: Виртуальная машина, используемая для проверки подключения к экземпляру Базы данных SQL через частную конечную точку.
Развертывание шаблона
Разверните шаблон ARM в Azure, выполнив следующие действия.
Нажмите кнопку Развертывание в Azure ниже, чтобы войти в Azure и открыть шаблон ARM. Этот шаблон позволяет создать частную конечную точку, экземпляр Базы данных SQL, сетевую инфраструктуру и виртуальную машину для проверки.
Создайте группу ресурсов или выберите имеющуюся.
Введите учетную запись и пароль администратора SQL.
Введите имя и пароль администратора для виртуальной машины.
Ознакомьтесь с условиями. Если вы согласны с ними, установите флажок Я принимаю указанные выше условия и нажмите кнопку Приобрести. Для развертывания может потребоваться 20 минут или более.
Проверка развертывания
Примечание.
Шаблон ARM позволяет создать уникальное имя для ресурса виртуальной машины myVm{uniqueid} и для ресурса Базы данных SQL sqlserver{uniqueid}. Подставьте созданное значение вместо {uniqueid}.
Подключение к виртуальной машине из Интернета
Подключитесь к виртуальной машине myVm{uniqueid} из Интернета, выполнив следующие действия:
В строке поиска на портале введите myVm{uniqueid}.
Нажмите Подключиться. Откроется страница Подключение к виртуальной машине.
Выберите Скачать RDP-файл. Azure создаст и скачает на ваш компьютер файл протокола удаленного рабочего стола (RDP).
Откройте загруженный RDP-файл.
a. При появлении запроса выберите Подключиться.
b. Введите имя пользователя и пароль, которые вы указали при создании виртуальной машины.Примечание.
Возможно, потребуется выбрать элементы Дополнительные варианты>Использовать другую учетную запись, чтобы указать учетные данные, введенные при создании виртуальной машины.
Нажмите ОК.
При входе в систему может появиться предупреждение о сертификате. В таком случае выберите Да или Продолжить.
Когда откроется рабочий стол виртуальной машины, сверните его, чтобы вернуться на локальный рабочий стол.
Частный доступ к серверу Базы данных SQL с виртуальной машины
Чтобы подключиться к серверу Базы данных SQL с виртуальной машины с помощью частной конечной точки, выполните следующие действия.
Откройте PowerShell на удаленном рабочем столе виртуальной машины myVm{uniqueid}.
Выполните следующую команду:
nslookup sqlserver{uniqueid}.database.windows.net
Должно появиться сообщение следующего вида:
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
Установите SQL Server Management Studio.
На панели Подключение к серверу выполните следующие действия.
- Для параметра Тип сервера выберите значение Ядро СУБД.
- Для параметра Имя сервера выберите sqlserver{uniqueid}.database.windows.net.
- В поле Имя пользователя введите имя пользователя, указанное ранее.
- В поле Пароль введите пароль, указанный ранее.
- Для параметра Запомнить пароль выберите Да.
Нажмите Подключиться.
В левой части выберите элемент Базы данных. При желании вы можете создать или запросить сведения из sample-db.
Закройте подключение удаленного рабочего стола к myVm{uniqueid}.
Очистка ресурсов
Если вам уже не нужны ресурсы, созданные вместе с частной конечной точкой, удалите эту группу ресурсов. При этом будут удалены частная конечная точка и все связанные с ней ресурсы.
Чтобы удалить группу ресурсов, выполните командлет Remove-AzResourceGroup
.
Remove-AzResourceGroup -Name <your resource group name>
Следующие шаги
Дополнительные сведения о службах, поддерживающих частную конечную точку, см. в следующей статье: