Szybki start: tworzenie prywatnego punktu końcowego przy użyciu Bicep
W tym przewodniku Szybki start utworzysz prywatny punkt końcowy przy użyciu aplikacji Bicep.
Bicep to język specyficzny dla domeny (DSL), który używa składni deklaratywnej do wdrażania zasobów platformy Azure. Zapewnia zwięzłą składnię, niezawodne bezpieczeństwo typów i obsługę ponownego użycia kodu. Bicep oferuje najlepsze środowisko tworzenia rozwiązań infrastruktury jako kodu na platformie Azure.
Prywatny punkt końcowy można również utworzyć przy użyciu witryny Azure Portal, programu Azure PowerShell, interfejsu wiersza polecenia platformy Azure lub szablonu usługi Azure Resource Manager.
Wymagania wstępne
Potrzebujesz konta platformy Azure z aktywną subskrypcją. Jeśli nie masz jeszcze konta platformy Azure, utwórz bezpłatne konto.
Przejrzyj plik Bicep
Ten plik Bicep tworzy prywatny punkt końcowy dla wystąpienia usługi Azure SQL Database.
Plik Bicep używany przez ten przewodnik Szybki start pochodzi z szablonów szybkiego startu platformy 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
}
]
}
}
}
Plik Bicep definiuje wiele zasobów platformy Azure:
- Microsoft.Sql/servers: wystąpienie usługi SQL Database z przykładową bazą danych.
- Microsoft.Sql/servers/databases: przykładowa baza danych.
- Microsoft.Network/virtualNetworks: sieć wirtualna, w której wdrożono prywatny punkt końcowy.
- Microsoft.Network/privateEndpoints: prywatny punkt końcowy używany do uzyskiwania dostępu do wystąpienia usługi SQL Database.
- Microsoft.Network/privateDnsZones: strefa używana do rozpoznawania prywatnego adresu IP punktu końcowego.
- Microsoft.Network/privateDnsZones/virtualNetworkLinks
- Microsoft.Network/privateEndpoints/privateDnsZoneGroups: grupa stref używana do skojarzenia prywatnego punktu końcowego z prywatną strefą DNS.
- Microsoft.Network/publicIpAddresses: publiczny adres IP używany do uzyskiwania dostępu do maszyny wirtualnej.
- Microsoft.Network/networkInterfaces: interfejs sieciowy dla maszyny wirtualnej.
- Microsoft.Compute/virtualMachines: maszyna wirtualna używana do testowania połączenia prywatnego punktu końcowego z wystąpieniem usługi SQL Database.
Wdrażanie pliku Bicep
Zapisz plik Bicep jako main.bicep na komputerze lokalnym.
Wdróż plik Bicep przy użyciu interfejsu wiersza polecenia platformy Azure lub programu 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>
Uwaga
Zastąp <ciąg admin-login> nazwą użytkownika serwera logicznego SQL. Zastąp ciąg <vm-login> nazwą użytkownika maszyny wirtualnej. Zostanie wyświetlony monit o wprowadzenie polecenia sqlAdministratorLoginPassword. Zostanie również wyświetlony monit o wprowadzenie vmAdminPassword, który musi mieć długość co najmniej 12 znaków i zawierać co najmniej jedną małą i wielką literę oraz jeden znak specjalny.
Po zakończeniu wdrażania powinien zostać wyświetlony komunikat informujący o pomyślnym wdrożeniu.
Weryfikowanie wdrożenia
Uwaga
Plik Bicep generuje unikatową nazwę zasobu maszyny wirtualnej myVm{uniqueid} oraz dla zasobu sqlserver usługi SQL Database{uniqueid} . Zastąp wygenerowaną wartość { uniqueid}.
Nawiązywanie połączenia z maszyną wirtualną z Internetu
Połącz się z maszyną wirtualną myVm{uniqueid} z Internetu, wykonując następujące czynności:
Na pasku wyszukiwania witryny Azure Portal wprowadź ciąg myVm{uniqueid}.
Wybierz pozycję Połącz. Zostanie otwarte połączenie z maszyną wirtualną .
Wybierz pozycję Pobierz plik RDP. Platforma Azure tworzy plik protokołu RDP (Remote Desktop Protocol) i pobiera go na komputer.
Otwórz pobrany plik RDP.
a. Jeśli zostanie wyświetlony monit, wybierz pozycję Połącz.
b. Wprowadź nazwę użytkownika i hasło określone podczas tworzenia maszyny wirtualnej.Uwaga
Może być konieczne wybranie pozycji Więcej opcji>Użyj innego konta , aby określić poświadczenia wprowadzone podczas tworzenia maszyny wirtualnej.
Wybierz przycisk OK.
Podczas procesu logowania może pojawić się ostrzeżenie o certyfikacie. W takim przypadku wybierz pozycję Tak lub Kontynuuj.
Po pojawieniu się pulpitu maszyny wirtualnej zminimalizuj go, aby wrócić do pulpitu lokalnego.
Uzyskiwanie dostępu do serwera usługi SQL Database prywatnie z poziomu maszyny wirtualnej
Aby nawiązać połączenie z serwerem usługi SQL Database z maszyny wirtualnej przy użyciu prywatnego punktu końcowego, wykonaj następujące czynności:
Na pulpicie zdalnym maszyny wirtualnej myVM{uniqueid}otwórz program PowerShell.
Uruchom następujące polecenie:
nslookup sqlserver{uniqueid}.database.windows.net
Zostanie wyświetlony komunikat podobny do następującego:
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
Zainstaluj program SQL Server Management Studio.
W okienku Łączenie z serwerem wykonaj następujące czynności:
- W polu Typ serwera wybierz pozycję Aparat bazy danych.
- W polu Nazwa serwera wybierz pozycję sqlserver{uniqueid}.database.windows.net.
- W polu Nazwa użytkownika wprowadź podaną wcześniej nazwę użytkownika.
- W polu Hasło wprowadź podane wcześniej hasło.
- W obszarze Zapamiętaj hasło wybierz pozycję Tak.
Wybierz pozycję Połącz.
W okienku po lewej stronie wybierz pozycję Bazy danych. Opcjonalnie możesz tworzyć informacje lub wykonywać zapytania z bazy danych sample-db.
Zamknij połączenie pulpitu zdalnego z maszyną wirtualną myVm{uniqueid}.
Czyszczenie zasobów
Jeśli nie potrzebujesz już zasobów utworzonych za pomocą usługi łącza prywatnego, usuń grupę zasobów. Spowoduje to usunięcie usługi łącza prywatnego i wszystkich powiązanych zasobów.
az group delete --name exampleRG
Następne kroki
Aby uzyskać więcej informacji na temat usług obsługujących prywatne punkty końcowe, zobacz: