Szybki start: tworzenie prywatnego punktu końcowego przy użyciu szablonu usługi ARM

W tym przewodniku Szybki start utworzysz prywatny punkt końcowy przy użyciu szablonu usługi Azure Resource Manager (szablonu usługi ARM).

Szablon usługi Azure Resource Manager to plik JavaScript Object Notation (JSON), który definiuje infrastrukturę i konfigurację projektu. W szablonie używana jest składnia deklaratywna. Możesz opisać zamierzone wdrożenie bez konieczności pisania sekwencji poleceń programowania w celu utworzenia wdrożenia.

Prywatny punkt końcowy można również utworzyć przy użyciu witryny Azure Portal, programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure.

Jeśli środowisko spełnia wymagania wstępne i znasz szablony usługi ARM, wybierz przycisk Wdróż na platformie Azure tutaj. Szablon usługi ARM zostanie otwarty w witrynie Azure Portal.

Button to deploy the Resource Manager template to Azure.

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.

Przegląd szablonu

Ten szablon tworzy prywatny punkt końcowy dla wystąpienia usługi Azure SQL Database.

Szablon używany przez ten przewodnik Szybki start pochodzi z szablonów szybkiego startu platformy Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.5.6.12127",
      "templateHash": "14846974543330599630"
    }
  },
  "parameters": {
    "sqlAdministratorLogin": {
      "type": "string",
      "metadata": {
        "description": "The administrator username of the SQL logical server"
      }
    },
    "sqlAdministratorLoginPassword": {
      "type": "secureString",
      "metadata": {
        "description": "The administrator password of the SQL logical server."
      }
    },
    "vmAdminUsername": {
      "type": "string",
      "metadata": {
        "description": "Username for the Virtual Machine."
      }
    },
    "vmAdminPassword": {
      "type": "secureString",
      "metadata": {
        "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)"
      }
    },
    "VmSize": {
      "type": "string",
      "defaultValue": "Standard_D2_v3",
      "metadata": {
        "description": "The size of the VM"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "variables": {
    "vnetName": "myVirtualNetwork",
    "vnetAddressPrefix": "10.0.0.0/16",
    "subnet1Prefix": "10.0.0.0/24",
    "subnet1Name": "mySubnet",
    "sqlServerName": "[format('sqlserver{0}', uniqueString(resourceGroup().id))]",
    "databaseName": "[format('{0}/sample-db', variables('sqlServerName'))]",
    "privateEndpointName": "myPrivateEndpoint",
    "privateDnsZoneName": "[format('privatelink{0}', environment().suffixes.sqlServerHostname)]",
    "pvtEndpointDnsGroupName": "[format('{0}/mydnsgroupname', variables('privateEndpointName'))]",
    "vmName": "[take(format('myVm{0}', uniqueString(resourceGroup().id)), 15)]",
    "publicIpAddressName": "[format('{0}PublicIP', variables('vmName'))]",
    "networkInterfaceName": "[format('{0}NetInt', variables('vmName'))]",
    "osDiskType": "StandardSSD_LRS"
  },
  "resources": [
    {
      "type": "Microsoft.Sql/servers",
      "apiVersion": "2021-11-01-preview",
      "name": "[variables('sqlServerName')]",
      "location": "[parameters('location')]",
      "tags": {
        "displayName": "[variables('sqlServerName')]"
      },
      "properties": {
        "administratorLogin": "[parameters('sqlAdministratorLogin')]",
        "administratorLoginPassword": "[parameters('sqlAdministratorLoginPassword')]",
        "version": "12.0",
        "publicNetworkAccess": "Disabled"
      }
    },
    {
      "type": "Microsoft.Sql/servers/databases",
      "apiVersion": "2021-11-01-preview",
      "name": "[variables('databaseName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Basic",
        "tier": "Basic",
        "capacity": 5
      },
      "tags": {
        "displayName": "[variables('databaseName')]"
      },
      "properties": {
        "collation": "SQL_Latin1_General_CP1_CI_AS",
        "maxSizeBytes": 104857600,
        "sampleName": "AdventureWorksLT"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2021-05-01",
      "name": "[variables('vnetName')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[variables('vnetAddressPrefix')]"
          ]
        }
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks/subnets",
      "apiVersion": "2021-05-01",
      "name": "[format('{0}/{1}', variables('vnetName'), variables('subnet1Name'))]",
      "properties": {
        "addressPrefix": "[variables('subnet1Prefix')]",
        "privateEndpointNetworkPolicies": "Disabled"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/privateEndpoints",
      "apiVersion": "2021-05-01",
      "name": "[variables('privateEndpointName')]",
      "location": "[parameters('location')]",
      "properties": {
        "subnet": {
          "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]"
        },
        "privateLinkServiceConnections": [
          {
            "name": "[variables('privateEndpointName')]",
            "properties": {
              "privateLinkServiceId": "[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]",
              "groupIds": [
                "sqlServer"
              ]
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Sql/servers', variables('sqlServerName'))]",
        "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/privateDnsZones",
      "apiVersion": "2020-06-01",
      "name": "[variables('privateDnsZoneName')]",
      "location": "global",
      "properties": {},
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
      "apiVersion": "2020-06-01",
      "name": "[format('{0}/{1}', variables('privateDnsZoneName'), format('{0}-link', variables('privateDnsZoneName')))]",
      "location": "global",
      "properties": {
        "registrationEnabled": false,
        "virtualNetwork": {
          "id": "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
      "apiVersion": "2021-05-01",
      "name": "[variables('pvtEndpointDnsGroupName')]",
      "properties": {
        "privateDnsZoneConfigs": [
          {
            "name": "config1",
            "properties": {
              "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]"
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/privateDnsZones', variables('privateDnsZoneName'))]",
        "[resourceId('Microsoft.Network/privateEndpoints', variables('privateEndpointName'))]"
      ]
    },
    {
      "type": "Microsoft.Network/publicIPAddresses",
      "apiVersion": "2021-05-01",
      "name": "[variables('publicIpAddressName')]",
      "location": "[parameters('location')]",
      "tags": {
        "displayName": "[variables('publicIpAddressName')]"
      },
      "properties": {
        "publicIPAllocationMethod": "Dynamic"
      }
    },
    {
      "type": "Microsoft.Network/networkInterfaces",
      "apiVersion": "2021-05-01",
      "name": "[variables('networkInterfaceName')]",
      "location": "[parameters('location')]",
      "tags": {
        "displayName": "[variables('networkInterfaceName')]"
      },
      "properties": {
        "ipConfigurations": [
          {
            "name": "ipConfig1",
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIpAddressName'))]"
              },
              "subnet": {
                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]"
              }
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIpAddressName'))]",
        "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnet1Name'))]",
        "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
      ]
    },
    {
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2021-11-01",
      "name": "[variables('vmName')]",
      "location": "[parameters('location')]",
      "tags": {
        "displayName": "[variables('vmName')]"
      },
      "properties": {
        "hardwareProfile": {
          "vmSize": "[parameters('VmSize')]"
        },
        "osProfile": {
          "computerName": "[variables('vmName')]",
          "adminUsername": "[parameters('vmAdminUsername')]",
          "adminPassword": "[parameters('vmAdminPassword')]"
        },
        "storageProfile": {
          "imageReference": {
            "publisher": "MicrosoftWindowsServer",
            "offer": "WindowsServer",
            "sku": "2019-Datacenter",
            "version": "latest"
          },
          "osDisk": {
            "name": "[format('{0}OsDisk', variables('vmName'))]",
            "caching": "ReadWrite",
            "createOption": "FromImage",
            "managedDisk": {
              "storageAccountType": "[variables('osDiskType')]"
            },
            "diskSizeGB": 128
          }
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
            }
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
      ]
    }
  ]
}

Szablon definiuje wiele zasobów platformy Azure:

Wdrażanie szablonu

Wdróż szablon usługi ARM na platformie Azure, wykonując następujące czynności:

  1. Zaloguj się do platformy Azure i otwórz szablon usługi ARM, wybierając przycisk Wdróż na platformie Azure tutaj. Szablon tworzy prywatny punkt końcowy, wystąpienie usługi SQL Database, infrastrukturę sieciową i maszynę wirtualną do zweryfikowania.

    Button to deploy the Resource Manager template to Azure.

  2. Wybierz grupę zasobów lub utwórz nową.

  3. Wprowadź nazwę logowania i hasło administratora SQL.

  4. Wprowadź nazwę użytkownika i hasło administratora maszyny wirtualnej.

  5. Przeczytaj oświadczenie dotyczące warunków i postanowień. Jeśli zgadzasz się, wybierz pozycję Zgadzam się na powyższe warunki i postanowienia, a następnie wybierz pozycję Kup. Ukończenie wdrożenia może potrwać 20 minut lub dłużej.

Weryfikowanie wdrożenia

Uwaga

Szablon usługi ARM 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 portalu 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ą prywatnego punktu końcowego, usuń grupę zasobów. Spowoduje to usunięcie prywatnego punktu końcowego i wszystkich powiązanych zasobów.

Aby usunąć grupę zasobów, uruchom Remove-AzResourceGroup polecenie cmdlet:

Remove-AzResourceGroup -Name <your resource group name>

Następne kroki

Aby uzyskać więcej informacji na temat usług obsługujących prywatne punkty końcowe, zobacz: