今回はAzure Bastionを使用し、ピアリングした仮想ネットワーク内の仮想マシンに接続する方法について解説します。
Azure Bastionとは
Azure Bastionとは、Azure Portalから仮想ネットワークのサブネット内にある仮想マシンへ接続する踏み台を提供するサービスです。Azure Bationは従来の踏み台サーバと比較し、以下のような特徴があります。
- ブラウザのHTTPS接続(443番ポート)を使用して接続するため、SSH/RDPのクライアントは不要
- Azureの仮想マシンでは、パブリックIPアドレスのない仮想マシンにアクセスできる
- NSGの設定が不要
- 踏み台用の仮想マシン構築が不要となる
そのため、Azure Bastionを使用することで仮想マシンへの踏み台を簡単に作成することができます。
Azure BationにはBasicとStandardの2つのSKUがあります。2つのSKUの違いについては以下の通りです。
■Basic、Standard共通
- ピアリングを利用したVMへのアクセス
- Key Vaultを使用したSSH接続
- SSHを使用したLinux VMへのアクセス
- RDPを使用したWindows VMへのアクセス
■Standardのみ可能
- ホストのスケーリング
- カスタム受信ポートの指定
- SSHを使用したWindows VMへのアクセス
- RDPを使用したLinux VMへのアクセス
規模の大きい環境の踏み台作成や独自の受信ポートを設定したい場合にはStandardを設定し、それ以外はBasicを設定します。
今回の構成
今回作成する構成は以下の通りです。VNET1とVNET2でピアリング接続させ、Azure BastionでVNET1の仮想マシンとVNET2の仮想マシンのどちらでもアクセスできるように構成します。

Azure Bastion設定時の注意
Azure Bastionを作成するには、以下のものが必要となります。
- /26以上のサブネットを持っている
- サブネット名がAzureBationSubnetである
- パブリックIPのSKUがStandardである
上記を満たしていないとAzure Bastionを作成できないため注意が必要です。
Azure Bastionの設定
今回は構成図のリソース作成をCloud Shellから行い、Bastionの接続につきましてはAzure Portalを使用して行います。
仮想ネットワーク、サブネット、仮想マシン、Bastionの作成を行うコマンドは以下の通りです。
# 変数定義
RESOURCE_GROUP="test-rg1"
VNET_NAME1="test-vnet1"
VNET_NAME2="test-vnet2"
SUBNET_NAME1="subnet1"
SUBNET_NAME2="subnet2"
BASTION_SUBNET_NAME="AzureBastionSubnet"
PEERING_NAME1="test-peering1"
PEERING_NAME2="test-peering2"
BASTION_NAME="test-bastion1"
PUBIP_NAME="test-pubip1"
VM_NAME1="test-vm1"
VM_NAME2="test-vm2"
VM_USER="azureuser"
LOCATION="japaneast"
# リソースグループを作成
az group create -g $RESOURCE_GROUP -l $LOCATION
# 仮想ネットワークおよびサブネットの作成
# Azure Bastion用のサブネットは別途作成
az network vnet create -n $VNET_NAME1 \
-g $RESOURCE_GROUP \
-l $LOCATION \
--address-prefixes 10.10.0.0/16 \
--subnet-name $SUBNET_NAME1 \
--subnet-prefixes 10.10.0.0/24
az network vnet create -n $VNET_NAME2 \
-g $RESOURCE_GROUP \
-l $LOCATION \
--address-prefixes 10.20.0.0/16 \
--subnet-name $SUBNET_NAME2 \
--subnet-prefixes 10.20.0.0/24
az network vnet subnet create -n $BASTION_SUBNET_NAME \
-g $RESOURCE_GROUP \
--address-prefixes 10.10.10.0/26 \
--vnet-name $VNET_NAME1
# 仮想ネットワーク間でピアリング接続を作成
# ピアリング接続は両方の仮想ネットワークで接続させる必要がある
az network vnet peering create -n $PEERING_NAME1 \
-g $RESOURCE_GROUP \
--vnet-name $VNET_NAME1 \
--remote-vnet $VNET_NAME2 \
--allow-forwarded-traffic \
--allow-vnet-access
az network vnet peering create -n $PEERING_NAME2 \
-g $RESOURCE_GROUP \
--vnet-name $VNET_NAME2 \
--remote-vnet $VNET_NAME1 \
--allow-forwarded-traffic \
--allow-vnet-access
# Bastion用のPublicIPアドレスを作成
# SKUをStandardにしないとBastion作成時にエラーとなる
az network public-ip create -n $PUBIP_NAME \
-g $RESOURCE_GROUP \
--sku Standard
# Azure Bastionを作成
# Azure CLIで作成するとSKUがStandardになる
az network bastion create --n $BASTION_NAME \
-g $RESOURCE_GROUP \
--public-ip-address $PUBIP_NAME \
--vnet-name $VNET_NAME1
# 仮想マシンの作成
# Bastionのみ接続可能にするためPublic IPアドレスを空にする
az vm create --name $VM_NAME1 \
--resource-group $RESOURCE_GROUP \
--image UbuntuLTS \
--vnet-name $VNET_NAME1 \
--subnet $SUBNET_NAME1 \
--public-ip-address "" \
--admin-username $VM_USER \
--generate-ssh-keys
az vm create --name $VM_NAME2 \
--resource-group $RESOURCE_GROUP \
--image UbuntuLTS \
--vnet-name $VNET_NAME2 \
--subnet $SUBNET_NAME2 \
--public-ip-address "" \
--admin-username $VM_USER \
--generate-ssh-keys
仮想マシンの作成完了後、仮想マシンの秘密鍵を表示し文字列をエディタ等にメモしておきます。
# 秘密鍵を表示する
# 表示された文字列を全てコピーする
cat .ssh/id_rsa
Azureリソースの作成が一通り完了したら、Azure Portalから作成した仮想マシンを選択し「接続」から「Bastion」をクリックします。

Bastion選択後、SSH接続のユーザー名と秘密鍵の文字列を入力し「接続」をクリックします。

test-vm1のコンソールが表示されれば接続成功となります。

ピアリング接続を行っているtest-vm2も同様の手順で接続を行い、以下のコンソールが接続できれば接続成功となります。

ピアリング接続やアクセス権限が正しく設定できていない場合、接続時にAzure Basionの作成画面が表示されるため、以下のような画像が表示されたらピアリング等の設定を再度確認してみましょう。

全ての操作が終了したらリソースをクリーンアップします。
# リソースのクリーンアップ
az group delete -n $RESOURCE_GROUP
まとめ
- Azure BastionはAzureの仮想マシンへ接続するための踏み台サーバの役割を提供するサービス
- Azure Basion作成時には/26以上のサブネット、サブネット名がAzureBationSubnet、StandardのパブリックIPが必要
- 仮想ネットワーク間でピアリング接続があれば、ピアリング先の仮想ネットワークの仮想マシンにも接続可能
- ピアリング接続やアクセス権限が正しく設定されていないと、ピアリング先の接続でBastionの作成を促されるため、うまく接続できない際は設定を確認する。
参考資料
・Azure Bastionとは
https://docs.microsoft.com/ja-jp/azure/bastion/bastion-overview
・VNet ピアリングと Azure Bastion
https://docs.microsoft.com/ja-jp/azure/bastion/vnet-peering
・az network bastion
https://docs.microsoft.com/ja-jp/cli/azure/network/bastion?view=azure-cli-latest