Cloud Service
Azure Bastion
VM にパブリック IP を付けず、ブラウザから安全に RDP/SSH 接続。踏み台サーバーを自前で運用せずに済むマネージドサービスで、攻撃面を減らせる。AWS の EC2 Instance Connect Endpoint に近い位置づけ。
- 1.VM にパブリック IP を付けずに、ポータルや CLI から RDP/SSH で安全に接続できる。
- 2.踏み台サーバーを自前で構築・運用する手間とその攻撃面をなくせる。
- 3.TLS 越しに 443 でつなぐため、VM 側で 3389/22 をインターネットへ開けずに済む。
解決する課題
仮想マシン (VM) にパブリック IP を割り当てず、踏み台サーバーも自前で運用せずに、安全に RDP/SSH 接続するためのマネージドサービスです。
- 管理用に VM へパブリック IP を付け、3389 (RDP) や 22 (SSH) をインターネットへ開放したくない
- 自前の踏み台 (Jump Box) サーバーの構築・パッチ適用・可用性確保といった運用負荷をなくしたい
- インターネットに露出した RDP/SSH ポートがブルートフォースやスキャンの標的になるのを避けたい
- VPN クライアントを各自に配らず、ブラウザだけで手早く VM コンソールに到達したい
主要概念と用語
- Azure Bastion: 仮想ネットワーク (VNet) 内に配置し、TLS (443) 越しに RDP/SSH 接続を仲介するマネージドな PaaS。VM へパブリック IP を付けずに接続できる
- AzureBastionSubnet: Bastion を配置するための専用サブネット。この名前が必須で、推奨される最小プレフィックス以上の広さを確保する。他のリソースは置かない
- SKU (Developer / Basic / Standard / Premium): 機能と規模の区分。上位ほど同時セッション数・スケール (インスタンス数) や、シェアラブルリンク・ネイティブクライアント対応などの機能が増える
- ネイティブクライアント接続: ブラウザだけでなく、ローカルの RDP/SSH クライアントや
azCLI 経由でトンネルを張って接続する方式。ファイル転送やスクリプト連携に向く - IP ベース接続: VNet ピアリング先やオンプレミス側の、VNet 外のホストへ private IP を指定して接続する機能 (対応 SKU が必要)
- シェアラブルリンク: 一時的な URL を発行し、Azure ポータルへのサインインなしで特定 VM へ接続させる機能
- ジャストインタイム (JIT) アクセス: Defender for Cloud の機能で、必要なときだけ管理ポートを開く考え方。Bastion と組み合わせて露出時間をさらに絞れる
仕様・制限・クォータ
- AzureBastionSubnet という名前の専用サブネットが必須。推奨される最小サイズ以上を確保し、後のスケールや SKU 変更に備えて余裕を持たせる
- 接続はブラウザ (HTML5) に加え、対応 SKU ではネイティブ RDP/SSH クライアントや
azCLI からも行える - VM 側にパブリック IP は不要。Bastion は VM の private IP に対して接続を仲介する
- 同時セッション数とスケール (インスタンス数) は SKU により上限が異なる。Standard 以上では手動でインスタンス数を増やしてスケールできる
- IP ベース接続・シェアラブルリンク・ネイティブクライアントなどの高度な機能は上位 SKU が前提で、下位 SKU では使えない
- Developer SKU は検証・小規模向けで、専用サブネットやスケール構成の扱いが他 SKU と異なる。本番要件では Standard 以上を検討する
- 1 つの Bastion は配置した VNet を起点に動作し、ピアリングされた VNet 内の VM へも到達できる
内部の仕組み
Azure Bastion は AzureBastionSubnet 上に冗長化されたマネージドインスタンス群として展開されます。利用者はこのインスタンスを直接運用せず、Azure がパッチ適用やスケール時の入れ替えを担います。
- 利用者のブラウザは Bastion のパブリックなフロントエンドへ TLS (443) で接続し、Bastion 内部でセッションが RDP/SSH に変換されて VM の private IP へ中継される
- VM から見ると接続元は同じ VNet 内の Bastion であり、VM 側で 3389/22 をインターネットへ開ける必要がない
- ネイティブクライアント接続では、Bastion がローカルから VM へのトンネルを確立し、その上を RDP/SSH が流れる
- VM のネットワークセキュリティグループ (NSG) は、Bastion サブネットからの 3389/22 を許可するよう設計する。Bastion 自身のサブネットにも所定の受信・送信規則が必要
専用サブネットが狭いと、後からインスタンスを増やすスケールや上位 SKU への変更が難しくなることがあります。最初から推奨サイズ以上のアドレス範囲を割り当てておくと、作り直しを避けられます。
設計パターン / ベストプラクティス
- ハブに集約する: ハブ&スポーク構成ではハブ VNet に Bastion を 1 つ置き、VNet ピアリングでスポークの VM へ到達させる。各 VNet に個別に立てるより運用とコストが楽になる
- VM のパブリック IP を撤廃する: 管理目的のパブリック IP を外し、NSG で 3389/22 のインターネット受信を遮断する。接続経路を Bastion に一本化する
- 最小権限で接続を制御する: VM への接続権限を Azure RBAC で絞り、誰がどの VM へ接続できるかを管理する
- 要件に応じた SKU を選ぶ: ネイティブクライアントや IP ベース接続、シェアラブルリンクが要るなら Standard 以上。検証用途なら下位 SKU で十分な場合もある
- JIT と併用する: Defender for Cloud のジャストインタイム アクセスで管理ポートの開放時間を絞り、露出をさらに減らす
運用・監視
- Azure Monitor / 診断ログでセッションの開始・終了などを記録し、Log Analytics へ送って監査・分析する
- 誰がいつどの VM へ接続したかを追跡できるようにし、不審なアクセスを検知する
- 同時セッション数や利用状況を見てスケール (インスタンス数) や SKU の妥当性を見直す
- VM 側 NSG と Bastion サブネットの規則が接続失敗の典型原因になるため、変更時は受信・送信規則を確認する
- Bastion 自体はマネージドでパッチや可用性を Azure が担うため、踏み台 VM のような OS 保守は不要
コスト
Azure Bastion は稼働時間に対する時間課金と送信データ転送量が主なコスト要素です。接続していなくても、デプロイされている限り時間課金が発生します。
- 時間課金: 選んだ SKU と、Standard 以上で増やしたインスタンス数に応じて時間単位で課金される
- 送信データ転送: 一定量を超える送信トラフィックにデータ転送料金がかかる
- アイドルでも課金されるため、検証用の Bastion は使い終えたら削除して時間課金を止める
VNet ごとに Bastion を立てると台数分の時間課金が積み上がります。ハブに 1 つ集約し、ピアリングでスポークの VM へ到達させると、台数を抑えられます。必要な機能に対して過剰な上位 SKU を選ばないことも効きます。
セキュリティ
- VM の管理ポート (3389/22) をインターネットへ開けずに済むため、攻撃面が大きく縮小する
- 利用者から Bastion までの通信は TLS (443) で保護され、RDP/SSH をインターネットに直接さらさない
- Azure RBAC で VM への接続権限を最小権限に絞り、接続できる対象を管理する
- 診断ログでセッションを監査し、Microsoft Entra ID の条件付きアクセスや多要素認証と組み合わせて本人性を担保する
- シェアラブルリンクは利便性と引き換えに露出を増やすため、発行範囲と有効性を厳格に管理する
シェアラブルリンクはポータルへのサインインなしで特定 VM へ接続させられる反面、URL が漏れると不正アクセスにつながります。必要な相手・期間に限って使い、不要になったら無効化してください。
関連サービス・比較
VM への管理アクセスは Bastion 以外にも手段があります。パブリック IP を直接付ける従来方式や VPN との違いを押さえると選定が速くなります。
| 観点 | Azure Bastion | VM へ直接パブリック IP |
|---|---|---|
| VM のパブリック IP | 不要 | 必要 (インターネットに露出) |
| 管理ポートの公開 | インターネットへ 3389/22 を開けない | 3389/22 をインターネットへ開放しがち |
| 接続方法 | ブラウザや CLI から TLS 越し | RDP/SSH クライアントで直接 |
| 踏み台の運用 | マネージドで保守不要 | 自前の踏み台なら OS 保守が必要 |
| 攻撃面 | 小さい | 大きい (スキャン・総当たりの標的) |
個々の端末から VNet 内のリソース全般へつなぐなら VPN Gateway、管理目的で VM の RDP/SSH コンソールへ手早く安全に入るなら Bastion が向きます。両者は排他ではなく、用途で使い分けます。
ハンズオン / CLI例
# リソースグループを作成
az group create --name bastion-demo-rg --location japaneast
# VNet と AzureBastionSubnet を作成 (専用サブネット名は固定)
az network vnet create \
--resource-group bastion-demo-rg \
--name demo-vnet \
--address-prefix 10.0.0.0/16 \
--subnet-name AzureBastionSubnet \
--subnet-prefix 10.0.1.0/26
# Bastion 用のパブリック IP を作成
az network public-ip create \
--resource-group bastion-demo-rg \
--name bastion-pip \
--sku Standard \
--allocation-method Static
# Azure Bastion を作成 (作成には時間がかかる)
az network bastion create \
--resource-group bastion-demo-rg \
--name demo-bastion \
--vnet-name demo-vnet \
--public-ip-address bastion-pip \
--location japaneast
# ネイティブクライアント (CLI) 経由で VM へ SSH 接続 (対応 SKU が必要)
az network bastion ssh \
--resource-group bastion-demo-rg \
--name demo-bastion \
--target-resource-id "/subscriptions/<sub-id>/resourceGroups/bastion-demo-rg/providers/Microsoft.Compute/virtualMachines/demo-vm" \
--auth-type ssh-key \
--username azureuser \
--ssh-key ~/.ssh/id_rsa
Azure Service
Azure Bastionを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ネットワーキング
比較で見る軸
クラウド: Azure / カテゴリ: ネットワーキング / 難易度: intermediate
導入後に効く点
踏み台サーバーを自前で構築・運用する手間とその攻撃面をなくせる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Azure
- カテゴリ
- ネットワーキング
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- security / operational
判断チェックリスト
- 自社の用途が「ネットワーキング / security」に近いか確認する。
- 強みである「VM にパブリック IP を付けずに、ポータルや CLI から RDP/SSH で安全に接続できる。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。