Краткое руководство. Создание частной конечной точки с использованием Bicep
Это краткое руководство описывает, как создать частную конечную точку на Bicep.
Bicep — это предметно-ориентированный язык (DSL), который использует декларативный синтаксис для развертывания ресурсов Azure. Он обеспечивает краткий синтаксис, надежную безопасность типов и поддержку повторного использования кода. Bicep предлагает лучшие возможности для разработки решений Azure типа "инфраструктура как код".
Вы также можете создать частную конечную точку на портале Azure, с помощью Azure PowerShell, Azure CLI или шаблона Azure Resource Manager
Необходимые компоненты
Вам потребуется учетная запись Azure с активной подпиской. Если у вас еще нет учетной записи Azure, создайте ее бесплатно.
Проверка BICEP-файла
Этот файл Bicep позволяет создать частную конечную точку для экземпляра базы данных SQL Azure.
Файл Bicep, используемый в этом кратком руководстве, взят из шаблонов быстрого запуска 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
}
]
}
}
}
В файле Bicep определяется множество ресурсов 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 через частную конечную точку.
Развертывание BICEP-файла
Сохраните файл Bicep с именем main.bicep на локальном компьютере.
Разверните файл Bicep с помощью Azure CLI или 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>
Примечание.
Замените <admin-login> именем пользователя логического сервера SQL. Замените <vm-login> именем пользователя виртуальной машины. Появится запрос на ввод sqlAdministratorLoginPassword. Вам также будет предложено ввести пароль vmAdminPassword, который быть не менее 12 символов в длину и содержать по крайней мере одну прописную, одну строчную букву и один специальный знак.
После завершения развертывания должно отобразиться сообщение о том, что развертывание успешно выполнено.
Проверка развертывания
Примечание.
Файл Bicep позволяет создать уникальное имя для ресурса виртуальной машины myVm{uniqueid} и для ресурса Базы данных SQL sqlserver{uniqueid}. Подставьте созданное значение вместо {uniqueid}.
Подключение к виртуальной машине из Интернета
Подключитесь к виртуальной машине myVm{uniqueid} из Интернета, выполнив следующие действия:
В строке поиска на портале Azure введите 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}.
Очистка ресурсов
Если вам уже не нужны ресурсы, созданные вместе со службой приватного канала, удалите группу ресурсов. Это действие удаляет службу приватного канала и все связанные с ней ресурсы.
az group delete --name exampleRG
Следующие шаги
Дополнительные сведения о службах, поддерживающих частную конечную точку, см. в следующей статье: