[Azure] Private EndpointにNSGが効くようになったって?
はじめに
8/17に、気になるアップデートが公開されていました。
これまで、Private EndpointはNSGで守ることは出来なかったのですが、今回晴れてこの機能がGAされました。
Private Endpointは、IPリーチャブルであればオンプレミスから専用線経由で使うことができるなどとても便利な存在ですが、逆に「ココからだけはアクセスさせたくないんだけど…」を実装することがこれまで難しいものでした。
例えば接続先がストレージアカウントだとして、接続元のNSGで送信規則を書いて絞るとか、接続元VMのManagedIDにストレージアカウントの参照権限を付けないとか、絞る方法はもちろんありました。ただ、「何か一つミスって突破されても大丈夫なように多層防御しましょう」という時代に、より簡単に制御できる仕組みが追加されることは大歓迎でしょう。
検証してみる
早速ですが、Private EndpointにNSGを適用して、制御可能か試してみます。
これまでの構成
これまでは、Private Endpointを置くサブネットにNSGを適用しても、Private Endpoint向けの通信は制御不可でした。
構成図
下記のような環境を構築します。
右上のtestVMから、PrivateEndpoint経由でストレージアカウントにアクセスする構成を想定します。
左側のBastionはただの踏み台で、testVMにログインするために使います。
設定内容
細かいですが設定内容をいくつか確認します。
-
PriEP-NSG
Inboundの443portをDenyします。もしこれが効果あれば、testVMからPrivate Endpointへのアクセスが出来なくなるはずです。
-
プライベートエンドポイントネットワークポリシー
今回キモになる設定がこちらです。デフォルトでは「無効」になっています。詳細は後述します。
検証
この状態で、testVMからストレージアカウントへの接続を試します。
今回は簡単に試せるよう、Storage Explorerで接続してみます。…もちろん、参照可能です。
以上のように、NSGを適用していても、通信が制御できていないことが分かりました。
今回のアップデートでの構成
次に、今回のUpdateを反映してみます。
構成図
下記構成図の★印のところにて、設定変更を行います。
設定変更
- プライベートエンドポイントネットワークポリシー
デフォルト無効だったこの設定を「有効」に変更します。これにより、サブネットに適用されたNSGが効くようになります!
検証
同じようにtestVMからアクセスしてみると…
静止画(スクリーンショット)だととても分かりづらいですが、クルクルアイコンが回って読み込みが終わりません。ネットワーク的に通じないことが分かります。
さて、NSGが効くことさらに試してみます。InboundのDenyルールを削除します。
すると、今度は通信が可能になり、BLOBのデータをダウンロードできるようになりました。
以上から、NSGがちゃんと効いて、Private Endpointへの通信が制御できていることが分かりました。
おわりに
今回は、Private EndpointのNSG制御を検証しました。これまでとは違った切り口でPrivate Endpointを守れるようになったことが確認できました。ちょっとした設定修正で簡単に有効にできますので、ぜひ活用して安全にAzureを利用していきましょう。
Discussion