クロスアカウントなAWS Transit Gateway(TGW)
複数アカウントでTransit Gatewayを共有して接続する方法をご紹介します。
全体構成図
構築の流れ
今回は以下の手順でTransit Gatewayを作成しました。
アカウントA | アカウントB | |
---|---|---|
1 | TGWを作成 | ー |
2 | TGWアタッチメントを作成 | ー |
3 | RAMでTGWをアカウントBに共有 | ー |
4 | ー | TGWの共有を承認 |
5 | ー | TGWアタッチメントを作成 |
6 | TGWアタッチメントの承認 | ー |
7 | TGWルートテーブルの設定 | ー |
8 | VPCルートテーブルの設定 | VPCルートテーブルの設定 |
1. 【アカウントA】TGWを作成
1-1. [VPC]-[Transit Gateway]-[Transit Gateway を作成]から今回は以下パラメータを入力しTGWを作成
・名前タグ:test-tgw
・説明:空欄
・Amazon 側の自律システム番号 (ASN):64512
・DNS サポート:チェック
・セキュリティグループ参照サポート:チェックを入れない
・VPN ECMP サポート:チェック
・デフォルトルートテーブルの関連付け:チェックを入れない
・デフォルトルートテーブル伝播:チェックを入れない
・マルチキャストサポート:チェックを入れない
・共有アタッチメントを自動承諾:チェックを入れない
・CIDR - オプション:空欄
・タグ - オプション:
キー:Name 値 - オプション:test-tgw
※パラメータの詳細はTransit Gateway で AWS Transit Gateway を作成するを参照
2. 【アカウントA】TGWアタッチメントを作成
2-1. [VPC]-[Transit Gateway アタッチメント]-[Transit Gateway アタッチメントを作成]から今回は以下パラメータを入力しTGWアタッチメントを作成
・名前タグ - オプション:test-tgwatt-a
・Transit Gateway ID:<test-tgwのID>
・アタッチメントタイプ:VPC
・DNS サポート:チェック
・セキュリティグループ参照サポート:チェック
・IPv6 サポート:チェックを入れない
・アプライアンスモードサポート:チェックを入れない
・VPC ID:<vpc-aのID>
・サブネット ID:<pri-sub-aのID>
・タグ - オプション:
キー:Name 値 - オプション:test-tgwatt-a
※パラメータの詳細はAWS Transit Gateway で VPC アタッチメントを作成するを参照
3. 【アカウントA】RAMでTGWをアカウントBに共有
3-1. [Resource Access Manager]-[自分が共有: リソース共有]-[リソース共有を作成]から今回は以下パラメータを入力しTGWをアカウントBに共有
・Name:test-tgw-share
・Resource type:トランジットゲートウェイ
※test-tgwを選択
・タグ - オプション:
キー:Name 値 - オプション:test-tgw-share
・ec2:TransitGateway のマネージド型アクセス許可:AWSRAMDefaultPermissionTransitGateway
・プリンシパル - オプション:すべてのユーザーとの共有を許可
・プリンシパルタイプの選択:<アカウントBのID>
※パラメータの詳細はでのリソース共有の作成 AWS RAMを参照
4. 【アカウントB】TGWの共有を承認
4-1. [Resource Access Manager]-[自分と共有: リソース共有]よりアカウントAから共有されたリソースの共有(test-tgw-share)を承認
※参考:AWS Resource Access Manager コンソールを使用して AWS Transit Gateway リソース共有を受け入れる
5. 【アカウントB】TGWアタッチメントを作成
5-1. 手順2と同様に今回は以下パラメータを入力し作成
・名前タグ - オプション:test-tgwatt-b
・Transit Gateway ID:<test-tgwのID>
・アタッチメントタイプ:VPC
・DNS サポート:チェック
・セキュリティグループ参照サポート:チェック
・IPv6 サポート:チェックを入れない
・アプライアンスモードサポート:チェックを入れない
・VPC ID:<vpc-bのID>
・サブネット ID:<pri-sub-bのID>
・タグ - オプション:
キー:Name 値 - オプション:test-tgwatt-b
6. 【アカウントA】TGWアタッチメントの承認
6-1. [VPC]-[Transit Gateway アタッチメント]からアタッチメント(test-tgwatt-bのID)を選択し[Transit Gateway アタッチメントを承諾]からアタッチメント(test-tgwatt-b)を承認
※参考:AWS Transit Gateway で共有アタッチメントを受け入れる
7. 【アカウントA】TGWルートテーブルの設定
7-1. TGWルートテーブルの作成
[VPC]-[Transit Gateway ルートテーブル]-[Transit Gateway ルートテーブルを作成]から今回はそれぞれ以下パラメータを入力し2つのTGWルートテーブルを作成
■TGWルートテーブル①(test-tgwrtb-a_to_b)
・名前タグ - オプション:test-tgwrtb-a_to_b
・Transit Gateway ID:<test-tgwのID>
・タグ - オプション:
キー:Name 値 - オプション:test-tgwrtb-a_to_b
■TGWルートテーブル②(test-tgwrtb-b_to_a)
・名前タグ - オプション:test-tgwrtb-b_to_a
・Transit Gateway ID:<test-tgwのID>
・タグ - オプション:
キー:Name 値 - オプション:test-tgwrtb-b_to_a
※パラメータの詳細はTransit Gateway で Transit Gateway AWS ルートテーブルを作成するを参照
7-2. TGWルートテーブルの関連付け
[VPC]-[Transit Gateway ルートテーブル]から対象のTGWルートテーブルを選択し「関連づけ」タブ-[関連付けを作成]から対象のTGWアタッチメントを関連付け
※今回対象のTGWルートテーブルとTGWアタッチメントはそれぞれ以下
・test-tgwrtb-a_to_bにtest-tgwatt-aを関連付け
・test-tgwrtb-b_to_aにtest-tgwatt-bを関連付け
※参考:Transit Gateway で Transit Gateway AWS ルートテーブルを関連付ける
7-3. TGWルートテーブルのルーティング設定
[VPC]-[Transit Gateway ルートテーブル]から対象のTGWルートテーブルを選択し「ルート」タブ-[静的ルートを作成]からルーティングを設定
※今回対象のTGWルートテーブルとルーティング設定はそれぞれ以下
・TGWルートテーブル(test-tgwrtb-a_to_b)にルーティング設定
・CIDR:172.16.0.0/16 アタッチメントID:<test-tgwatt-bのID>
・TGWルートテーブル(test-tgwrtb-b_to_a)にルーティング設定
・CIDR:10.0.0.0/16 アタッチメントID:<test-tgwatt-aのID>
※パラメータの詳細はAWS Transit Gateway で静的ルートを作成するを参照
8. 【アカウントA,B】VPCルートテーブルの設定
8-1. ルートテーブルの設定
[VPC]-[ルートテーブル]から対象のルートテーブルを選択し「ルート」タブ-[ルートを編集]からルーティングを設定
※今回対象のルートテーブルとルーティング設定はそれぞれ以下
・【アカウントA】VPCルートテーブル(test-rtb-a)にルーティング設定
・送信先:172.16.0.0/16 ターゲット:test-tgw
・【アカウントB】VPCルートテーブル(test-rtb-b)にルーティング設定
・送信先:10.0.0.0/16 ターゲット:test-tgw
これにてTGWによるアカウント間VPC接続が完了いたしました。
まとめ
RAMでTGWを共有した場合、承諾作業などアカウント間での作業順序が複雑であるため、事前に手順の作成を整理することをお勧めいたします。