AWS Transit Gatewayの「交通整理術」:VPC同士のネットワークをスマートに管理しよう
こんにちは!クラウドの設計からトラブルシューティングまで、日々ネットワークのパケットと格闘しているSREです。
皆さんは、複数のVPC(Virtual Private Cloud)を使い始めたとき、「あれ、A社用のVPCとB社用のVPC、どうやって繋げばいいの?」「VPNも繋ぎたいけど、ネットワークが複雑になりすぎて管理しきれない!」と頭を抱えたことはありませんか?
今回は、そんな悩める皆さんの救世主、AWS Transit Gateway(TGW)について、身近な例えを交えながら、その「交通整理の極意」を紐解いていきましょう。
—
Transit Gatewayは「巨大なハブ空港」
まずは、Transit Gateway(以下TGW)の役割をイメージしてみましょう。
各VPCを「小さな離島」だと想像してください。離島同士を直接橋(VPCピアリング)で繋ぐと、数が増えるたびに橋だらけになり、管理が破綻しますよね。そこで登場するのが、空港です。TGWは、すべての離島(VPC)からの便を一手に引き受ける「ハブ空港」のような存在です。
これによって、以下のメリットが生まれます。
- 接続の集約: 全てのネットワークがTGWに繋がるため、複雑な網目状の接続を避けることができます。
- 管理の統一: どこからどこへ行けるかというルールを、空港の管制塔(TGWルートテーブル)で一括管理できます。
—
交通整理の肝:「アタッチメント」と「ルートテーブル」
TGWには、パケットを目的地まで正確に届けるための重要な概念が2つあります。
1. アタッチメント(空港のゲート)
各VPCやVPNがTGWに繋がるための「搭乗口」です。これがないと、そもそもネットワークに参加できません。
2. ルートテーブル(管制官の指示書)
「A島から来た荷物は、B島へ運べ」「VPNから来た荷物は、検査が必要だからC島へ送れ」といったルールが書かれた指示書です。
ここがポイント!
TGWは、このルートテーブルを複数持つことができます。これが「ルートテーブル分離」です。例えば、「本番環境グループ」と「開発環境グループ」でルートテーブルを分けることで、「お互いのネットワークを物理的に繋いでいても、通信はさせない」という強固なセキュリティ境界を作れるのです。
—
実践:Transit Gatewayのルーティング設計
では、実際にどのように設定していくのか、CLIコマンドを例に見ていきましょう(AWS CLIは魔法の杖のように便利ですよね)。
手順1: Transit Gatewayを作成する
まずは空港そのものを作ります。
# Transit Gatewayを作成
aws ec2 create-transit-gateway \
--description "社内用メインハブ" \
--options "AmazonSideAsn=64512" # 自律システム番号というIDのようなもの
手順2: 各VPCをアタッチする(ゲートを繋ぐ)
次に、各VPCをこの空港に接続します。
# VPCアタッチメントの作成
aws ec2 create-transit-gateway-vpc-attachment \
--transit-gateway-id tgw-1234567890abcdef0 \
--vpc-id vpc-abc12345 \
--subnet-ids subnet-12345678 # VPC内のサブネットを指定
手順3: ルートテーブルで隔離する(ここが重要!)
例えば、本番環境用のルートテーブルと開発環境用のルートテーブルを分けたい場合、このように設定します。
# 開発環境用ルートテーブルの作成
aws ec2 create-transit-gateway-route-table \
--transit-gateway-id tgw-1234567890abcdef0
# 特定のVPCアタッチメントを開発用ルートテーブルに関連付ける
aws ec2 associate-transit-gateway-route-table \
--transit-gateway-route-table-id tgw-rtb-dev \
--transit-gateway-attachment-id tgw-attach-dev-vpc
—
安全に運用するための「ベストプラクティス」
現場で数多のネットワークトラブルを見てきたSREとして、これだけは守ってほしいというポイントが3つあります。
1. 「最小権限」の原則: ルートテーブルには「すべての通信を通す」ような大雑把なルール(0.0.0.0/0)を書かず、必要な通信先だけを明記しましょう。
2. クロスアカウント共有: AWS Resource Access Manager(RAM)を使うと、複数のAWSアカウント間でもTGWを共有できます。本番・開発・検証とアカウントが分かれていても、TGWは1つに集約するのが管理コストを下げるコツです。
3. 名前付け(Tagging)を徹底する: 「どのVPCが、どの環境用のアタッチメントか」が分かるように、タグ付けは必須です。後から「これ誰が作ったんだろう?」と頭を抱えないための保険になります。
—
最後に:一歩ずつ理解していきましょう
最初は「VPC」「ルートテーブル」「アタッチメント」と聞き慣れない言葉に圧倒されるかもしれません。ですが、「ネットワークは郵便の仕組みと同じ」と捉えてみてください。
宛先(IPアドレス)があって、それを運ぶ配送ルート(ルートテーブル)があり、拠点(アタッチメント)がある。これだけです。
もし設定がうまくいかないときは、焦らずに「パケットは今どこで止まっているのか?」を VPC Flow Logs などで確認してみてください。一つずつ紐解いていけば、必ず理想のネットワーク環境に辿り着けますよ。
それでは、皆さんのクラウドインフラが今日も快適に動きますように!応援しています!
コメント