Transit Gatewayのデフォルト関連付けと伝播を分けてany to anyを防ぐ設計
こんにちは。
ゲームソリューション部/業務効率化ソリューション部の西川です。
今回は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台以上あること
- TGWルートテーブルが2つあること
- 例として
tgw-rtb-vpc
をVPC用、tgw-rtb-share
をshare用として扱います
- 例として
- share VPC用のアタッチメントが作成済みであること
- デフォルト関連付け、デフォルト伝播を設定後にこちらのアタッチメントを作成すると、不要なRTに設定が追加されてしまうため注意
tgw-rtb-vpc
の関連付けと伝播にshare VPC用のアタッチメントを追加してあることtgw-rtb-share
の伝播にshare VPC用のアタッチメントを追加してあること
実装
まずはコンソールでデフォルト設定を変えます。
- TGWの設定画面を開く
- 「デフォルト関連付けルートテーブルID」でVPC用ルートテーブルIDを選択
- 「デフォルト伝播ルートテーブルID」でshare用ルートテーブルIDを選択
これだけで、以降に作成されるアタッチメントは、関連付けがVPC用、伝播はshare用に自動で振り分けられます。
スポーク同士は互いの経路を直接は学習しません。
関連付け先のルートテーブルにスポーク間のルートを書かなければ、スポーク同士の横断通信は生まれません。
伝播先をshareに固定しておくことで、中央で収集した経路を必要最小限で再配布できます。
動作確認
1. スポークVPCを2つ用意してTGWにアタッチ
※スポークVPCのルートテーブルにはTGW向けのルートを追加しておくこと
share-vpc、a-vpc、b-vpcを用意
a-vpc用のアタッチメントを作成
b-vpc用のアタッチメントを作成
2. それぞれのアタッチメントがVPC用ルートテーブルへ関連付いていることを確認
VPC用ルートテーブルの関連付けにa-vpcとb-vpcのアタッチメントが設定されていることを確認
3. 経路伝播がshare用ルートテーブルだけに載っていることを確認
share用ルートテーブルの伝播にa-vpcとb-vpcのアタッチメントが設定されていることを確認
share用ルートテーブルのルートにそれぞれのVPCへのルートが伝播されていることを確認
4. スポークAからスポークBへの疎通は通らず、A/Bから共有サービスVPCには到達できることを確認(Reachability Analyzerを利用)
- 事前に各VPCにEC2を作成しておく
- Share VPC上のEC2のSGはTCP接続を許可するように設定する
詳細は省略しますが、A to Bが到達不可、A/B to shareは問題なく到達可能になっていることを確認
A to Bの到達不可の理由を確認し、ルートがないという理由になっているので正常な動作をしていることを確認
以上、このような形で作っておくと、新規追加のときも初期状態で安全側に倒れるので、思わぬany to any接続を避けられます。
さいごに
TGWは柔軟ですが、デフォルトの動作に任せるとスポーク間がつながり過ぎてしまうことがあります。
最初に「デフォルトの関連付け」と「デフォルトの伝播」を、VPC用とshare用のルートテーブルIDに分けて設定しておけば、意図しない相互接続を防げます。
一方で、新しくshare用のVPCを作りたい場合などは手動でRTの設定などが必要になる可能性が高いので運用の際には注意して下さい。
本記事がTGWのネットワーク設計を検討している方の参考になれば幸いです。