Mulai cepat: Membuat titik akhir privat menggunakan Bicep

Dalam panduan mulai cepat ini, Anda akan menggunakan Bicep untuk membuat layanan titik akhir privat.

Bicep adalah bahasa pemrogram khusus domain (DSL) yang menggunakan sintaks deklaratif untuk menyebarkan sumber daya Azure. Bicep menyediakan sintaks ringkas, keamanan jenis yang andal, dan dukungan untuk penggunaan kembali kode. Bicep menawarkan pengalaman penulisan terbaik untuk solusi infrastructure-as-code di Azure.

Anda juga dapat membuat titik akhir privat dengan menggunakanportal Microsoft Azure, Azure PowerShell, Azure CLI atau Templat Azure Resource Manager.

Diagram of resources created in private endpoint quickstart.

Prasyarat

Anda memerlukan akun Azure dengan langganan aktif. Jika Anda belum memiliki akun Azure, buat akun secara gratis.

Tinjau file Bicep

File Bicep ini membuat titik akhir privat untuk instans Azure SQL Database.

File Bicep yang digunakan dalam mulai cepat ini berasal dariTemplat Mulai Cepat 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
        }
      ]
    }
  }
}

File Bicep menentukan beberapa sumber daya Azure:

Menerapkan file Bicep

  1. Simpan file Bicep sebagai main.bicep ke penyimpanan lokal komputer Anda.

  2. Sebarkan file Bicep menggunakan Azure CLI atau 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>
    

    Catatan

    Ganti <masuk-admin> dengan nama pengguna server logis SQL. Ganti <masuk-vm> dengan nama pengguna mesin virtual. Anda akan diminta untuk memasukkan sqlAdministratorLoginPassword. Anda juga akan diminta untuk memasukkan vmAdminPassword, yang panjangnya harus minimal 12 karakter dan berisi setidaknya satu karakter huruf kecil dan huruf besar dan satu karakter khusus.

    Setelah penyebaran selesai, Anda akan melihat pesan yang menunjukkan penyebaran berhasil.

Memvalidasi penyebaran

Catatan

File Bicep menghasilkan nama unik untuk sumber daya mesin virtual myVm{uniqueid}, dan untuk sumber daya SQL Database sqlserver{uniqueid}. Ganti nilai yang Anda hasilkan dengan {uniqueid}.

Menyambungkan ke Komputer Virtual dari internet

Sambungkan ke mesin virtual myVm{uniqueid} dari internet sebagai berikut:

  1. Di bilah pencarian portal Microsoft Azure, masukkan myVm{uniqueid}.

  2. Pilih Sambungkan. Sambungkan ke komputer virtual terbuka.

  3. Pilih Unduh File RDP. Azure membuat file Protokol Desktop Jauh (RDP) dan mengunduhnya ke komputer Anda.

  4. Membuka file RDP yang diunduh.

    a. Ketika diminta, pilih Hubungkan.
    b. Masukkan nama pengguna dan kata sandi yang Anda tentukan saat membuat mesin virtual.

    Catatan

    Anda mungkin perlu memilih Pilihan lainnya>Gunakan akun yang berbeda, untuk menentukan informasi masuk yang Anda masukkan saat membuat mesin virtual.

  5. Pilih OK.

    Anda mungkin menerima peringatan sertifikat selama proses masuk. Jika menerima, pilih Ya atau Lanjutkan.

  6. Setelah desktop VM muncul, kecilkan untuk kembali ke desktop lokal Anda.

Mengakses server SQL Database secara privat dari VM

Untuk menyambungkan ke server Microsoft Azure SQL Database dari mesin virtual menggunakan titik akhir privat, lakukan hal berikut:

  1. Di Desktop Jauh myVM{uniqueid}, buka PowerShell.

  2. Jalankan perintah berikut:

    nslookup sqlserver{uniqueid}.database.windows.net

    Anda akan menerima pesan yang mirip dengan yang berikut:

      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. Instal SQL Server Management Studio.

  4. Pada panel Sambungkan ke server, lakukan hal berikut:

    • Untuk Jenis server: Pilih Mesin Database.
    • Untuk Nama server: Pilih sqlserver{uniqueid}.database.windows.net.
    • Untuk Nama Pengguna, masukkan nama pengguna yang disediakan sebelumnya.
    • Untuk Kata Sandi, masukkan kata sandi yang disediakan sebelumnya.
    • Untuk Ingat kata sandi, PilihYa.
  5. Pilih Sambungkan.

  6. Di panel sebelah kiri, pilih Database. Anda memiliki opsi untuk membuat atau meminta informasi dari sample-db.

  7. Tutup sambungan Desktop Jauh ke myVm{uniqueid}.

Membersihkan sumber daya

Saat Anda tidak lagi memerlukan sumber daya yang Anda buat dengan layanan link privat, hapus grup sumber daya. Ini akan menghapus layanan tautan pribadi dan semua sumber daya terkait.

az group delete --name exampleRG

Langkah berikutnya

Untuk informasi selengkapnya tentang layanan yang mendukung titik akhir privat, lihat: