VPN や ExpressRoute を使わずに、Azure Bastion Standard のトンネリング機能を利用して、ローカル PC のブラウザからプライベート IP の Linux VM 上の Web サーバーにアクセスする方法を体験するハンズオンです。
- Azure サブスクリプション
- ローカル PC に以下がインストール済みであること
az loginで Azure にログイン済みであること
| リソース | 説明 |
|---|---|
| Virtual Network | 10.0.0.0/16、2つのサブネットを含む |
| NSG (VM サブネット用) | VNet 内からの 8080 ポートを許可 |
| NSG (Bastion サブネット用) | Bastion に必要なルールを設定 |
| Linux VM (Ubuntu 22.04) | Private IP のみ、Apache2 を 8080 番ポートで起動 |
| Azure Bastion (Standard) | トンネリング機能を有効化 |
| Public IP | Bastion 用 |
git clone https://github.com/h-morozumi/Azure-RemoteVM-tunneling-Handson.git
cd Azure-RemoteVM-tunneling-Handsonazd env set AZURE_VM_ADMIN_PASSWORD '<パスワード>'パスワード要件: 12文字以上、大文字・小文字・数字・記号のうち3種類以上を含むこと
azd up実行すると以下を聞かれます:
- Environment name — 任意の名前(例:
test-tunneling-01) - Azure Subscription — 使用するサブスクリプション
- Azure location — リージョン(例:
Japan East)
デプロイには約 10〜15 分かかります(Bastion の作成に時間がかかります)。
完了すると、以下のような出力が表示されます:
Outputs:
BASTION_NAME = bas-xxxxxxxxx
BASTION_TUNNEL_COMMAND = az network bastion tunnel --name bas-xxxxxxxxx --resource-group rg-xxxxx --target-resource-id /subscriptions/.../vm-xxxxxxxxx --resource-port 8080 --port 8080
RESOURCE_GROUP = rg-xxxxx
VM_NAME = vm-xxxxxxxxx
VM_PRIVATE_IP = 10.0.1.x
VM_RESOURCE_ID = /subscriptions/.../vm-xxxxxxxxx
VNET_NAME = vnet-xxxxxxxxx
ローカル PC のターミナルで、出力された BASTION_TUNNEL_COMMAND をそのまま実行します。
bash / zsh の場合:
az network bastion tunnel \
--name <BASTION_NAME> \
--resource-group <RESOURCE_GROUP> \
--target-resource-id <VM_RESOURCE_ID> \
--resource-port 8080 \
--port 8080PowerShell の場合:
az network bastion tunnel `
--name <BASTION_NAME> `
--resource-group <RESOURCE_GROUP> `
--target-resource-id <VM_RESOURCE_ID> `
--resource-port 8080 `
--port 8080ヒント: デプロイ出力の
BASTION_TUNNEL_COMMANDは1行で出力されるので、そのままコピペすれば bash / PowerShell どちらでも動きます。
成功すると以下のように表示されます:
Opening tunnel on port: 8080
Tunnel is ready, connect on port 8080
Ctrl + C to close
トンネルを開いたまま、ローカル PC のブラウザで以下にアクセスします:
http://localhost:8080
Apache2 のデフォルトページが表示されれば成功です!
ハンズオン終了後はリソースを削除してください:
azd down- Azure Bastion Standard は
enableTunneling: trueを設定すると、az network bastion tunnelコマンドでローカルポートを VM のポートに転送できます - ローカル PC の Azure CLI が Bastion との間に WebSocket 接続を確立します
- ローカルの
localhost:8080へのリクエストが、Bastion 経由で VM の8080に転送されます - VPN や ExpressRoute は不要で、Azure CLI の認証情報だけでプライベートネットワークにアクセスできます
同じ仕組みで SSH も可能です(別のターミナルで実行):
bash / zsh の場合:
# トンネルを開く
az network bastion tunnel \
--name <BASTION_NAME> \
--resource-group <RESOURCE_GROUP> \
--target-resource-id <VM_RESOURCE_ID> \
--resource-port 22 \
--port 2222PowerShell の場合:
# トンネルを開く
az network bastion tunnel `
--name <BASTION_NAME> `
--resource-group <RESOURCE_GROUP> `
--target-resource-id <VM_RESOURCE_ID> `
--resource-port 22 `
--port 2222別のターミナルから SSH:
ssh azureuser@localhost -p 2222az network bastion tunnel は1コマンドにつき1ポートのみ転送できます。複数ポートが必要な場合は、複数のターミナルで並列実行してください。
├── azure.yaml # azd 設定ファイル
├── infra/
│ ├── main.bicep # メインテンプレート
│ ├── main.bicepparam # パラメータファイル
│ ├── abbreviations.json # リソース名略称定義
│ └── modules/
│ ├── vnet.bicep # VNet + サブネット + NSG
│ ├── vm-linux.bicep # Linux VM (httpd 8080)
│ └── bastion.bicep # Azure Bastion Standard
└── README.md
300人規模のハンズオンを Hub & Spoke 構成で一括構築する方法については、以下のガイドを参照してください。
azd を使わずに、Azure ポータルから直接 ARM テンプレートをデプロイすることもできます。
Bicep ファイルから ARM テンプレート(JSON)を生成するには、以下のいずれかのコマンドを実行します:
Bicep CLI を使う場合:
bicep build infra/main.bicepAzure CLI を使う場合:
az bicep build --file infra/main.bicepこれにより infra/main.json が生成されます。(本リポジトリには生成済みのファイルが含まれています)
以下のボタンをクリックすると、Azure ポータルのカスタムデプロイ画面が開きます。
デプロイ画面で以下のパラメータを設定してください:
| パラメータ | 説明 | 既定値 |
|---|---|---|
| Subscription | 使用する Azure サブスクリプション | — |
| Resource Group | 新規作成または既存のリソースグループを選択 | — |
| Region | デプロイ先のリージョン(例: Japan East) |
— |
| Environment Name | リソース名の一部として使用される環境名(1〜64文字) | — |
| Admin Username | Linux VM の管理者ユーザー名 | azureuser |
| Admin Password | Linux VM の管理者パスワード | — |
| Vm Size | VM のサイズ | Standard_B2s |
パスワード要件: 12文字以上、大文字・小文字・数字・記号のうち3種類以上を含むこと
- 上記の「Deploy to Azure」ボタンをクリック
- Azure ポータルにログイン(未ログインの場合)
- カスタムデプロイ画面で各パラメータを入力
- 「確認と作成」→「作成」をクリック
- デプロイが完了するまで約 10〜15 分待機(Bastion の作成に時間がかかります)
- デプロイ完了後、「出力」タブから
BASTION_TUNNEL_COMMANDなどの情報を確認
デプロイ完了後は、Step 4: Bastion トンネルを開始 から同様の手順で操作できます。
リソースの削除: Azure ポータルからデプロイしたリソースグループを削除してください。