クイック スタート:ARM テンプレートを使用してプライベート エンドポイントを作成する
このクイックスタートでは、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>
次の手順
プライベート エンドポイントをサポートするサービスの詳細については、以下を参照してください。