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.

Diagram of resources created in private endpoint quickstart.

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:

Wdrażanie pliku Bicep

  1. Zapisz plik Bicep jako main.bicep na komputerze lokalnym.

  2. 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 sql Administracja istratorLoginPassword. Zostanie również wyświetlony monit o wprowadzenie maszyny wirtualnej Administracja Password, który musi zawierać 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łączenie do maszyny wirtualnej myVm{uniqueid} z Internetu, wykonując następujące czynności:

  1. Na pasku wyszukiwania witryny Azure Portal wprowadź ciąg myVm{uniqueid}.

  2. Wybierz pozycję Połącz. Połączenie zostanie otwarta maszyna wirtualna.

  3. Wybierz pozycję Pobierz plik RDP. Platforma Azure tworzy plik protokołu RDP (Remote Desktop Protocol) i pobiera go na komputer.

  4. 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.

  5. Wybierz przycisk OK.

    Podczas procesu logowania może pojawić się ostrzeżenie o certyfikacie. W takim przypadku wybierz pozycję Tak lub Kontynuuj.

  6. 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:

  1. Na pulpicie zdalnym maszyny wirtualnej myVM{uniqueid}otwórz program PowerShell.

  2. 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
    
  3. Zainstaluj program SQL Server Management Studio.

  4. W okienku Połączenie do serwera 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.
  5. Wybierz pozycję Połącz.

  6. W okienku po lewej stronie wybierz pozycję Bazy danych. Opcjonalnie możesz tworzyć informacje lub wykonywać zapytania z bazy danych sample-db.

  7. 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: