Dela via


Snabbstart: Skapa en privat slutpunkt med Bicep

I den här snabbstarten använder du Bicep för att skapa en privat slutpunkt.

Bicep är ett domänspecifikt språk (DSL) som använder deklarativ syntax för att distribuera Azure-resurser. Det ger koncis syntax, tillförlitlig typsäkerhet och stöd för återanvändning av kod. Bicep erbjuder den bästa redigeringsupplevelsen för dina infrastruktur-som-kod-lösningar i Azure.

Du kan också skapa en privat slutpunkt med hjälp av Azure-portalen, Azure PowerShell, Azure CLI eller en Azure Resource Manager-mall.

Diagram över resurser som skapats i snabbstarten för privat slutpunkt.

Förutsättningar

Du behöver ett Azure-konto med en aktiv prenumeration. Om du inte redan har ett Azure-konto skapar du ett konto kostnadsfritt.

Granska Bicep-filen

Den här Bicep-filen skapar en privat slutpunkt för en instans av Azure SQL Database.

Bicep-filen som den här snabbstarten använder kommer från Azure-snabbstartsmallar.

@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-filen definierar flera Azure-resurser:

Distribuera Bicep-filen

  1. Spara Bicep-filen som main.bicep på den lokala datorn.

  2. Distribuera Bicep-filen med antingen Azure CLI eller 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>
    

    Kommentar

    Ersätt <administratörsinloggning> med användarnamnet för den logiska SQL-servern. Ersätt <vm-login> med användarnamnet för den virtuella datorn. Du uppmanas att ange sqlAdministratorLoginPassword. Du uppmanas också att ange vmAdminPassword, som måste vara minst 12 tecken långt och innehålla minst ett gemener och versaler och ett specialtecken.

    När distributionen är klar bör du se ett meddelande som anger att distributionen lyckades.

Verifiera distributionen

Kommentar

Bicep-filen genererar ett unikt namn för den virtuella datorn myVm{uniqueid} -resursen och för SQL Database sqlserver{uniqueid} -resursen. Ersätt det genererade värdet med {uniqueid}.

Ansluta till en virtuell dator från Internet

Anslut till den virtuella datorn myVm{uniqueid} från Internet genom att göra följande:

  1. I sökfältet i Azure-portalen anger du myVm{uniqueid}.

  2. Välj Anslut. Anslut till den virtuella datorn öppnas.

  3. Välj Hämta RDP-fil. Azure skapar en RDP-fil (Remote Desktop Protocol) och laddar ned den till datorn.

  4. Öppna den nedladdade RDP-filen.

    a. Välj Anslut om du uppmanas att göra det.
    b. Ange det användarnamn och lösenord som du angav när du skapade den virtuella datorn.

    Kommentar

    Du kan behöva välja Fler alternativ>Använd ett annat konto för att ange de autentiseringsuppgifter som du angav när du skapade den virtuella datorn.

  5. Välj OK.

    Du kan få en certifikatvarning under inloggningen. Om så är fallet väljer du Ja eller Fortsätt.

  6. När det virtuella datorskrivbordet visas minimerar du det så att det går tillbaka till det lokala skrivbordet.

Få åtkomst till SQL Database-servern privat från den virtuella datorn

Gör följande för att ansluta till SQL Database-servern från den virtuella datorn med hjälp av den privata slutpunkten:

  1. Öppna PowerShell på fjärrskrivbordet för myVM{uniqueid}.

  2. Kör följande kommando:

    nslookup sqlserver{uniqueid}.database.windows.net

    Du får ett meddelande som liknar det här:

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

  4. Gör följande i fönstret Anslut till server :

    • Som Servertyp väljer du Databasmotor.
    • Som Servernamn väljer du sqlserver{uniqueid}.database.windows.net.
    • Som Användarnamn anger du det användarnamn som angavs tidigare.
    • För Lösenord anger du det lösenord som angavs tidigare.
    • För Kom ihåg lösenord väljer du Ja.
  5. Välj Anslut.

  6. Välj Databaser i den vänstra rutan. Du kan också skapa eller fråga efter information från sample-db.

  7. Stäng fjärrskrivbordsanslutningen till myVm{uniqueid}.

Rensa resurser

När du inte längre behöver de resurser som du skapade med tjänsten private link tar du bort resursgruppen. Detta tar bort den privata länktjänsten och alla relaterade resurser.

az group delete --name exampleRG

Nästa steg

Mer information om de tjänster som stöder privata slutpunkter finns i: