Azure BastionにNSGを設定して接続元を制限する
Azure Bastion
Azure Bastionは日本語で「要塞」と言われていますが、要するに仮想マシンにインターネットから直接RDP, SSHを行うことなく、このBastionの踏み台を経由して安全に接続するサービスです。
Bastion経由で接続するVM毎にRBACをしっかり設定することで、仮想マシン内のユーザID、パスワードを知っていたとしてもMicrosoft Entraでの認証認可が通らないと接続できないため、よりセキュアとなります。
他にBastion経由で接続したセッションログは診断設定にてLog Analyticsなどに残すことも出来るので、後からの監査にも有用ですね。
Azure BastionにNSGを適用する
Azure Bastionは仮想ネットワーク内の専用サブネット「AzureBastionSubnet」に配置をしますが、Azure PortalからBastionを作成する際には、特にサブネットに対してNSGは設定されません。
つまり、既定ではBastionに接続する際のTCP/443ポートはInternet上からはオープンとなっています。
無論Bastion経由で接続するユーザの認証認可をMicrosoft Entra側で絞ることも出来ますが(条件付きアクセス)、今回は以下のドキュメントにのっている、AzureBastionSubnetにNSGを設定して接続元を絞ることを試してみました。
このAzureBastionSubnetにNSGを適用する場合にはBastion内部の通信用にいくつか明示的に空けておかないといけない規則があります。
アーティクルの更新日付が2024/4/5のものを参照しているのですが、説明としてはしっかり書かれていて申し分ないのですが、実際にこれら8個のルール(+α)をAzure Portalから手打ちで入れるのもしんどいので、Bicepテンプレートを作成しました。
こちらをお試しください。
中のREADME.mdにも書きましたが、先にmain.bicepparamを修正後、以下の感じでデプロイすれば良いです。
r="rg-bastion-test"
az group create -n $r -l japaneast
az deployment group create -g $r --template-file main.bicep --parameters main.bicepparam
指定したリソースグループ内に以下のリソースが作成されます。
- 仮想ネットワーク
- NSG(AzureBastionSubnet用)
- NSG(仮想マシンSubnet用)
- Nat Gateway(+Public IP)
- Bastion(+Public IP)
実際に接続する仮想マシンは作成していないので、適宜好きなOSを「snet-vms」のサブネットにデプロイしてください。
接続確認
今回はUbuntu Server 22.04LTSの仮想マシンを追加でデプロイしています。
AzureBastionSubnetに適用しているNSGは以下の通りです。
ドキュメントに書かれているものから、TCP/443の受信セキュリティ規則のSource Addressを私の自宅WAN側IPアドレスにしています。
送信、受信ルール共に優先度4000にて全拒否ルールを追加しています。
仮想マシンを配置しているsnet-vmsに適用しているNSGはデフォルトルールのみとなっています。(外部からの受信は全拒否、外部への通信は全許可)
ではAzure Portalの仮想マシンリソースからBastion経由で接続してみましょう。
無事繋がりましたね。
接続元IPアドレスをVPN経由やモバイルWi-Fi経由で変更すると、つながらなくなりますので検証OKです。(画面キャプチャは無いです)
感想
以下、思った事です。
- Bastionは現時点ではIPv6非対応なのかぁ。
- AzureBastionSubnet上にAzure PortalからBastionをデプロイする際に、一緒にNSGも作成してくれたらいいのに。
- BastionにはPublic IPがあるが、(当たり前だけど)VMからのOutboundでこのIPアドレスを使ってくれるわけではないので、一緒にNAT Gatewayなども用意する必要があるね
2025/9までは無くても通信できるけど、今からしっかり設計して準備しておきたい
Default outbound access for VMs in Azure will be retired— transition to a new method of internet access
以上、何かの参考になればうれしいです。
Discussion