6
1

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をアカウント間で跨いで疎通確認

Last updated at Posted at 2025-01-13

概要

仕事でTransit GatewayをPoC環境で構築する機会があって思ったより、やることがあったので記事にしてみました。また、構築して通信を分析できるサービスも教わったので使って、経路も確認しました。

Transit Gatewayとは

  • VPC間の接続をまとめることができるサービス
  • VPC間のハブの役割になるイメージ
  • 異なるリージョン間での通信はTransit Gatewayが2つ必要
  • 異なるアカウントでリージョンが同じならTransit Gatewayを共有が必要
    Amazon VPC Transit Gateway とは

メリット

  • 複数のVPCを1つのTransit Gatewayに接続して、ハブ&スポーク型のネットワークを簡単に構築可能
    ハブアンドスポーク.drawio.png
  • Transit Gatewayルートテーブルを使うので、ルート情報を一元管理できる

Reachability Analyzerとは

  • VPC内の通信を分析できるサービス
  • どこで、通信が遮られているかがわかる
  • 1回分析あたり、0.10$
    Reachability Analyzer

実演

実際に、アカウントAにTransit Gateway本体を作成して、それをアカウントBと共有して、同一リージョンで通信ができるかを確認する。
以下が構成図です。
Transitgateway.drawio.png

※Transit Gatewayの共有は省きます。

実際の流れ

  1. アカウントA、BでVPCの作成
  2. アカウントAでTransit Gatewayの作成
  3. アカウントBにTransit Gateway共有(RAMの共有は一部省きます)
  4. アカウントA、Bでアタッチメントの作成し、アカウントAで承諾
  5. アカウントAでTransit Gatewayルートテーブルを作成(Transit Gateway本体はアカウントAにある)
  6. アカウントA、BでVPCのパブリックサブネットのルートテーブル編集
  7. アカウントA、BでEC2インスタンスを作成
  8. Reachability Analyzerで疎通確認

やってみた

アカウントA、BでVPCの作成

アカウントA、BそれぞれにVPCを作成していきます。その際にVPCのCIDRブロックが被ってしまうと通信が混乱するためCIDRブロックを被らせないようにしましょう。

  1. アカウントAのVPC(CIDRを10.0.0.0/16に設定)
    AZに関しては検証用なのでシングルにする(アカウントBも同様)。
    アカウントAのVPC.png

  2. アカウントBのVPC(CIDRを172.0.0.0/16に設定)
    アカウントBのVPC.png

アカウントAでTransit Gatewayの作成

Transit Gateway本体を作成していきます。のちにアカウントBと共有します。

  1. アカウントAでTransit Gatewayを作成する。
    名前を「AccountA-tgw」にして作成をする。デフォルトルートテーブルに関しては別途作成していきたいので、チェックを外しました。
    アカウントAでTransit Gateway.png
    作成してしばらくすると状態が「Available」になります。これで、Transit Gateway本体の完成です。
    アカウントAでTransit Gateway完成.png

アカウントBにTransit Gateway共有(RAMの共有は一部省きます)

  1. 作成したTransit GatewayをアカウントBに共有するためアカウントAでResource Access Managerのコンソール画面へ移動し、「自分が共有」のリソースの共有でリソースの共有の作成をする
    RAMコンソール画面.png
  2. 共有するリソースタイプと共有するリソースを選択します共有するリソースタイプと共有するリソースを選択します.png
  3. アクセス許可の画面に移りますので、次に進みますアクセス許可の画面に移りますので、次に進みます.png
  4. プリンシパルオプションの画面に移ります。今回は組織内のアカウントに許可するので、「自分の組織内のみを許可」を選択します。プリンシパルタイプでは今回は一つのアカウントのみですので、「AWSアカウント」を選択して共有先のAWSアカウントIDを入力しますプリンシパルオプション.png
  5. 確認画面へ移るので、確認して「リソース共有を作成」をクリックします

アカウントA、Bでアタッチメントの作成し、アカウントAで承諾

  1. アカウントAでTransit Gatewayアタッチメントを作成します。VPCやサブネットを選択する場面がありますが、最初に作成したVPCを、サブネットはプライベートサブネットを選択してくださいアカウントAでTransit Gatewayアタッチメントを作成.png

  2. アカウントBでアカウントAのTransit Gatewayが共有されているかを確認する
    アカウントAでTransitGatewayアタッチメントを作成.png

  3. アカウントAのTransit Gatewayが共有されていることを確認出来たら、アカウントAと同様にTransit Gatewayアタッチメントを作成します

  4. アカウントAのTransit Gatewayアタッチメント画面でアカウントBで作成されたアタッチメントが表示されるのため、承諾するアカウントAのTransit Gatewayアタッチメント画面でアカウントBで作成されたアタッチメントが表示されるのため、承諾する.png
    ※このアタッチメントのNameタグが空白なので、記入したほうがわかりやすい

  5. アカウントBで状態が「Available」になっているのを確認する
    アカウントBアタッチメントの状態.png

