10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Transit Gateway ルートテーブルを分離して VPC 間の通信を制御する

Posted at

Transit Gateway に複数の VPC を接続するとき、VPC 間で自由に通信させたくない場合があります。

例えば、Transit Gateway にそれぞれアタッチメントで接続している共有リソース VPC とアカウント A の VPC、アカウント B の VPC があり、共有リソース VPC と他の VPC は相互に通信させたいが、アカウント A の VPC とアカウント B の VPC の間は通信させたくない、といったケースです。

この時、一つの Transit Gateway ルートテーブルに全てのアタッチメントを関連付けてしまうと、VPC ルートテーブルの設定次第では全ての VPC 間で通信ができてしまいます。

そこで、Transit Gateway アタッチメントごとに Transit Gateway ルートテーブルを分離し、適切に設定することで、通信させたくない VPC 同士が誤って通信することを防ぐようにします。

Transit Gateway ルートテーブル分離の概要図

アカウント A に二つの VPC(共有リソース VPC、アカウント A VPC)があり、アカウント B にも VPC(アカウント B VPC)があり、それぞれの VPC のサブネットから Transit Gateway にアタッチメントで接続します。

また、共有リソース VPC にある VPN Instance 経由でオンプレミスとも接続されています。

オンプレミスと共有リソース VPC からはアカウント A VPC とアカウント B VPC の両方へ通信ができるが、アカウント A VPC とアカウント B VPC の間は通信できないようにします。

共有リソース VPC に接続されたアタッチメントを関連付けた Transit Gateway ルートテーブルには共有リソース VPC、アカウント A VPC、アカウント B VPC、オンプレミスへのルートを設定します。

一方、アカウント A VPC とアカウント B VPC の Transit Gateway ルートテーブルにはそれぞれ共有リソース VPC とオンプレミスへのルートのみを設定しています。

TGW.drawio.png

図では省略していますが、各 VPC ルートテーブルにも通信させたいルートを追加する必要があります。それでは実際に検証していきます。

Transit Gateway の設定

Transit Gateway の作成

アカウント A で、デフォルトルートテーブルの関連付けと伝搬は、アタッチメント作成時に自分で設定したいので、これらのチェックをオフにして Transit Gateway を作成します。

スクリーンショット 2025-07-12 8.02.38.png

Transit Gateway アタッチメントの作成

接続先の VPC とサブネットを選んで Transit Gateway アタッチメントを作成します(本当は AZ ごとに Transit Gateway 用サブネットを作成してアタッチメントを接続するのがベストですが、検証のためテスト用のサブネットのみに直接アタッチメントを接続しています)。

スクリーンショット 2025-07-12 9.24.27.png

Transit Gateway ルートテーブルを作成

アタッチメントの数だけ Transit Gateway ルートテーブルを作成します。関連付けや伝搬、静的ルートの追加は後で行います。

スクリーンショット 2025-07-12 14.36.19.png

Transit Gateway を別アカウントへ共有する

Resource Access Manager で相手アカウントへ Transit Gateway をリソース共有

Resource Access Manager でアカウント A の Transit Gateway をアカウント B へ共有します。

スクリーンショット 2025-07-12 14.04.00.png

Transit Gateway 用のマネージド型アクセス許可があるのでそのまま使用します。

スクリーンショット 2025-07-12 14.15.21.png

共有したいアカウント B の AWS アカウント ID を設定します。

スクリーンショット 2025-07-12 14.16.32.png

Resouce Access Manager でリソース共有の承認

アカウント B の Resource Access Manager でアカウント A からの Transit Gateway のリソース共有を承認します。

スクリーンショット 2025-07-12 14.18.20.png

スクリーンショット 2025-07-12 14.19.12.png

共有された Transit Gateway へアタッチメントを作成

アカウント B からアカウント A の Transit Gateway にアタッチメントが作成できるようになったので作成します。アカウント A に承諾されるまでアタッチメントは有効になりません。

スクリーンショット 2025-07-12 14.22.09.png

作成された別アカウントからの Transit Gateway アタッチメントの承認

アカウント B が作成した Transit Gateway アタッチメントを承諾します。

スクリーンショット 2025-07-12 14.23.32.png

VPC 間で通信させないための Transit Gateway ルートテーブルの設定

各 VPC とオンプレミスのサブネットの状況

各 VPC とオンプレミスのサブネットと、接続する Transit Gateway アタッチメント、アタッチメントが関連付けられるルートテーブルの状況は次のとおりとします(分かりやすくするためサブネットごとではなく VPC 全体の CIDR ブロックにルートを設定することにします)。

場所 サブネット TGW アタッチメント 参照する TGW ルートテーブル
オンプレミス 10.1.0.0/16 Attachment 1 Route Table 1
共有リソース VPC 10.128.0.0/16 Attachment 1 Route Table 1
アカウント B VPC 10.129.0.0/16 Attachment 2 Route Table 2
アカウント A VPC 10.130.0.0/16 Attachment 3 Route Table 3

