Transit Gatewayのルートテーブル分離で特定VPC間だけ通信を許可してみる

Transit Gatewayのルートテーブル分離で特定VPC間だけ通信を許可してみる

2026.03.23

はじめに

かつまたです。
Transit Gatewayを使って複数VPCを接続し、特定のVPC間だけ通信を許可する構成を試してみたので手順をご紹介します。

以下のような接続可否となるように構築しています。

  • VPC-A ↔ VPC-B:通信可能
  • VPC-B ↔ VPC-C:通信可能
  • VPC-A ↔ VPC-C:通信不可

上記をTransit Gatewayのルートテーブル分離で実現し、動作確認まで行います。

Transit Gatewayでの選択的ルーティングについて

Transit Gatewayの選択的ルーティングは、関連付けと 伝播の2つの概念で制御されています。

関連付け

アタッチメントがどのルートテーブルを参照するかを決めます。各アタッチメントは1つのルートテーブルにのみ関連付けできます。

VPC-AからのトラフィックはVPC-A用ルートテーブルを参照し、VPC-A用ルートテーブルに存在するルートの宛先にのみ到達できます。

ルート伝播

アタッチメントのCIDRをどのルートテーブルに伝播させるかを決めます。1つのアタッチメントを複数のルートテーブルに伝播できます。

VPC-BのCIDR(10.2.0.0/16)をVPC-A用ルートテーブルとVPC-C用ルートテーブルの両方に伝播させることで、AとCの両方からBへの通信が可能になります。一方、VPC-AのCIDRをVPC-C用ルートテーブルに伝播させないことで、CからAへの通信を遮断しています。

やってみた

前提条件

本記事では、以下が構築済みであることを前提としています。

TGWルートテーブル分離.drawio.png

リソース 詳細
VPC × 3 VPC-A (10.1.0.0/16)、VPC-B (10.2.0.0/16)、VPC-C (10.3.0.0/16)
サブネット × 3 各VPCに1つ (ap-northeast-1a)、10.x.1.0/24
セキュリティグループ × 3 ICMP (10.0.0.0/8) と HTTPS (443) を許可
VPCエンドポイント × 9 ssm, ssmmessages, ec2messages を各VPCに作成
インスタンスプロファイル AmazonSSMManagedInstanceCore ポリシーをアタッチ
EC2 × 3 Amazon Linux 2023、各VPCに1台

EC2インスタンスにはSSM Session Managerで接続します。キーペアやパブリックIPは不要です。

1.Transit Gateway の作成

VPCコンソールの左メニューから「Transit Gateway」→「Transit Gatewayを作成」を選択します。

以下の設定で作成します。

項目 設定値
Amazon側ASN 64512(デフォルト)
DNS サポート 有効
VPN ECMPサポート 有効
デフォルトルートテーブルの関連付け 無効
デフォルトルートテーブルの伝播 無効
共有アタッチメントの自動承認 無効

スクリーンショット 2026-03-15 15.58.46.png

デフォルトルートテーブルの伝播は有効のままだと、すべてのVPCアタッチメントがデフォルトルートテーブルに自動的に関連付け・伝播され、全VPC間で通信可能になってしまうため、無効にしています。

2.VPC アタッチメントの作成

Transit Gateway が available になったら、各VPCをアタッチメントとして接続します。

左メニューの「Transit Gateway アタッチメント」→「Transit Gatewayアタッチメントを作成」から、VCP3つに対してVPCアタッチメントをそれぞれ作成します。

スクリーンショット 2026-03-15 16.00.43.png

3.Transit Gateway ルートテーブルの作成

左メニューの「Transit Gateway ルートテーブル」→「Transit Gateway ルートテーブルを作成」から、3つのカスタムルートテーブルを作成します。

スクリーンショット 2026-03-15 16.06.06.png

4.ルートテーブルの関連付け(Association)

各ルートテーブルに対応するVPCアタッチメントを関連付けます。

ルートテーブルを選択 →「関連付け」タブ →「関連付けを作成」で設定します。

スクリーンショット 2026-03-15 16.07.19.png

作成するルートテーブル(名前は例) 2で作成した関連付けるアタッチメント(名前は例)
TGW-RT-A TGW-Attach-VPC-A
TGW-RT-B TGW-Attach-VPC-B
TGW-RT-C TGW-Attach-VPC-C

スクリーンショット 2026-03-15 16.06.38.png

関連付けにより、そのアタッチメントから入ってくるトラフィックは、関連付けられたルートテーブルを参照してルーティングされます。

5.ルート伝播の設定

各ルートテーブルを選択 →「伝播」タブ →「伝播を作成」で、以下のように設定します。

スクリーンショット 2026-03-15 18.03.44.png