アカウントAでTransit Gatewayルートテーブルを作成、ルートテーブルの編集

Transit Gatewayとアタッチメントを介してVPC間が通信できるようにルートテーブルを作成する。作成後に関連付けやルートの設定を行う。

  1. ルートテーブルの作成をする際に今回の作業で作成したTransit GatewayIDを選択するTransit Gatewayルートテーブルの作成.png
  2. 作成したルートテーブルを選択して「関連付け」で今回作成した、2つのアタッチメントを関連付ける(同時に2つのアタッチメントを関連付けることはできません。)関連付け.png
  3. 伝番を作成します。そうすることで、自動的にルートに通信の方向がアタッチメントに行くように登録されます(2と同様、同時に作成はできない)伝番.png
  4. 伝番の作成で各アタッチメントを登録したのち「ルート」に経路が登録されていることを確認伝番からのルート.png
    上の画像を見る限り、登録されていますね!

アカウントA、BでVPCのパブリックサブネットのルートテーブル編集

VPCを作成した際に一緒に作成された、パブリックサブネットのルートテーブルを編集して通信がTransit Gatewayに向くようにします。
以下のように各アカウントにルート情報を追加します。

  • アカウントA
送信先 ターゲット
172.0.0.0/16 Transit GatewayID
  • アカウントB
送信先 ターゲット
172.0.0.0/16 Transit GatewayID

アカウントA、BでEC2インスタンスを作成

疎通確認の対象として、各アカウントにEC2インスタンスを立てます。インスタンスの作成の手順は省きますが、セキュリティーグループのインバウンドルールを以下のように設定してください。

  • アカウントA
タイプ ソース
すべてのTCP 172.0.0.0/16
  • アカウントB
送信先 ターゲット
すべてのTCP 10.0.0.0/16

Reachability Analyzerで疎通確認

疎通確認を行います。SSMのSessionManagerを使ってPingを使って疎通確認はできますが、Reachability Analyzerを使うことで通らなかった際に、どこで通信が遮られているかがわかるのでそちらを使っていきます。

  1. VPCのコンソール画面から「Network Manager」に移ります。ネットワークマネージャー.png
    VPCのコンソール画面を下にスクロールすると見えてきます。迷いますね...
  2. Reachability Analyzerを使う前に「設定」で「信頼されたアクセス」を有効にしていない場合、有効にしてください
    ※既に有効の場合は飛ばします。
    Reachability設定.png
    有効の確認有効の確認.png
  3. Reachability Analyzerを選択して「パスの作成と分析」をしていきます。まずはアカウントBからアカウントAに通信ができるかを確認します
    アカウントBからアカウントAに通信ができるかを確認.png
  4. 分析結果の確認をしていきます
    エラーを吐いた分析結果.png
    到達できませんでしたね…
    しかし、原因を教えてくれます!
    エラーを吐いた分析結果の原因.png
    セキュリティーグループに原因があるみたいですので、見てみます。
    アカウントAのセキュリティーグループが原因.png
    インバウンドルールのソースが「10.0.0.0/16」になっていますね。「172.0.0.0/16」に直して再度分析します。
  5. 再分析をする
    再分析.png
    無事にできていますね。
    経路も見てみましょう!
    to-AccountA.png
    Transit Gatewayを通って通信がされていることが確認できました!
    アカウントAからアカウントBに対しても確認してみてください(ここでは割愛します。)

感じたこと

  • Transit Gatewayは資格試験でよく見かけたことがあるが、こうして実際に構築すると各コンポーネントの理解が足りないと感じた
  • Reachability Analyzerは一方通この通信のみの分析なので往復分として2回やる必要がありそう

参考文献

以下を参考にして学習しました。
ありがとうございます。
AWS Resource Access Managerを使用して、複数アカウントでAWS Transit Gatewayを共有して通信する方法
AWS Transit Gatewayを使用してEC2同士のクロスアカウント通信を行う
Transit Gatewayを設定して、同一リージョン内の複数VPC間でEC2インスタンス同士の通信を行ってみた
VPC Reachability Analyzerを使ってみてわかった便利さと意外なハマりどころ

6
1
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
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?