VPC Reachability Analyzer で EC2 が NAT Gateway 経由でインターネットに出られるか調べてみた

この新機能、もっと前から欲しかった!ってくらいVery便利。
2021.01.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ちゃだいん(@chazuke4649)です。

先日の re:Invent 2020で VPC Reachability Analyzer が発表されました。

一言で言うと、VPC内のリソース間の接続性をテスト出来るVPCの新機能ですが、現時点で以下のような送信元(送信先)タイプとしては以下が選べます。

  • Transit Gateways
  • VPN Gateways
  • Instances
  • Network Interfaces
  • Internet Gateways
  • VPC Endpoints
  • VPC Connections

「あ、Internet Gatewayがある。ならVPC間の通信以外に、インターネットへのアウトバウンド通信もテストできそうだ」

というワケで、ありがちな「プライベートサブネットのEC2がNAT経由でインターネットに出られない問題」をこのツールを使って調査してみました。

VPC Reachability Analyzer については、以下エントリをご参考ください。

構成図

2つのパブリックサブネットにNAT Gatewayを配置し、プライベートサブネットにEC2を配置しているとてもシンプルな構成で行います。

1.成功した場合

まずは、うまくいった場合どうなるのかをみてみたいと思います。

VPCコンソールからVPC Reachability Analyzerを開き、送信元と送信先を入力するだけでOKです。とても簡単。

送信元には、プライベートサブネットにいるEC2インスタンス、送信先には、EC2インスタンスがいるVPCのインターネットゲートウェイを指定しました。

上記作成後しばらくすると解析が終わり、下図のように「到達可能」であることがわかります。

下図のように、詳細な経路がわかるのがVPC Reachability Analyzerのめちゃ良い点ですね。

うまくいけばこのようになります。

2.失敗した場合(ルートテーブル)

今回の構成の場合、NAT Gateway を作成した後に、EC2のいるプライベートサブネットのルートテーブルに 送信先:0.0.0.0/0 ターゲット:nat-xxxxxxxx といったルートが必要です。これがない場合どうなるかみてみます。先ほど成功した構成から対象のルートを削除し、もう一度分析を実行しました。

すると、下図のように「到達不可能」という結果が出ました。

3つ原因と思われる点が説明されています。今回の場合は「ルートテーブル rtb-xxxxxxxx には igw-xxxxxxxx への適切なルートがありません。rtb-xxxxxx を参照してください。」があり、ルートテーブルが怪しいと指摘してくれます。文中にあるハイパーリンクで飛ぶと下図の通り対象のルートテーブルをすぐに確認できて便利です。     
  

3.失敗した場合(セキュリティグループ)

2.で原因とされたルートテーブルを修正し成功を確認した後、次はセキュリティグループをみてみます。試しに、EC2のセキュリティグループのアウトバウンドを HTTPS(443)のみ 0.0.0.0/0 への通信を許可する状態に変更してみます。

そして、VPC Reachability Analyzer 側では下図の通り、先ほどと同様の送信元・送信先に追加で 送信ポート HTTP(80)で設定し、分析してみました。

分析結果としてはやはり「到達不可能」となり、「次のセキュリティグループの egress ルールはいずれも適用されません: sg-xxxxxxxxxxx」と指摘されました。

文中のハイパーリンクから対象のセキュリティグループを確認すると、アウトバウンドルールを確認できます。

終わりに

プライベートなEC2からNAT経由でインターネット到達性を試しました。ありがたいこの機能、フル活用してVPCネットワークのトラブルシュートを減らしていきたいものです。

それではこの辺で。ちゃだいん(@chazuke4649)でした。

参考資料

What is VPC Reachability Analyzer? - Amazon Virtual Private Cloud

新機能 – VPC Reachability Analyzer | Amazon Web Services ブログ