Sdílet prostřednictvím


Rychlý start: Vytvoření privátního koncového bodu pomocí Bicep

V tomto rychlém startu použijete Bicep k vytvoření privátního koncového bodu.

Bicep je jazyk specifický pro doménu (DSL), který k nasazování prostředků Azure používá deklarativní syntaxi. Poskytuje stručnou syntaxi, spolehlivou bezpečnost typů a podporu pro opakované použití kódu. Bicep nabízí nejlepší prostředí pro vytváření obsahu pro řešení infrastruktury jako kódu v Azure.

Privátní koncový bod můžete vytvořit také pomocí webu Azure Portal, Azure PowerShellu, Azure CLI nebo šablony Azure Resource Manageru.

Diagram prostředků vytvořených v rychlém startu privátního koncového bodu

Požadavky

Potřebujete účet Azure s aktivním předplatným. Pokud ještě účet Azure nemáte, vytvořte si ho zdarma.

Kontrola souboru Bicep

Tento soubor Bicep vytvoří privátní koncový bod pro instanci služby Azure SQL Database.

Soubor Bicep, který tento rychlý start používá, je ze šablon Rychlého startu 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
        }
      ]
    }
  }
}

Soubor Bicep definuje více prostředků Azure:

Nasazení souboru Bicep

  1. Uložte soubor Bicep jako main.bicep do místního počítače.

  2. Nasaďte soubor Bicep pomocí Azure CLI nebo Azure PowerShellu.

    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>
    

    Poznámka:

    Nahraďte <přihlašovací jméno> správce uživatelským jménem pro logický server SQL. Nahraďte <vm-login> uživatelským jménem virtuálního počítače. Zobrazí se výzva k zadání sqlAdministratorLoginPassword. Zobrazí se také výzva k zadání vmAdminPassword, který musí mít délku nejméně 12 znaků a musí obsahovat aspoň jedno malé a velké písmeno a jeden speciální znak.

    Po dokončení nasazení by se měla zobrazit zpráva, že nasazení bylo úspěšné.

Ověření nasazení

Poznámka:

Soubor Bicep vygeneruje jedinečný název prostředku myVm{uniqueid} virtuálního počítače a pro prostředek SQL Database{uniqueid} . Nahraďte vygenerovanou hodnotu { uniqueid}.

Připojení k virtuálnímu počítači z internetu

Připojte se k virtuálnímu počítači myVm{uniqueid} z internetu následujícím způsobem:

  1. Na panelu hledání na webu Azure Portal zadejte myVm{uniqueid}.

  2. Vyberte Připojit. Otevře se připojení k virtuálnímu počítači .

  3. Vyberte Stáhnout soubor RDP. Azure vytvoří soubor protokolu RDP (Remote Desktop Protocol) a stáhne ho do počítače.

  4. Otevřete stažený soubor RDP.

    a. Pokud se zobrazí výzva, vyberte Připojit.
    b. Zadejte uživatelské jméno a heslo, které jste zadali při vytváření virtuálního počítače.

    Poznámka:

    Možná budete muset vybrat Další volby>Použít jiný účet k zadání přihlašovacích údajů, které jste zadali při vytváření virtuálního počítače.

  5. Vyberte OK.

    Při přihlášení se může zobrazit upozornění na certifikát. Pokud to uděláte, vyberte Ano nebo Pokračovat.

  6. Jakmile se zobrazí plocha virtuálního počítače, minimalizujte ji, abyste se vrátili na místní plochu.

Privátní přístup k serveru SQL Database z virtuálního počítače

Pokud se chcete z virtuálního počítače připojit k serveru SLUŽBY SQL Database pomocí privátního koncového bodu, postupujte takto:

  1. Na vzdálené ploše virtuálního počítače myVM{uniqueid} otevřete PowerShell.

  2. Spusťte následující příkaz:

    nslookup sqlserver{uniqueid}.database.windows.net

    Zobrazí se zpráva podobná této:

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

  4. V podokně Připojit k serveru postupujte takto:

    • Jako typ serveru vyberte Databázový stroj.
    • Jako název serveru vyberte sqlserver{uniqueid}.database.windows.net.
    • Do pole Uživatelské jméno zadejte uživatelské jméno, které jste zadali dříve.
    • Jako heslo zadejte heslo, které jste zadali dříve.
    • Pokud si chcete zapamatovat heslo, vyberte Ano.
  5. Vyberte Připojit.

  6. V levém podokně vyberte Databáze. Volitelně můžete vytvořit nebo dotazovat informace z ukázkové databáze.

  7. Zavřete připojení ke vzdálené ploše k virtuálnímu počítači myVm{uniqueid}.

Vyčištění prostředků

Pokud už nepotřebujete prostředky, které jste vytvořili pomocí služby private link, odstraňte skupinu prostředků. Tím se odebere služba privátního propojení a všechny související prostředky.

az group delete --name exampleRG

Další kroky

Další informace o službách, které podporují privátní koncové body, najdete tady: