クイックスタート: Bicep を使用してプライベート エンドポイントを作成する
このクイックスタートでは、Bicep を使用してプライベート エンドポイントを作成します。
Bicep は、宣言型の構文を使用して Azure リソースをデプロイするドメイン固有言語 (DSL) です。 簡潔な構文、信頼性の高いタイプ セーフ、およびコードの再利用のサポートが提供されます。 Bicep により、Azure のコード ソリューションとしてのインフラストラクチャに最適な作成エクスペリエンスが実現します。
Azure portal、Azure PowerShell、Azure CLI、または Azure Resource Manager テンプレートを使用して、プライベート エンドポイントを作成することもできます。
前提条件
アクティブなサブスクリプションを含む Azure アカウントが必要です。 Azure アカウントをまだ持っていない場合は、無料でアカウントを作成します。
Bicep ファイルを確認する
この Bicep ファイルでは、Azure SQL Database のインスタンスに使用するプライベート エンドポイントが作成されます。
このクイックスタートで使用する Bicep ファイルは、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
}
]
}
}
}
この Bicep ファイルには、複数の 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 のインスタンスへのプライベート エンドポイントの接続をテストするために使用される仮想マシン。
Bicep ファイルをデプロイする
Bicep ファイルを main.bicep としてローカル コンピューターに保存します。
Azure CLI または Azure PowerShell のどちらかを使用して Bicep ファイルをデプロイします。
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>
注意
<admin-login> を SQL 論理サーバーのユーザー名に置き換えます。 <vm-login> を仮想マシンのユーザー名に置き換えます。 sqlAdministratorLoginPassword を入力するように求められます。 vmAdminPassword を入力するように求めるメッセージも表示されます。これは、12 文字以上で、少なくとも 1 つの小文字と大文字および 1 つの特殊文字が含まれている必要があります。
デプロイが完了すると、デプロイが成功したことを示すメッセージが表示されます。
デプロイの検証
Note
Bicep ファイルにより、仮想マシン myVm{uniqueid} リソースと SQL Database sqlserver{uniqueid} リソースの一意の名前が生成されます。 {uniqueid} は、実際に生成された値に置き換えてください。
インターネットから VM に接続する
次の手順を実行して、インターネットから VM myVm{uniqueid} に接続します。
Azure portal の検索バーに、「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} へのリモート デスクトップ接続を閉じます。
リソースをクリーンアップする
プライベート リンク サービスと共に作成したリソースが不要になった場合は、リソース グループを削除します。 これにより、プライベート リンク サービスとすべての関連リソースが削除されます。
az group delete --name exampleRG
次の手順
プライベート エンドポイントをサポートするサービスの詳細については、以下を参照してください。