人間のあるべき姿の探索

思索・人形・エンジニアリング

Azure仮想ネットワークのサブネット間通信の許可及び拒否を変更する

初めに

ここ最近はAZ104というAzure管理者向けの資格の勉強をしているのですが、その中でAzureで使用できる仮想ネットワークの設定についての項目が1/4程度と大きな割合を占めており、実際にAzureでは顧客のネットワーク関連の可用性や機密性といったセキュアな構築を実装するためのソリューションが提供されています。

その中で、少し気になった記述があり、実際に試してみた話になります。

Azure がサブネット間でトラフィックをルーティングするためのゲートウェイを定義する必要はありません。

通常ネットワーク範囲内にサブネット分割をするとサブネット間での通信には専用の設定が必要なのですが、Azureでは必要ないようです。後述しますが、こちらはデフォルトでNSG(ネットワークセキュリティグループ)の設定がされていることに起因するようです。その為、このあたりの設定を弄ってサブネット間通信の許可及び拒否する設定を試していきます。

learn.microsoft.com

試してみる

全体構成

以下の図に示す構成を組んでいきます。仮想ネットワーク内にサブネットを二つ作成し、それぞれに仮想マシンを一台ずつホストします。また、仮想マシンに紐づけられたNIC及び各サブネットに対してNSGを紐づけることで、これらの通信を一括で管理します。

基本的にはこちらの記事を参考にしていますが、一部追加設定が必要だったのと、拒否設定も試したかったことがあり、同じようなサブネット構成を作成しています。

kogelog.com

リソースの設定を確認する

上記構成で各種リソースを作成したので、設定値を確認します。

まず、各仮想マシンがデプロイされ、それぞれsubnet1及びsubnet2に配置され、NICが刺さっていることを確認します。今回はVM1にRDP接続してVM1→VM2にping(ICMP)で疎通確認をするため、一旦パブリックIPを持たせています*1

そして、NSGにサブネット及びNICが紐づいていることを確認します(NSGの名前間違えてデフォルト名のvm-1-nsgで作りましたが、両サブネットで使用しています)。

ここで、受信規則を確認します。

NSGのデフォルトの規則が優先度65000,65001,65500でそれぞれ作成されていますが、65000のAllowVNetInboundが今回のポイントになります。これは仮想ネットワーク間の任意プロトコル・ポートでの通信を許可する設定になります。これが設定されていることで通信が可能になります。

サブネット間の通信はなぜ可能なのか?という問いについては、恐らくここで設定されているからということになります。とはいえ仮想ネットワーク内で許可したらその中のサブネット間も全て許可する設定であるという点が肝なので、そこは抑えておきたいですね。

仮想マシンの設定を更新する

NSG設定に加えて、ICMPプロトコルを使用して疎通確認をする場合、仮想マシン上でも設定が必要です。というのも、TCP/UDPプロトコルFirewall設定でデフォルト許可されているのですが、特にWindowsマシンではICMPはデフォルトで拒否されているため、一度VMにログインしてFirewall設定を更新する必要があります。Inbound Rulesの中にICMP関連の設定が4つあるので、全てEnabledにします。

www.syuheiuda.com

サブネット間の疎通確認をする

VM1にRDP接続し、PowerShellpingを叩いてみると、接続できることが確認できます。一応別マシンですが1msで送れているのは嬉しいですね、Wi-Fiだとあまり速度が出ないので、オンプレだとEthernet繋ぐんでしょうか。IaaSのメリットとして物理サーバが要らない点がありますが、ただサーバを置かなくて済むというよりは、サーバの構成を変更する際にも物理的な作業が必要なくなる点があるな、と感じました*2

サブネット間通信を拒否する

NSGの設定を追加します。65000より高い優先度で、今回疎通確認に使用するICMPプロトコルをsubnet1からsubnet2の通信で拒否する設定を追加します。

VM1からpingを叩くと接続できなくなります。

終わりに

いかがでしたか?今回はAzureのサブネット間通信について試してみました。結論としてはNSGによる設定で仮想ネットワーク内の通信が簡単に管理できるといった点に落ち着くのですが、特定のケースでどうやって設定するのか?と気になった時に意外とMicrosoft公式コンテンツを見てもうまく設定できないことがあったのでやってみました。

なぜ書いたか…というところですが、Azureの学習コンテンツにこの設定方法が見つからなかったからなんですよね。Azureの学習コンテンツにはサンドボックスを使用して実際のサブスクリプションで設定を作成する演習や動画で設定の流れを追うラボシミュレーションがあるのですが、AZ104カテゴリの仮想ネットワーク関連モジュールでは、サブネット内のVM間通信や仮想ネットワーク間ピアリングの演習があったのに丁度サブネット間通信の演習はなかったんですよね。ドキュメントベースでは把握していましたが、実際に試さないと怖いね、ということで試した次第です。

皆さんも実際に手を動かしましょう、手を動かさないと人は理解しないので(動画だけ眺めて終えた数々のコンテンツを思い出して無事死亡)。お疲れさまでした。

*1:記事を書いている段階でリソース削除済の為、パブリックIPは気にしなくてOKです

*2:そういう点でサブネットとか論理的にネットワークを管理する手法が流行ったんだとは思いますけどね