Transit Gatewayのデフォルト関連付けと伝播を分けてany to anyを防ぐ設計

Transit Gatewayのデフォルト関連付けと伝播を分けてany to anyを防ぐ設計

2025.08.19

こんにちは。

ゲームソリューション部/業務効率化ソリューション部の西川です。

今回はTransit Gatewayの「デフォルトの関連付けルートテーブル」と「デフォルトの伝播ルートテーブル」を、share用とVPC用のルートテーブルIDにそれぞれ設定しておくことで、初期状態でany to anyにならない設計にする話を書きます。

はじめに

TGWは複数のアタッチメント(VPC、VPN、Direct Connect、Peeringなど)をハブ&スポーク型で接続できるサービスです。便利な反面、設定を誤るとスポーク同士が予期せず相互到達してしまう、いわゆるany to any状態を作ってしまうことがあると思います。

新しいアタッチメントを作ったとき、どのルートテーブルに「関連付け」られるか、どのルートテーブルへ経路が「伝播」されるかは、TGW側のデフォルト設定に従います。
つまり、意図したルートテーブルIDを先に指定しておくと、最初からany to anyを避けた配線にできます。

本記事では次の方針で進めます。

  • デフォルトの関連付けルートテーブルにVPC用のルートテーブルIDを設定
  • デフォルトの伝播ルートテーブルにshare(共有サービス/中央集約) 用のルートテーブルIDを設定

こうしておくと、新規アタッチメントは自動的にVPC側ルートテーブルへ関連付けられ、伝播はshare側にだけ入ります。
スポーク同士に経路がばらまかれないため、初期状態で相互接続が生まれません。
中央のshare側から必要な経路だけを選別して配布する、という運用がやりやすくなります。

やってみた

準備

  • TGWが1台以上あること

スクリーンショット 2025-08-19 17.42.04

  • TGWルートテーブルが2つあること
    • 例として tgw-rtb-vpc をVPC用、tgw-rtb-share をshare用として扱います

スクリーンショット 2025-08-19 17.42.12

  • share VPC用のアタッチメントが作成済みであること
    • デフォルト関連付け、デフォルト伝播を設定後にこちらのアタッチメントを作成すると、不要なRTに設定が追加されてしまうため注意

スクリーンショット 2025-08-19 17.50.35

  • tgw-rtb-vpc の関連付けと伝播にshare VPC用のアタッチメントを追加してあること
  • tgw-rtb-share の伝播にshare VPC用のアタッチメントを追加してあること

実装

まずはコンソールでデフォルト設定を変えます。

  1. TGWの設定画面を開く
  2. 「デフォルト関連付けルートテーブルID」でVPC用ルートテーブルIDを選択
  3. 「デフォルト伝播ルートテーブルID」でshare用ルートテーブルIDを選択

スクリーンショット 2025-08-19 17.43.03

これだけで、以降に作成されるアタッチメントは、関連付けがVPC用、伝播はshare用に自動で振り分けられます。
スポーク同士は互いの経路を直接は学習しません。

関連付け先のルートテーブルにスポーク間のルートを書かなければ、スポーク同士の横断通信は生まれません。
伝播先をshareに固定しておくことで、中央で収集した経路を必要最小限で再配布できます。

動作確認

1. スポークVPCを2つ用意してTGWにアタッチ

※スポークVPCのルートテーブルにはTGW向けのルートを追加しておくこと

share-vpc、a-vpc、b-vpcを用意
スクリーンショット 2025-08-19 17.50.54

a-vpc用のアタッチメントを作成
スクリーンショット 2025-08-19 17.55.37
b-vpc用のアタッチメントを作成
スクリーンショット 2025-08-19 17.55.55

2. それぞれのアタッチメントがVPC用ルートテーブルへ関連付いていることを確認

VPC用ルートテーブルの関連付けにa-vpcとb-vpcのアタッチメントが設定されていることを確認
スクリーンショット 2025-08-19 18.05.49

3. 経路伝播がshare用ルートテーブルだけに載っていることを確認

share用ルートテーブルの伝播にa-vpcとb-vpcのアタッチメントが設定されていることを確認
スクリーンショット 2025-08-19 18.05.39

share用ルートテーブルのルートにそれぞれのVPCへのルートが伝播されていることを確認
スクリーンショット 2025-08-19 18.06.09

4. スポークAからスポークBへの疎通は通らず、A/Bから共有サービスVPCには到達できることを確認(Reachability Analyzerを利用)

  • 事前に各VPCにEC2を作成しておく
  • Share VPC上のEC2のSGはTCP接続を許可するように設定する

詳細は省略しますが、A to Bが到達不可、A/B to shareは問題なく到達可能になっていることを確認
スクリーンショット 2025-08-19 18.30.47

A to Bの到達不可の理由を確認し、ルートがないという理由になっているので正常な動作をしていることを確認
スクリーンショット 2025-08-19 18.32.05

以上、このような形で作っておくと、新規追加のときも初期状態で安全側に倒れるので、思わぬany to any接続を避けられます。

さいごに

TGWは柔軟ですが、デフォルトの動作に任せるとスポーク間がつながり過ぎてしまうことがあります。
最初に「デフォルトの関連付け」と「デフォルトの伝播」を、VPC用とshare用のルートテーブルIDに分けて設定しておけば、意図しない相互接続を防げます。

一方で、新しくshare用のVPCを作りたい場合などは手動でRTの設定などが必要になる可能性が高いので運用の際には注意して下さい。

本記事がTGWのネットワーク設計を検討している方の参考になれば幸いです。

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.