AWS VPC の機能に、Reachability Analyzer というものがあります。Reachability Analyzer(到達性分析ツール)は名前の通りVPC内の2つのリソース間のネットワーク到達可能性を分析する機能で、通信経路を詳細に分析することができます。
今回はそんな Reachability Analyzer を使って実際にトラブルシューティングした例についてご紹介します。
発生した問題
AWS Batch で起動したECSコンテナからEC2インスタンスに接続できないという問題が発生しました。条件は以下の通りです。
- ECSコンテナとEC2インスタンスは同一VPC内
- セキュリティグループは以下の通信を許可
- ECSコンテナ
- インバウンド:VPC内からの全トラフィック
- アウトバウンド:すべてのトラフィック
- EC2インスタンス
- インバウンド:VPC内からの全トラフィック(*)
- アウトバウンド:すべてのトラフィック
- ECSコンテナ
(*) 許可ソースにVPC内からの全トラフィックを許可するセキュリティグループを設定
セキュリティグループはどちらもVPC内からの全トラフィックを許可しており、問題なく相互に通信できる想定だったため、最初は何が原因かさっぱりわかりませんでした。
分析と対応
問題の通信を Reachability Analyzer で分析した結果がこちらです。
送信元をECSコンテナ、送信先をEC2インスタンスに指定したところ、「到達不可能」との結果が出ていました。
パスの詳細を確認してみると、ECSコンテナからアウトバウンド通信が出た後、EC2インスタンスのネットワークインターフェイスへの通信でエラーになっています。メッセージには「次のセキュリティグループの ingress ルールは適用されません」とあり、セキュリティグループのインバウンド通信設定に問題があることがわかります。
ソースをセキュリティグループに設定した場合、セキュリティグループに関連付けられたネットワークインターフェイスからの通信が許可されます。逆に言うとそれ以外の通信は許可されないので、特定のセキュリティグループでVPC内からの全トラフィックが許可されていても、そのセキュリティグループを送信元に適用していなければ通信ができないということになります。セキュリティグループに対する知識不足が原因のエラーでした...
AWSのセキュリティグループの許可ソースにセキュリティグループを設定するパターンとは
上記の内容を踏まえ、ECSコンテナのセキュリティグループを新たにソースとしてインバウンドルールを追加しました。
結果、今度は「到達可能」となりました!
補足
Reachability Analyzer はコンソールの検索窓で「Reachability Analyzer」と検索すると出てきます。
さいごに
最初は通信設定に問題はないと思い込んでおり詰まっていたのですが、Reachability Analyzer を試してみたことで無事に解決することができました。
送信元、送信先、プロトコルを指定するだけで簡単に分析でき、どこに問題があるか視覚的に確認できるので、リソース間通信のトラブルシューティングに非常におすすめです。