TGW-RT-A(VPC-A用)

  • TGW-Attach-VPC-B → 伝播を作成する
  • TGW-Attach-VPC-C → 伝播を作成しない

TGW-RT-B(VPC-B用)

  • TGW-Attach-VPC-A → 伝播を作成する
  • TGW-Attach-VPC-C → 伝播を作成する

TGW-RT-C(VPC-C用)

  • TGW-Attach-VPC-B → 伝播を作成する
  • TGW-Attach-VPC-A → 伝播を作成しない

この設定により、各ルートテーブルに以下のルートが自動的に追加されます。

ルートテーブル 伝播されたルート 意味
TGW-RT-A 10.2.0.0/16 のみ A からは B にだけ到達可能
TGW-RT-B 10.1.0.0/16, 10.3.0.0/16 B からは A と C の両方に到達可能
TGW-RT-C 10.2.0.0/16 のみ C からは B にだけ到達可能

6.VPC ルートテーブルの設定

最後に、各VPCのサブネットルートテーブルに、他VPC宛トラフィックをTransit Gatewayへ向けるルートを追加します。

VPCコンソールの左メニュー「ルートテーブル」から対象VPCのルートテーブルを選択し、「ルート」タブ →「静的ルートを作成」で設定します。

スクリーンショット 2026-03-15 18.49.43.png

  • VPC-A のルートテーブル
送信先 ターゲット
10.1.0.0/16 local(既存)
10.2.0.0/16 Transit Gateway名

スクリーンショット 2026-03-15 18.53.12.png

  • VPC-B のルートテーブル
送信先 ターゲット
10.2.0.0/16 local(既存)
10.1.0.0/16 Transit Gateway名
10.3.0.0/16 Transit Gateway名

スクリーンショット 2026-03-15 18.55.48.png

  • VPC-C のルートテーブル
送信先 ターゲット
10.3.0.0/16 local(既存)
10.2.0.0/16 Transit Gateway名

スクリーンショット 2026-03-15 18.56.39.png

7.接続テスト

EC2コンソールからSession Managerで各インスタンスに接続し、pingで通信確認を行います。
確認コマンドと出力例を記載します。

  1. Instance-A から
# A → B: 成功するはず
ping -c 4 10.2.1.10

PING 10.2.1.10 (10.2.1.10) 56(84) bytes of data.
64 bytes from 10.2.1.10: icmp_seq=1 ttl=126 time=1.58 ms
64 bytes from 10.2.1.10: icmp_seq=2 ttl=126 time=0.308 ms
64 bytes from 10.2.1.10: icmp_seq=3 ttl=126 time=0.438 ms
3 packets transmitted, 3 received, 0% packet loss

# A → C: タイムアウトするはず
ping -c 4 -W 3 10.3.1.10

PING 10.3.1.10 (10.3.1.10) 56(84) bytes of data.
4 packets transmitted, 0 received, 100% packet loss, time 3103ms
  1. Instance-B から
# B → A: 成功するはず
ping -c 4 10.1.1.10

PING 10.1.1.10 (10.1.1.10) 56(84) bytes of data.
64 bytes from 10.1.1.10: icmp_seq=1 ttl=126 time=0.476 ms
64 bytes from 10.1.1.10: icmp_seq=2 ttl=126 time=0.363 ms
4 packets transmitted, 4 received, 0% packet loss


# B → C: 成功するはず
ping -c 4 10.3.1.10

PING 10.3.1.10 (10.3.1.10) 56(84) bytes of data.
64 bytes from 10.3.1.10: icmp_seq=1 ttl=126 time=1.26 ms
64 bytes from 10.3.1.10: icmp_seq=2 ttl=126 time=0.417 ms
4 packets transmitted, 4 received, 0% packet loss
  1. Instance-C から
# C → B: 成功するはず
ping -c 4 10.2.1.10

PING 10.2.1.10 (10.2.1.10) 56(84) bytes of data.
64 bytes from 10.2.1.10: icmp_seq=1 ttl=126 time=0.613 ms
64 bytes from 10.2.1.10: icmp_seq=2 ttl=126 time=0.340 ms
4 packets transmitted, 4 received, 0% packet loss

# C → A: タイムアウトするはず
ping -c 4 -W 3 10.1.1.10

PING 10.1.1.10 (10.1.1.10) 56(84) bytes of data.
4 packets transmitted, 0 received, 100% packet loss, time 3117ms

すべて期待通りの結果になりました。

おわりに

ご覧いただきありがとうございました。
Transit Gatewayのルートテーブル分離を使うことで、NACLやセキュリティグループに頼らず、VPC間の通信を選択的に制御できることが確認できました。

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

FacebookHatena blogX

関連記事