このクイックスタートでは、Azure Resource Manager テンプレート (ARM テンプレート) を使用してプライベート エンドポイントを作成します。
Azure Resource Manager テンプレートは JavaScript Object Notation (JSON) ファイルであり、プロジェクトのインフラストラクチャと構成が定義されています。 このテンプレートでは、宣言型の構文が使用されています。 デプロイしようとしているものを、デプロイを作成する一連のプログラミング コマンドを記述しなくても記述できます。
また、プライベート エンドポイントは、Azure portal、Azure PowerShell、または Azure CLI を使用して作成することもできます。
環境が前提条件を満たしていて、ARM テンプレートの使用に慣れている場合は、この下にある [Azure へのデプロイ] ボタンを選択します。 Azure portal で ARM テンプレートが開きます。
前提条件
アクティブなサブスクリプションを含む Azure アカウントが必要です。 Azure アカウントをまだ持っていない場合は、無料でアカウントを作成します。
テンプレートを確認する
このテンプレートでは、Azure SQL Database のインスタンスに使用するプライベート エンドポイントを作成します。
このクイックスタートで使用するテンプレートは、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'))]"
]
}
]
}
このテンプレートには、複数の Azure リソースが定義されています。
- Microsoft.Sql/servers: サンプル データベースを含む SQL Database のインスタンス。
- Microsoft.Sql/servers/databases: サンプル データベース。
- Microsoft.Network/virtualNetworks: プライベート エンドポイントがデプロイされる仮想ネットワーク。
- Microsoft.Network/privateEndpoints: SQL Database のインスタンスにアクセスするために使用するプライベート エンドポイント。
- Microsoft.Network/privateDnsZones: プライベート エンドポイントの IP アドレスを解決するために使用されるゾーン。
- Microsoft.Network/privateDnsZones/virtualNetworkLinks
- Microsoft.Network/privateEndpoints/privateDnsZoneGroups: プライベート エンドポイントをプライベート DNS ゾーンに関連付けるために使用されるゾーン グループ。
- Microsoft.Network/publicIpAddresses: 仮想マシンにアクセスするために使用されるパブリック IP アドレス。
- Microsoft.Network/networkInterfaces: 仮想マシンのネットワーク インターフェイス。
- Microsoft.Compute/virtualMachines: SQL Database のインスタンスへのプライベート エンドポイントの接続をテストするために使用される仮想マシン。
テンプレートのデプロイ
次の手順を実行して、ARM テンプレートを Azure にデプロイします。
この下にある [Azure へのデプロイ] ボタンを選択し、Azure にサインインして ARM テンプレートを開きます。 このテンプレートによって、プライベート エンドポイント、SQL Database のインスタンス、ネットワーク インフラストラクチャ、および検証する仮想マシンが作成されます。
リソース グループを選択するか、新しく作成します。
SQL 管理者のサインイン名とパスワードを入力します。
仮想マシン管理者のユーザー名とパスワードを入力します。
使用条件を読みます。 同意する場合は、[上記の利用規約に同意する] を選択し、[購入] を選択します。 このデプロイの完了には、20 分以上かかる場合があります。
デプロイの検証
Note
ARM テンプレートにより、仮想マシン myVm{uniqueid} リソースと SQL Database sqlserver{uniqueid} リソースの一意の名前が生成されます。 {uniqueid} は、実際に生成された値に置き換えてください。
インターネットから VM に接続する
次の手順を実行して、インターネットから VM myVm{uniqueid} に接続します。
ポータルの検索バーに、「myVm{uniqueid} 」と入力します。
[接続] を選択します。 [仮想マシンに接続する] が開きます。
[RDP ファイルのダウンロード] を選択します。 Azure によってリモート デスクトップ プロトコル (RDP) ファイルが作成され、お使いのコンピューターにダウンロードされます。
ダウンロードされた RDP ファイルを開きます。
a. メッセージが表示されたら、 [接続] を選択します。
b. VM の作成時に指定したユーザー名とパスワードを入力します。注意
場合によっては、[その他]>[別のアカウントを使用する] の順に選択して、VM の作成時に入力した資格情報を指定する必要があります。
[OK] を選択します。
サインイン処理中に証明書の警告が表示される場合があります。 この場合は、 [はい] または [続行] を選択します。
VM デスクトップが表示されたら最小化してローカル デスクトップに戻ります。
VM から SQL Database サーバーにプライベートにアクセスする
プライベート エンドポイントを使用して VM から SQL Database サーバーに接続するには、次の手順を実行します。
myVM{uniqueid} のリモート デスクトップで、PowerShell を開きます。
次のコマンドを実行します。
nslookup sqlserver{uniqueid}.database.windows.net
次のようなメッセージが返されます。
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
SQL Server Management Studio をインストールします。
[サーバーへの接続] ペインで、次の操作を行います。
- [サーバーの種類] で [データベース エンジン] を選択します。
- [サーバー名] で [sqlserver{uniqueid}.database.windows.net] を選択します。
- [ユーザー名] には、前に指定したユーザー名を入力します。
- [パスワード] には、前に指定したパスワードを入力します。
- [パスワードを記録する] で [はい] を選択します。
[接続] を選択します。
左側のペインで、[データベース] を選択します。 (省略可能) sample-db の情報を作成または照会することができます。
myVm{uniqueid} へのリモート デスクトップ接続を閉じます。
リソースをクリーンアップする
プライベート エンドポイントと共に作成したリソースが不要になった場合は、リソース グループを削除します。 これにより、プライベート エンドポイントと関連するすべてのリソースが削除されます。
リソース グループを削除するには、Remove-AzResourceGroup
コマンドレットを実行します。
Remove-AzResourceGroup -Name <your resource group name>
次の手順
プライベート エンドポイントをサポートするサービスの詳細については、以下を参照してください。