📖

Azure VMからの通信要件について整理する

2022/02/15に公開

はじめに

Azureのさまざまなサービスを利用したときに、「このエンドポイントに通信が出来るようにしておくこと」といった設計要素があります。多くのサービスは「サービス名」+「通信要件」当たりで検索すれば公式ドキュメントにたどり着きます。
ただAzure VMに関してはまとまった情報が見つけられず、知る限りの情報を今回まとめてみたいと思います。
(間違ってたらツヨツヨAzurerの方がコメントくれると期待して。)

通信先

Azure VMからの通信要件として、利用者として意図して空けておかないといけない通信先は当然あります。例えば、Active Directoryのドメインコントローラ⇔メンバーサーバや、アプリケーションサーバ⇔DBサーバの間の通信などが該当します。これらが通信要件として明らかに意識するので、設定から漏れることはまず無いでしょう。
一方でAzure VMを正常に稼働させるために、Azureレイヤーと通信できるようにしておく必要があります。

私の知る限り、開けておいた方が良い通信先は3つです。NSGや、ルートテーブルでの強制トンネリング、ゲストOS上のローカルファイアウォールなどで通信が出来ない状態になると、動作が異常になる可能性があるので注意しましょう。

通信先1:168.63.129.16

「Azure プラットフォームとVMが通信をするための、仮想的なパブリックIP」とのことです。
Microsoftの保有するグローバルIPとのことですが、基本的にすべてのリージョンで利用される通信先とのこと。
<参考>
https://docs.microsoft.com/ja-jp/azure/virtual-network/what-is-ip-address-168-63-129-16

具体例としては、下記のような通信で使われています。

  • VM上のエージェントがアウトバウンドで通信に行く
  • VMからDNSサービスに問い合わせに行く(Azureの内部DNS)
  • ALBのバックエンドにしたVMに対して、正常性プローブ通信が発信される(VMからみるとインバウンドですね)
  • DHCPサービスから動的にIPアドレスを受け取る

VMのステータスをAzure基盤に通知する、などの用途で使われているようで、実際にNSGでこの通信を閉じたところ、正常に起動しなくなった…といったトラブルを聞いたことがあります。

通信先2:169.254.169.254

「インスタンスメタデータサービス」の通信先です。AzureVMの構成情報や、メンテナンスの通知、ManagedIDの情報などを取得する先です。
詳細は下記のドキュメントを参照…なのですが、日本語版は2022/2/15現在、記事構成がおかしくなってしまっているので英語版で読むのを推奨します。
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=windows

メタデータの呼び出しはVMのプライマリのネットワークカードに割り当てられたプライマリIPアドレスから呼び出す必要がある…といった制限もあるので、複数NIC構成の場合はOS上のルーティングにも注意が必要です。

通信先3:23.102.135.246(kms.core.windows.net)

AzureのKMSサーバのIPアドレスです。ドイツやUSのGovクラウドなど別のホスト・IPアドレスとなるリージョンもありますが、基本的にはグローバルで共通になっています。
ネット上には「NSGでは暗黙的に許可されているので塞ぐことは出来ない」と言った情報もありましたが、ルートテーブルで強制トンネリングをする場合は注意が必要です。当該IPアドレスに対しては、カスタムルートを入れて直接通信できるようにすることが推奨されています。
https://docs.microsoft.com/ja-jp/troubleshoot/azure/virtual-machines/custom-routes-enable-kms-activation

おわりに

以上、Azure VMに関する通信要件でした。Azure VMではいろんなレイヤで通信を絞ることができますが、セキュアに運用しようと思うあまりついうっかり塞ぎすぎてしまうことがあり得ます。今回まとめたのは「最低限」の話ですので、ここも標準的に開けるにしておいた方がいいんじゃないの、みたいな情報をコメントいただければ幸いです。

Discussion