🌐

AWS リソース間通信は本当にインターネットに出ないのかを Datadog Network Path で検証する

に公開

はじめに

システム要件を整理する際、次のような AWS の仕様を確認されたことはあるでしょうか。

https://aws.amazon.com/jp/vpc/faqs/

パブリック IP アドレスを使用する場合、AWS でホストされているインスタンスとサービス間のすべての通信は AWS のプライベートネットワークを使用します。AWS ネットワークから発信され、AWS ネットワーク上の送信先を持つパケットは、AWS 中国リージョンとの間のトラフィックを除いて、AWS グローバルネットワークにとどまります。

これは「AWS のリソース間通信は、パブリック IP アドレスを使用した場合でもインターネットに出ない」ことを示しており、インターネット経由の通信を禁止したい要件にとってありがたい仕様といえます。
しかし、実際にその通信経路がどのように見えるのかを外部から確認することは簡単ではありません。

本記事では、Datadog の Network Path を利用し、EC2 インスタンスから外部サービスに通信する際の経路を可視化しながら、AWS 内外のネットワーク挙動を確認してみます。

Datadog Network Path とは

Datadog Network Path は、Datadog エージェントから目的地までの通信経路を可視化する機能です。
途中ホップの IP アドレス、遅延、パケットロスなどを時系列に記録し、ネットワークの状態をわかりやすい UI で俯瞰できるのが特徴です。

https://docs.datadoghq.com/network_monitoring/network_path/

検証

Network Path の設定方法

今回の検証では、EC2 インスタンス上の Datadog Agent に対して Network Path を設定し、別リージョンの EC2 インスタンスおよび外部サービスまでの経路を観測します。

  1. Datadog Agent をインストールする
  2. Datadog Agent の設定ファイルで Network Path を有効化し、監視対象のエンドポイントを指定する
  3. Agent を再起動して設定を反映する

設定ファイル例(Linux - /etc/datadog-agent/conf.d/network_path.d/conf.yaml)

instances:
  - hostname: example.com
    protocol: TCP
    port: 443
    min_collection_interval: 120

  - hostname: 54.XX.XX.XX # パブリック IP アドレス
    protocol: TCP
    port: 443
    min_collection_interval: 120

これだけで、エージェントから目的地までの経路が継続的に可視化されます。

https://docs.datadoghq.com/network_monitoring/network_path/setup/

結果

外部サービス(example.com)宛の通信

example.com を宛先にした場合、Network Path の結果から、AWS の AS(AS16509)を出た後に外部 AS を経由していることが確認できました。
これは、通信が AWS 内部ネットワークを離れ、インターネットを通過していることを意味します。

※途中が Unknown hops となっている箇所は、ルータが ICMP 応答を返さない(セキュリティ設定で無効化されている)などの理由が考えられますが、特に珍しいものではなく異常でもありません。

別リージョンの EC2 インスタンス(パブリック IP アドレス)宛の通信

こちらのケースでは、途中ホップがインターネットでは使用されないアドレス(240.0.0.0/4)のみでした。 つまり、インターネットには出ておらず、パブリック IP を利用した場合でもリージョン間の通信が AWS ネットワーク内に閉じていると判断できます。

※Unknown hops はありますが、レイテンシーや上記 "外部サービス(example.com)宛の通信" の挙動などと比較すると、インターネットには出ていないと判断できます。

余談: AWS 上でホスティングされているサービス(docs.datadoghq.com)宛の通信

現時点で https://docs.datadoghq.com は AWS 上で稼働していますが、このエンドポイント宛に Network Path を実行した場合も、同様に EC2 インスタンスからの通信がインターネットを経由していないことが確認できます。

まとめ

今回、Datadog Network Path を「AWS ネットワークの仕様確認」という目的で利用しましたが、Network Path はネットワーク通信経路を可視化し、遅延や通信障害の切り分けを効率化できる機能です。
特に、「内部ネットワークに問題があるのか、インターネットに出た後の経路に原因があるのか」を切り分けられる点は非常に有用です。

クラウド環境に限らず、組織内ネットワークや自社 DC との接続が疑わしい場合でも、どこから調査を始めるべきかを明確に示してくれます。
社内ネットワークのブラックボックス化した区間や、外部サービスとの接続状況を時系列で把握したい場合は、ぜひ Datadog Network Path をご活用ください。

Datadog Tech Blog

Discussion