共有リソース VPC へ接続するアタッチメントに関連付ける Transit Gateway ルートテーブル

アタッチメントの Transit Gateway ルートテーブルへの関連付け(共有リソース VPC)

共有リソース VPC へ接続するアタッチメント(Attachment 1)を、Transit Gateway ルートテーブル(Route Table 1)に関連付けます。

スクリーンショット 2025-07-13 7.54.13.png

アタッチメントから Transit Gateway ルートテーブルへの伝搬(共有リソース VPC)

アタッチメントが直接接続しているルートを Transit Gateway ルートテーブルへ伝搬させるようにします。

スクリーンショット 2025-07-13 8.14.07.png

Transit Gateway ルートテーブルへ静的ルートを追加(共有リソース VPC)

共有リソース VPC には全ての VPC とオンプレミスと通信したいため、共有リソース VPC が参照する Transit Gateway ルートテーブルには全てのサブネットへの静的ルートを設定します。

宛先サブネット 向かう TGW アタッチメント ルートタイプ 備考
10.128.0.0/16 Attachment 1 伝搬 共有リソース VPC
10.1.0.0/16 Attachment 1 静的 オンプレミス
10.129.0.0/16 Attachment2 静的 アカウント B VPC
10.130.0.0/16 Attachment3 静的 アカウント A VPC

スクリーンショット 2025-07-12 14.42.10.png

VPC ルートテーブルへ Transit Gateway への静的ルートを追加(共有リソース VPC)

Transit Gateway ルートテーブルへルートを追加しただけでは、肝心の VPC から宛先サブネットへのネクストホップが分からない状態のため、Transit Gateway を介して通信させたいサブネットへのネクストホップは Transit Gateway であるという静的ルートを共有リソース VPC ルートテーブルに追加します。

宛先サブネット ネクストホップ 備考
10.128.0.0/16 local 共有リソース VPC
10.1.0.0/16 VPN インスタンスの ENI オンプレミス
10.129.0.0/16 TGW アカウント B VPC
10.130.0.0/16 TGW アカウント A VPC

スクリーンショット 2025-07-12 14.54.46.png

アカウント B VPC へ接続するアタッチメントに関連付ける Transit Gateway ルートテーブル

アタッチメントの Transit Gateway ルートテーブルへの関連付け・伝搬(アカウント B VPC)

同様にアカウント B VPC へ接続するアタッチメント(Attachment 2)を、Transit Gateway ルートテーブル(Route Table 2)に関連付け、伝搬の設定をします。

Transit Gateway ルートテーブルへ静的ルートを追加(アカウント B VPC)

アカウント B VPC は共有リソース VPC とオンプレミスとのみ通信したいため、アカウント B VPC が参照する Transit Gateway ルートテーブルにはこれらのサブネットへのみの静的ルートを設定します。

通信させたくないアカウント A VPC へのルートを追加しないことで、アカウント A VPC への通信をできないようになるわけです。

宛先サブネット 向かう TGW アタッチメント ルートタイプ 備考
10.129.0.0/16 Attachment2 伝搬 アカウント B VPC
10.128.0.0/16 Attachment 1 静的 共有リソース VPC
10.1.0.0/16 Attachment 1 静的 オンプレミス

VPC ルートテーブルへ Transit Gateway への静的ルートを追加(アカウント B VPC)

アカウント B VPC の VPC ルートテーブルにも Transit Gateway への静的ルートを設定します。

なお、ここでもし誤って(または悪意を持って)アカウント A VPC への静的ルートを追加したとしても、上記 Transit Gateway ルートテーブルにルートがないため、通信はできないようになります。

宛先サブネット ネクストホップ 備考
10.129.0.0/16 local アカウント B VPC
10.128.0.0/16 TGW 共有リソース VPC
10.1.0.0/16 TGW オンプレミス

アカウント A VPC へ接続するアタッチメントに関連付ける Transit Gateway ルートテーブル

アカウント B VPC への設定と同じです。適切に Transit Gateway ルートテーブルを設定することで、アカウント B VPC への通信をできないようになります。

Transit Gateway ルートテーブルは適切に分離しよう

以上のとおり、Transit Gateway に接続する複数の VPC 間の通信を制御したい場合は、アタッチメントごとにルートテーブルを分けるようにしましょう。最初は全ての VPC 間の通信ができて良くても、後で制御したくなる場合はあると思うので、最初からこのように設計すると良いと思います。

識者にとっては「何を当たり前のことを……」と思われるかもしれませんが、自分はどこの設定が通信の制御に関わっているかうまく説明できなかったので、今回検証してみることで理解でき、勉強になりました。

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?