このクイックスタートでは、Azure portal、Azure CLI、Azure PowerShell、Resource Manager テンプレート、Bicep テンプレート、Terraform を使用して Azure Virtual Network (VNet) を作成する方法について説明します。 2 つの仮想マシンと Azure Bastion ホストがデプロイされ、同じ仮想ネットワーク内の仮想マシン間の接続をテストします。 Azure Bastion ホストは、SSL 経由で Azure portal で仮想マシンへの安全でシームレスな RDP および SSH 接続を容易にします。
仮想ネットワークは、Azure 内のプライベート ネットワークの基本的な構成ブロックです。 Azure Virtual Network を使用すると、VM などの Azure リソースが相互およびインターネットと安全に通信できます。
Azure にサインインする
Azure アカウントで Azure Portal にサインインします。
仮想ネットワークと Azure Bastion ホストを作成する
次の手順では、リソース サブネット、Azure Bastion サブネット、Bastion ホストを含む仮想ネットワークを作成します。
ポータルで、[仮想ネットワーク] を検索して選択します。
[ 仮想ネットワーク ] ページで、[ + 作成] を選択します。
[仮想ネットワークの作成] の [基本] タブで、以下の情報を入力するか選択します。
設定 |
価値 |
プロジェクトの詳細 |
|
サブスクリプション |
サブスクリプションを選択します。 |
リソースグループ |
[新規作成] を選択します。
名前に「test-rg」と入力します。
OK を選択します。 |
インスタンスの詳細 |
|
名前 |
「vnet-1」と入力します。 |
リージョン |
[米国東部 2] を選択します。 |
[次へ] を選択して、[セキュリティ] タブに進みます。
[Azure Bastion] セクションで、[Azure Bastion の有効化] を選択します。
Bastion では、ユーザーのブラウザーとプライベート IP アドレスを使って、Secure Shell (SSH) またはリモート デスクトップ プロトコル (RDP) 経由で仮想ネットワーク内の VM に接続します。 VM には、パブリック IP アドレス、クライアント ソフトウェア、または特別な構成は必要ありません。 詳細については、Azure Bastion に関するページを参照してください。
注
時間単位の料金は、送信データの使用量に関係なく、Bastion がデプロイされた時点から発生します。 詳しくは、「価格」および「SKU」を参照してください。 チュートリアルまたはテストの一環で Bastion をデプロイする場合は、使用終了後にこのリソースを削除することをお勧めします。
[Azure Bastion] で、次の情報を入力するか選びます。
設定 |
価値 |
Azure Bastion ホスト名 |
「bastion」と入力します。 |
Azure Bastion のパブリック IP アドレス |
[Create a public IP address] (パブリック IP アドレスを作成する) を選びます。
[名前] に「public-ip-bastion」と入力します。
OK を選択します。 |
[次へ] を選択して、[IP アドレス] タブに進みます。
[サブネット] のアドレス空間ボックスで、既定のサブネットを選択します。
[サブネットの編集] で次の情報を入力または選択します。
設定 |
価値 |
サブネットの目的 |
既定値の [既定値] のままにします。 |
名前 |
「subnet-1」と入力します。 |
IPv4 |
|
IPv4 アドレス範囲 |
既定値である 10.0.0.0/16 のままにします。 |
開始アドレス |
既定値の 10.0.0.0 のままにします。 |
サイズ |
既定値の [/24 (256 アドレス)] のままにします。 |
保存 を選択します。
ウィンドウの下部にある [確認および作成] を選びます。 検証に合格した場合は、[作成] を選択します。
仮想マシンを作成する
次の手順では、仮想ネットワークに vm-1 と vm-2 という名前の 2 つの VM を作成します。
ポータルで、[仮想マシン] を検索して選択します。
[仮想マシン] で、[+ 作成] を選択してから、[Azure 仮想マシン] を選択します。
[仮想マシンの作成] の [基本] タブで、次の情報を入力または選択します。
設定 |
価値 |
プロジェクトの詳細 |
|
サブスクリプション |
サブスクリプションを選択します。 |
リソースグループ |
test-rg を選択します。 |
インスタンスの詳細 |
|
仮想マシン名 |
「vm-1」と入力します。 |
リージョン |
[米国東部 2] を選択します。 |
可用性オプション |
[インフラストラクチャ冗長は必要ありません] を選択します。 |
セキュリティの種類 |
規定値である [標準] のままにします。 |
画像 |
[Ubuntu Server 22.04 LTS - x64 Gen2] を選びます。 |
VMアーキテクチャ |
既定値の [x64] のままにします。 |
サイズ |
サイズを選択します。 |
管理者アカウント |
|
認証の種類 |
[パスワード] を選択します。 |
ユーザー名 |
「azureuser」と入力します。 |
パスワード |
パスワードを入力します。 |
パスワードの確認 |
パスワードを再入力します。 |
受信ポートの規則 |
|
パブリック受信ポート |
[なし] を選択します。 |
[ネットワーク] タブを選択します。次の情報を入力または選択します。
設定 |
価値 |
ネットワーク インターフェイス |
|
仮想ネットワーク |
[vnet-1] を選択します。 |
サブネット |
subnet-1 (10.0.0.0/24) を選択します。 |
パブリック IP |
[なし] を選択します。 |
NIC ネットワーク セキュリティ グループ |
[Advanced] \(詳細設定) を選択します。 |
ネットワーク セキュリティ グループを構成する |
[新規作成] を選択します。
名前として「nsg-1」を入力します。
残りの部分は既定値のままにし、[OK] を選択します。 |
残りの設定は既定値のままにし、[確認と作成] を選択します。
設定を確認し、 [作成] を選択します。
最初の仮想マシンがデプロイされるまで待ってから、前の手順を繰り返して、次の設定で 2 つ目の仮想マシンを作成します。
設定 |
価値 |
仮想マシン名 |
「vm-2」と入力します。 |
仮想ネットワーク |
[vnet-1] を選択します。 |
サブネット |
subnet-1 (10.0.0.0/24) を選択します。 |
パブリック IP |
[なし] を選択します。 |
NIC ネットワーク セキュリティ グループ |
[Advanced] \(詳細設定) を選択します。 |
ネットワーク セキュリティ グループを構成する |
[nsg-1] を選択します。 |
注
Azure Bastion ホストがある仮想ネットワーク内の仮想マシンには、パブリック IP アドレスは必要ありません。 Bastion がパブリック IP を提供し、VM はプライベート IP を使用してネットワーク内で通信します。 Bastion ホストがある仮想ネットワーク内のいずれの VM からも、パブリック IP を削除できます。 詳細については、「パブリック IP アドレスの関連付けを Azure VM から解除する」を参照してください。
注
パブリック IP が割り当てられていない VM、または内部の Basic Azure Load Balancer のバックエンド プール内にある VM に対しては、Azure によって既定のアウトバウンド アクセス IP が提供されます。 デフォルト送信アクセス IP メカニズムは、構成できないアウトバウンド IP アドレスを提供します。
次のいずれかのイベントが発生すると、既定のアウトバウンド アクセス IP は無効になります。
- パブリック IP アドレスが VM に割り当てられます。
- アウトバウンド規則の有無にかかわらず、VM は標準ロード バランサーのバックエンド プール内に配置されます。
-
Azure NAT Gateway リソースが VM のサブネットに割り当てられている。
フレキシブル オーケストレーション モードの仮想マシン スケール セットによって作成された VM には、既定のアウトバウンド アクセスがありません。
Azure での送信接続の詳細については、「 Azure での既定の送信アクセス 」および「 送信接続にソース ネットワーク アドレス変換 (SNAT) を使用する」を参照してください。
リソース グループを作成する
New-AzResourceGroup を使用して、仮想ネットワークをホストするためのリソース グループを作成します。 次のコードを実行して、eastus2 Azure リージョンに test-rg という名前のリソース グループを作成します。
$rg = @{
Name = 'test-rg'
Location = 'eastus2'
}
New-AzResourceGroup @rg
仮想ネットワークを作成する
New-AzVirtualNetwork を使用して、eastus2 の場所の test-rg リソース グループに、vnet-1 という名前で、IP アドレス プレフィックスが 10.0.0.0/16 の仮想ネットワークを作成します。
$vnet = @{
Name = 'vnet-1'
ResourceGroupName = 'test-rg'
Location = 'eastus2'
AddressPrefix = '10.0.0.0/16'
}
$virtualNetwork = New-AzVirtualNetwork @vnet
Azure によって、仮想ネットワーク内のサブネットにリソースをデプロイします。
Add-AzVirtualNetworkSubnetConfig を使用して、subnet-1 という名前で、アドレス プレフィックスが 10.0.0.0/24 のサブネット構成を作成します。
$subnet = @{
Name = 'subnet-1'
VirtualNetwork = $virtualNetwork
AddressPrefix = '10.0.0.0/24'
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
Set-AzVirtualNetwork を使用して、サブネット構成を仮想ネットワークに関連付けます。
$virtualNetwork | Set-AzVirtualNetwork
Azure Bastion をデプロイする
Azure Bastion では、プライベート IP アドレスを使用することで、Secure Shell (SSH) またはリモート デスクトップ プロトコル (RDP) を介して、仮想ネットワーク内の VM にブラウザーを使用して接続します。 VM には、パブリック IP アドレス、クライアント ソフトウェア、または特別な構成は必要ありません。 Azure Bastion の詳細については、「Azure Bastion とは」を参照してください。
時間単位の料金は、送信データの使用量に関係なく、Bastion がデプロイされた時点から発生します。 詳しくは、「価格」および「SKU」を参照してください。 チュートリアルまたはテストの一環で Bastion をデプロイする場合は、使用終了後にこのリソースを削除することをお勧めします。
仮想ネットワークの Bastion サブネットを構成します。 このサブネットは、Bastion リソース専用に予約されており、名前を AzureBastionSubnet にする必要があります。
$subnet = @{
Name = 'AzureBastionSubnet'
VirtualNetwork = $virtualNetwork
AddressPrefix = '10.0.1.0/26'
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
構成を設定します。
$virtualNetwork | Set-AzVirtualNetwork
Bastion のパブリック IP アドレスを作成します。 Bastion ホストは、パブリック IP を使用して、ポート 443 経由で SSH と RDP にアクセスします。
$ip = @{
ResourceGroupName = 'test-rg'
Name = 'public-ip'
Location = 'eastus2'
AllocationMethod = 'Static'
Sku = 'Standard'
Zone = 1,2,3
}
New-AzPublicIpAddress @ip
New-AzBastion コマンドを使用して、AzureBastionSubnet に新しい Standard SKU Bastion ホストを作成します。
$bastion = @{
Name = 'bastion'
ResourceGroupName = 'test-rg'
PublicIpAddressRgName = 'test-rg'
PublicIpAddressName = 'public-ip'
VirtualNetworkRgName = 'test-rg'
VirtualNetworkName = 'vnet-1'
Sku = 'Basic'
}
New-AzBastion @bastion
Bastion リソースのデプロイには、約 10 分かかります。 仮想ネットワークに Bastion がデプロイされる間、次のセクションで VM を作成できます。
仮想マシンを作成する
New-AzVM を使用して、vm-1 と vm-2 という名前の 2 つの VM を、仮想ネットワークの subnet-1 サブネットに作成します。 資格情報を求められたら、VM のユーザー名とパスワードを入力します。
1 つ目の VM を作成するには、次のコードを使用します。
# Set the administrator and password for the VM. ##
$cred = Get-Credential
## Place the virtual network into a variable. ##
$vnet = Get-AzVirtualNetwork -Name 'vnet-1' -ResourceGroupName 'test-rg'
## Create a network interface for the VM. ##
$nic = @{
Name = "nic-1"
ResourceGroupName = 'test-rg'
Location = 'eastus2'
Subnet = $vnet.Subnets[0]
}
$nicVM = New-AzNetworkInterface @nic
## Create a virtual machine configuration. ##
$vmsz = @{
VMName = "vm-1"
VMSize = 'Standard_DS1_v2'
}
$vmos = @{
ComputerName = "vm-1"
Credential = $cred
}
$vmimage = @{
PublisherName = 'Canonical'
Offer = '0001-com-ubuntu-server-jammy'
Skus = '22_04-lts-gen2'
Version = 'latest'
}
$vmConfig = New-AzVMConfig @vmsz `
| Set-AzVMOperatingSystem @vmos -Linux `
| Set-AzVMSourceImage @vmimage `
| Add-AzVMNetworkInterface -Id $nicVM.Id
## Create the VM. ##
$vm = @{
ResourceGroupName = 'test-rg'
Location = 'eastus2'
VM = $vmConfig
}
New-AzVM @vm
2 つ目の VM を作成するには、次のコードを使用します。
# Set the administrator and password for the VM. ##
$cred = Get-Credential
## Place the virtual network into a variable. ##
$vnet = Get-AzVirtualNetwork -Name 'vnet-1' -ResourceGroupName 'test-rg'
## Create a network interface for the VM. ##
$nic = @{
Name = "nic-2"
ResourceGroupName = 'test-rg'
Location = 'eastus2'
Subnet = $vnet.Subnets[0]
}
$nicVM = New-AzNetworkInterface @nic
## Create a virtual machine configuration. ##
$vmsz = @{
VMName = "vm-2"
VMSize = 'Standard_DS1_v2'
}
$vmos = @{
ComputerName = "vm-2"
Credential = $cred
}
$vmimage = @{
PublisherName = 'Canonical'
Offer = '0001-com-ubuntu-server-jammy'
Skus = '22_04-lts-gen2'
Version = 'latest'
}
$vmConfig = New-AzVMConfig @vmsz `
| Set-AzVMOperatingSystem @vmos -Linux `
| Set-AzVMSourceImage @vmimage `
| Add-AzVMNetworkInterface -Id $nicVM.Id
## Create the VM. ##
$vm = @{
ResourceGroupName = 'test-rg'
Location = 'eastus2'
VM = $vmConfig
}
New-AzVM @vm
ヒント
-AsJob
オプションを使用して、他のタスクを続行しながらバックグラウンドで VM を作成できます。 たとえば、 New-AzVM @vm1 -AsJob
を実行します。 Azure でバックグラウンドで VM の作成を開始すると、次のような出力が返されます。
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Long Running... AzureLongRun... Running True localhost New-AzVM
Azure で VM を作成するには数分かかります。 Azure で VM の作成が完了すると、PowerShell に出力が返されます。
注
Bastion ホストがある仮想ネットワーク内の VM には、パブリック IP アドレスが必要ありません。 Bastion がパブリック IP を提供し、VM はプライベート IP を使用してネットワーク内で通信します。 Bastion ホストがある仮想ネットワーク内のいずれの VM からも、パブリック IP を削除できます。 詳細については、「パブリック IP アドレスの関連付けを Azure VM から解除する」を参照してください。
注
パブリック IP が割り当てられていない VM、または内部の Basic Azure Load Balancer のバックエンド プール内にある VM に対しては、Azure によって既定のアウトバウンド アクセス IP が提供されます。 デフォルト送信アクセス IP メカニズムは、構成できないアウトバウンド IP アドレスを提供します。
次のいずれかのイベントが発生すると、既定のアウトバウンド アクセス IP は無効になります。
- パブリック IP アドレスが VM に割り当てられます。
- アウトバウンド規則の有無にかかわらず、VM は標準ロード バランサーのバックエンド プール内に配置されます。
-
Azure NAT Gateway リソースが VM のサブネットに割り当てられている。
フレキシブル オーケストレーション モードの仮想マシン スケール セットによって作成された VM には、既定のアウトバウンド アクセスがありません。
Azure での送信接続の詳細については、「 Azure での既定の送信アクセス 」および「 送信接続にソース ネットワーク アドレス変換 (SNAT) を使用する」を参照してください。
リソース グループを作成する
az group create を使用して、仮想ネットワークをホストするためのリソース グループを作成します。 次のコードを使用して、eastus2 Azure リージョンに test-rg という名前のリソース グループを作成します:
az group create \
--name test-rg \
--___location eastus2
仮想ネットワークとサブネットを作成する
az network vnet create を使用して、test-rg リソースグループ内に subnet-1 という名前のサブネットを持つ vnet-1 という名前の仮想ネットワークを作成します:
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--address-prefix 10.0.0.0/16 \
--subnet-name subnet-1 \
--subnet-prefixes 10.0.0.0/24
Azure Bastion をデプロイする
Azure Bastion では、プライベート IP アドレスを使用することで、Secure Shell (SSH) またはリモート デスクトップ プロトコル (RDP) を介して、仮想ネットワーク内の VM にブラウザーを使用して接続します。 VM には、パブリック IP アドレス、クライアント ソフトウェア、または特別な構成は必要ありません。
時間単位の料金は、送信データの使用量に関係なく、Bastion がデプロイされた時点から発生します。 詳しくは、「価格」および「SKU」を参照してください。 チュートリアルまたはテストの一環で Bastion をデプロイする場合は、使用終了後にこのリソースを削除することをお勧めします。 Azure Bastion の詳細については、「Azure Bastion とは」を参照してください。
az network vnet subnet create を使用して、仮想ネットワークの Bastion サブネットを作成します。 このサブネットは、Bastion リソース専用に予約されており、名前を AzureBastionSubnet にする必要があります。
az network vnet subnet create \
--name AzureBastionSubnet \
--resource-group test-rg \
--vnet-name vnet-1 \
--address-prefix 10.0.1.0/26
Bastion のパブリック IP アドレスを作成します。 この IP アドレスは、インターネットから bastion ホストに接続するために使用されます。
az network public-ip create を使用して、test-rg リソース グループに public-ip という名前のパブリック IP アドレスを作成します:
az network public-ip create \
--resource-group test-rg \
--name public-ip \
--sku Standard \
--___location eastus2 \
--zone 1 2 3
az network bastion create を使用して、仮想ネットワークの AzureBastionSubnet に Bastion ホストを作成します:
az network bastion create \
--name bastion \
--public-ip-address public-ip \
--resource-group test-rg \
--vnet-name vnet-1 \
--___location eastus2
Bastion リソースのデプロイには、約 10 分かかります。 仮想ネットワークに Bastion がデプロイされる間、次のセクションで VM を作成できます。
仮想マシンを作成する
az vm create を使用して、仮想ネットワークの subnet-1 サブネットに vm-1 と vm-2 という名前の 2 つの VM を作成します。 資格情報の入力を求められたら、VM のユーザー名とパスワードを入力します。
1 つ目の VM を作成するには、次のコマンドを使用します。
az vm create \
--resource-group test-rg \
--admin-username azureuser \
--authentication-type password \
--name vm-1 \
--image Ubuntu2204 \
--public-ip-address ""
2 つ目の VM を作成するには、次のコマンドを使用します。
az vm create \
--resource-group test-rg \
--admin-username azureuser \
--authentication-type password \
--name vm-2 \
--image Ubuntu2204 \
--public-ip-address ""
ヒント
--no-wait
オプションを使用して、他のタスクを続行しながらバックグラウンドで VM を作成することもできます。
VM の作成には数分かかります。 Azure で各 VM が作成されると、Azure CLI は次のメッセージのような出力を返します。
{
"fqdns": "",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.Compute/virtualMachines/vm-2",
"___location": "eastus2",
"macAddress": "00-0D-3A-23-9A-49",
"powerState": "VM running",
"privateIpAddress": "10.0.0.5",
"publicIpAddress": "",
"resourceGroup": "test-rg"
"zones": ""
}
注
Bastion ホストがある仮想ネットワーク内の VM には、パブリック IP アドレスが必要ありません。 Bastion がパブリック IP を提供し、VM はプライベート IP を使用してネットワーク内で通信します。 Bastion ホストがある仮想ネットワーク内のいずれの VM からも、パブリック IP を削除できます。 詳細については、「パブリック IP アドレスの関連付けを Azure VM から解除する」を参照してください。
注
パブリック IP が割り当てられていない VM、または内部の Basic Azure Load Balancer のバックエンド プール内にある VM に対しては、Azure によって既定のアウトバウンド アクセス IP が提供されます。 デフォルト送信アクセス IP メカニズムは、構成できないアウトバウンド IP アドレスを提供します。
次のいずれかのイベントが発生すると、既定のアウトバウンド アクセス IP は無効になります。
- パブリック IP アドレスが VM に割り当てられます。
- アウトバウンド規則の有無にかかわらず、VM は標準ロード バランサーのバックエンド プール内に配置されます。
-
Azure NAT Gateway リソースが VM のサブネットに割り当てられている。
フレキシブル オーケストレーション モードの仮想マシン スケール セットによって作成された VM には、既定のアウトバウンド アクセスがありません。
Azure での送信接続の詳細については、「 Azure での既定の送信アクセス 」および「 送信接続にソース ネットワーク アドレス変換 (SNAT) を使用する」を参照してください。
テンプレートを確認する
このクイックスタートで使用するテンプレートは、Azure クイックスタート テンプレートからのものです。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.6.18.56646",
"templateHash": "10806234693722113459"
}
},
"parameters": {
"vnetName": {
"type": "string",
"defaultValue": "VNet1",
"metadata": {
"description": "VNet name"
}
},
"vnetAddressPrefix": {
"type": "string",
"defaultValue": "10.0.0.0/16",
"metadata": {
"description": "Address prefix"
}
},
"subnet1Prefix": {
"type": "string",
"defaultValue": "10.0.0.0/24",
"metadata": {
"description": "Subnet 1 Prefix"
}
},
"subnet1Name": {
"type": "string",
"defaultValue": "Subnet1",
"metadata": {
"description": "Subnet 1 Name"
}
},
"subnet2Prefix": {
"type": "string",
"defaultValue": "10.0.1.0/24",
"metadata": {
"description": "Subnet 2 Prefix"
}
},
"subnet2Name": {
"type": "string",
"defaultValue": "Subnet2",
"metadata": {
"description": "Subnet 2 Name"
}
},
"___location": {
"type": "string",
"defaultValue": "[resourceGroup().___location]",
"metadata": {
"description": "Location for all resources."
}
}
},
"resources": [
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2021-08-01",
"name": "[parameters('vnetName')]",
"___location": "[parameters('___location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('vnetAddressPrefix')]"
]
},
"subnets": [
{
"name": "[parameters('subnet1Name')]",
"properties": {
"addressPrefix": "[parameters('subnet1Prefix')]"
}
},
{
"name": "[parameters('subnet2Name')]",
"properties": {
"addressPrefix": "[parameters('subnet2Prefix')]"
}
}
]
}
}
]
}
このテンプレートでは、次の Azure リソースが定義されています。
テンプレートをデプロイする
Resource Manager テンプレートを Azure にデプロイします。
[Azure に配置する] を選択して Azure にサインインし、テンプレートを開きます。 テンプレートは、2 つのサブネットを持つ仮想ネットワークを作成します。
ポータルの [ 2 つのサブネットを含む仮想ネットワークの作成 ] ページで、次の値を入力または選択します。
-
リソース グループ: [ 新規作成] を選択し、リソース グループ名として 「CreateVNetQS-rg 」と入力して、[ OK] を選択します。
-
[仮想ネットワーク名]: 新しい仮想ネットワークの名前を入力します。
[確認と作成] を選択し、次に [作成] を選択します。
デプロイが完了したら、[ リソースに移動 ] ボタンを選択して、デプロイしたリソースを確認します。
デプロイされているリソースを確認する
VNet1 の設定ウィンドウを参照して、仮想ネットワークで作成したリソースを確認します。
テンプレート内の仮想ネットワークの JSON 構文とプロパティについては、 Microsoft.Network/virtualNetworks を参照してください。
仮想ネットワークと VM を作成する
このクイックスタートでは、Azure Resource Manager クイックスタート テンプレートの VNET 内の 2 つの VM Bicep テンプレートを使って、仮想ネットワーク、リソース サブネット、VM を作成します。 この Bicep テンプレートでは、次の Azure リソースが定義されています。
Bicep ファイルを確認します。
@description('Admin username')
param adminUsername string
@description('Admin password')
@secure()
param adminPassword string
@description('Prefix to use for VM names')
param vmNamePrefix string = 'BackendVM'
@description('Location for all resources.')
param ___location string = resourceGroup().___location
@description('Size of the virtual machines')
param vmSize string = 'Standard_D2s_v3'
var availabilitySetName = 'AvSet'
var storageAccountType = 'Standard_LRS'
var storageAccountName = uniqueString(resourceGroup().id)
var virtualNetworkName = 'vNet'
var subnetName = 'backendSubnet'
var loadBalancerName = 'ilb'
var networkInterfaceName = 'nic'
var subnetRef = resourceId('Microsoft.Network/virtualNetworks/subnets', virtualNetworkName, subnetName)
var numberOfInstances = 2
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
___location: ___location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
}
resource availabilitySet 'Microsoft.Compute/availabilitySets@2023-09-01' = {
name: availabilitySetName
___location: ___location
sku: {
name: 'Aligned'
}
properties: {
platformUpdateDomainCount: 2
platformFaultDomainCount: 2
}
}
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' = {
name: virtualNetworkName
___location: ___location
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
subnets: [
{
name: subnetName
properties: {
addressPrefix: '10.0.2.0/24'
}
}
]
}
}
resource networkInterface 'Microsoft.Network/networkInterfaces@2023-09-01' = [for i in range(0, numberOfInstances): {
name: '${networkInterfaceName}${i}'
___location: ___location
properties: {
ipConfigurations: [
{
name: 'ipconfig1'
properties: {
privateIPAllocationMethod: 'Dynamic'
subnet: {
id: subnetRef
}
loadBalancerBackendAddressPools: [
{
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool1')
}
]
}
}
]
}
dependsOn: [
virtualNetwork
loadBalancer
]
}]
resource loadBalancer 'Microsoft.Network/loadBalancers@2023-09-01' = {
name: loadBalancerName
___location: ___location
sku: {
name: 'Standard'
}
properties: {
frontendIPConfigurations: [
{
properties: {
subnet: {
id: subnetRef
}
privateIPAddress: '10.0.2.6'
privateIPAllocationMethod: 'Static'
}
name: 'LoadBalancerFrontend'
}
]
backendAddressPools: [
{
name: 'BackendPool1'
}
]
loadBalancingRules: [
{
properties: {
frontendIPConfiguration: {
id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'LoadBalancerFrontend')
}
backendAddressPool: {
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool1')
}
probe: {
id: resourceId('Microsoft.Network/loadBalancers/probes', loadBalancerName, 'lbprobe')
}
protocol: 'Tcp'
frontendPort: 80
backendPort: 80
idleTimeoutInMinutes: 15
}
name: 'lbrule'
}
]
probes: [
{
properties: {
protocol: 'Tcp'
port: 80
intervalInSeconds: 15
numberOfProbes: 2
}
name: 'lbprobe'
}
]
}
dependsOn: [
virtualNetwork
]
}
resource vm 'Microsoft.Compute/virtualMachines@2023-09-01' = [for i in range(0, numberOfInstances): {
name: '${vmNamePrefix}${i}'
___location: ___location
properties: {
availabilitySet: {
id: availabilitySet.id
}
hardwareProfile: {
vmSize: vmSize
}
osProfile: {
computerName: '${vmNamePrefix}${i}'
adminUsername: adminUsername
adminPassword: adminPassword
}
storageProfile: {
imageReference: {
publisher: 'MicrosoftWindowsServer'
offer: 'WindowsServer'
sku: '2019-Datacenter'
version: 'latest'
}
osDisk: {
createOption: 'FromImage'
}
}
networkProfile: {
networkInterfaces: [
{
id: networkInterface[i].id
}
]
}
diagnosticsProfile: {
bootDiagnostics: {
enabled: true
storageUri: storageAccount.properties.primaryEndpoints.blob
}
}
}
}]
output ___location string = ___location
output name string = loadBalancer.name
output resourceGroupName string = resourceGroup().name
output resourceId string = loadBalancer.id
Bicep テンプレートをデプロイする
Bicep ファイルを main.bicep としてローカル コンピューターに保存します。
Azure CLI または Azure PowerShell のどちらかを使って Bicep ファイルをデプロイします。
コマンドラインインターフェース(CLI)
az group create \
--name TestRG \
--___location eastus
az deployment group create \
--resource-group TestRG \
--template-file main.bicep
PowerShell
$rgParams = @{
Name = 'TestRG'
Location = 'eastus'
}
New-AzResourceGroup @rgParams
$deploymentParams = @{
ResourceGroupName = 'TestRG'
TemplateFile = 'main.bicep'
}
New-AzResourceGroupDeployment @deploymentParams
デプロイが完了すると、デプロイが成功したことがメッセージで示されます。
Azure Bastion をデプロイする
Bastion では、ユーザーのブラウザーとプライベート IP アドレスを使って、Secure Shell (SSH) またはリモート デスクトップ プロトコル (RDP) 経由で仮想ネットワーク内の VM に接続します。 VM には、パブリック IP アドレス、クライアント ソフトウェア、または特別な構成は必要ありません。 Azure Bastion の詳細については、「Azure Bastion とは」を参照してください。
注
時間単位の料金は、送信データの使用量に関係なく、Bastion がデプロイされた時点から発生します。 詳しくは、「価格」および「SKU」を参照してください。 チュートリアルまたはテストの一環で Bastion をデプロイする場合は、使用終了後にこのリソースを削除することをお勧めします。
Azure Resource Manager クイックスタート テンプレートのサービスとしての Azure Bastion Bicep テンプレートを使って、仮想ネットワークに Bastion をデプロイして構成します。 この Bicep テンプレートでは、次の Azure リソースが定義されています。
Bicep ファイルを確認します。
@description('Name of new or existing vnet to which Azure Bastion should be deployed')
param vnetName string = 'vnet01'
@description('IP prefix for available addresses in vnet address space')
param vnetIpPrefix string = '10.1.0.0/16'
@description('Specify whether to provision new vnet or deploy to existing vnet')
@allowed([
'new'
'existing'
])
param vnetNewOrExisting string = 'new'
@description('Bastion subnet IP prefix MUST be within vnet IP prefix address space')
param bastionSubnetIpPrefix string = '10.1.1.0/26'
@description('Name of Azure Bastion resource')
param bastionHostName string
@description('Azure region for Bastion and virtual network')
param ___location string = resourceGroup().___location
var publicIpAddressName = '${bastionHostName}-pip'
var bastionSubnetName = 'AzureBastionSubnet'
resource publicIp 'Microsoft.Network/publicIPAddresses@2022-01-01' = {
name: publicIpAddressName
___location: ___location
sku: {
name: 'Standard'
}
properties: {
publicIPAllocationMethod: 'Static'
}
}
// if vnetNewOrExisting == 'new', create a new vnet and subnet
resource newVirtualNetwork 'Microsoft.Network/virtualNetworks@2022-01-01' = if (vnetNewOrExisting == 'new') {
name: vnetName
___location: ___location
properties: {
addressSpace: {
addressPrefixes: [
vnetIpPrefix
]
}
subnets: [
{
name: bastionSubnetName
properties: {
addressPrefix: bastionSubnetIpPrefix
}
}
]
}
}
// if vnetNewOrExisting == 'existing', reference an existing vnet and create a new subnet under it
resource existingVirtualNetwork 'Microsoft.Network/virtualNetworks@2022-01-01' existing = if (vnetNewOrExisting == 'existing') {
name: vnetName
}
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2022-01-01' = if (vnetNewOrExisting == 'existing') {
parent: existingVirtualNetwork
name: bastionSubnetName
properties: {
addressPrefix: bastionSubnetIpPrefix
}
}
resource bastionHost 'Microsoft.Network/bastionHosts@2022-01-01' = {
name: bastionHostName
___location: ___location
dependsOn: [
newVirtualNetwork
existingVirtualNetwork
]
properties: {
ipConfigurations: [
{
name: 'IpConf'
properties: {
subnet: {
id: subnet.id
}
publicIPAddress: {
id: publicIp.id
}
}
}
]
}
}
Bicep テンプレートをデプロイする
Bicep ファイルを bastion.bicep としてローカル コンピューターに保存します。
テキスト エディターまたはコード エディターを使用して、ファイルに次の変更を加えます。
- 2 行目:
param vnetName string
を 'vnet01'
から 'VNet'
に変更します。
- 5 行目:
param vnetIpPrefix string
を '10.1.0.0/16'
から '10.0.0.0/16'
に変更します。
- 12 行目:
param vnetNewOrExisting string
を 'new'
から 'existing'
に変更します。
- 15 行目:
param bastionSubnetIpPrefix string
を '10.1.1.0/26'
から '10.0.1.0/26'
に変更します。
- 18 行目:
param bastionHostName string
を param bastionHostName = 'VNet-bastion'
に変更します。
Bicep ファイルの最初の 18 行は、次の例のようになります。
@description('Name of new or existing vnet to which Azure Bastion should be deployed')
param vnetName string = 'VNet'
@description('IP prefix for available addresses in vnet address space')
param vnetIpPrefix string = '10.0.0.0/16'
@description('Specify whether to provision new vnet or deploy to existing vnet')
@allowed([
'new'
'existing'
])
param vnetNewOrExisting string = 'existing'
@description('Bastion subnet IP prefix MUST be within vnet IP prefix address space')
param bastionSubnetIpPrefix string = '10.0.1.0/26'
@description('Name of Azure Bastion resource')
param bastionHostName = 'VNet-bastion'
bastion.bicep ファイルを保存します。
Azure CLI または Azure PowerShell のどちらかを使って Bicep ファイルをデプロイします。
コマンドラインインターフェース(CLI)
az deployment group create \
--resource-group TestRG \
--template-file bastion.bicep
PowerShell
$deploymentParams = @{
ResourceGroupName = 'TestRG'
TemplateFile = 'bastion.bicep'
}
New-AzResourceGroupDeployment @deploymentParams
デプロイが完了すると、デプロイが成功したことがメッセージで示されます。
注
Bastion ホストがある仮想ネットワーク内の VM には、パブリック IP アドレスが必要ありません。 Bastion がパブリック IP を提供し、VM はプライベート IP を使用してネットワーク内で通信します。 Bastion ホストがある仮想ネットワーク内のいずれの VM からも、パブリック IP を削除できます。 詳細については、「パブリック IP アドレスの関連付けを Azure VM から解除する」を参照してください。
デプロイされているリソースを確認する
Azure CLI、Azure PowerShell、または Azure portal を使って、デプロイされたリソースを確認します。
コマンドラインインターフェース(CLI)
az resource list --resource-group TestRG
PowerShell
Get-AzResource -ResourceGroupName TestRG
ポータル
Azure portal で、[リソース グループ] を検索して選びます。
[リソース グループ] ページで、リソース グループの一覧から [TestRG] を選びます。
[TestRG] の [概要] ページで、仮想ネットワーク、2 つの VM、Bastion ホストなど、作成したすべてのリソースを確認します。
[VNet] 仮想ネットワークを選びます。
[VNet] の [概要] ページで、10.0.0.0/16 の定義されたアドレス空間をメモします。
左側のメニューの [サブネット] を選択します。
[サブネット] ページで、デプロイされた backendSubnet と AzureBastionSubnet のサブネットと共に、Bicep ファイルから割り当てられた値をメモします。