AWS Resource Access Managerを使用して、複数アカウントでAWS Transit Gatewayを共有して通信する方法

記事タイトルとURLをコピーする

クラウドインテグレーション部 技術2課の山下です。 今回は、AWS Resource Access Manager(以下AWS RAM)を使用して、 複数アカウントでAWS Transit Gateway(以下TGW)を共有して通信する方法をご紹介します。

複数のアカウントで作業が必要になり少々ややこしいため、出来るだけ分かりやすくお伝えできればと思います。

今回の前提

  • アカウントAのTGWをアカウントBに共有する
  • アカウントAのTGWおよびTGWアタッチメントは作成済みとする
  • TGWルートテーブルの関連付け、TGWルートテーブルの伝播は手動で行う
  • 共有アタッチメントの自動承諾はしない

構成は下図の通りです。

f:id:swx-yuki-yamashita:20211229164343p:plain

なお、TGWのルーティング仕様については以下の記事を参照ください。

Transit Gatewayのルーティング仕様を分かりやすく解説してみる



作業概要

今回の作業概要は下図の通りです。

f:id:swx-yuki-yamashita:20211229164509p:plain

①(アカウントA)RAMでTGWをアカウントBに共有

①-1. RAMの画面から「リソースの共有」→「リソースの共有の作成」を選択します。

f:id:swx-yuki-yamashita:20211229164641p:plain

①-2. 任意の名前を設定し、リソースタイプに「トランジットゲートウェイ」を選択して、共有したいTGWを選択します。「Next」ボタンで次の画面へ。

f:id:swx-yuki-yamashita:20211229164659p:plain

①-3. TGWアタッチメントのアクションが許可されていることを確認し、「Next」ボタンで次の画面へ。

f:id:swx-yuki-yamashita:20211229164717p:plain

①-4. 「外部のプリンシパルとの共有を許可」を選択、プリンシパルのタイプに「AWSアカウント」を選択し、アカウントBのIDを追加します。

f:id:swx-yuki-yamashita:20211229165058p:plain

①-5. アカウントBのIDが追加されていることを確認し、「Next」ボタンを押します。

f:id:swx-yuki-yamashita:20211229165258p:plain

①-6. 最後に内容の確認をし、「リソース共有を作成」ボタンを押すと、リソースの共有が作成されます。

f:id:swx-yuki-yamashita:20211229173200p:plain

②(アカウントB)TGWの共有を承諾

②-1. リソース共有を受けると、アカウントBのRAMの画面で、「リソースの共有」に招待が届いているので選択します。

f:id:swx-yuki-yamashita:20211229165433p:plain

②-2. ステータスが「Pending」になっている共有リソースを選択します。

f:id:swx-yuki-yamashita:20211229165449p:plain

②-3. 「リソースの共有を承認」ボタンを押します。

f:id:swx-yuki-yamashita:20211229165557p:plain

②-4. 数分程度待つと、ステータスが「Active」になります。

f:id:swx-yuki-yamashita:20211229165613p:plain

③(アカウントB)TGWアタッチメントの作成

③-1. VPCの画面から「Transit Gateway 接続」を選択し、「Transit Gateway アタッチメントを作成」ボタンを押します。

f:id:swx-yuki-yamashita:20211229165632p:plain

③-2. 画面の指示に従って必要事項を入力し、「Transit Gateway アタッチメントを作成」ボタンを押します。

f:id:swx-yuki-yamashita:20211229165649p:plain

③-3. 作成したTransit Gatewayアタッチメントが、アカウントA、B両方で見えるようになります。状態は「Pending Acceptance」です。

f:id:swx-yuki-yamashita:20211229165723p:plain

④(アカウントA)TGWアタッチメントの承諾

④-1. アカウントBで作成したTGWアタッチメントは、アカウントAで承諾する必要があります。対象のアタッチメントを選択し、「アクション」→「Transit Gateway アタッチメントを承諾」を選択します。

f:id:swx-yuki-yamashita:20211229165825p:plain

④-2. しばらく待つと、状態が「Active」に変わります。

f:id:swx-yuki-yamashita:20211229165849p:plain

⑤(アカウントA)TGWルートテーブルの設定

RAMでTGWを共有している場合、TGWルートテーブルの設定は、TGWを作成したアカウントでしかできないため、アカウントAで作業します。

TGWルートテーブルの作成

⑤-1. アカウントAのVPC画面で「Transit Gateway ルートテーブル」を選択し、「Transit Gateway ルートテーブルを作成」ボタンを押します。

f:id:swx-yuki-yamashita:20211229170026p:plain

⑤-2. 任意の名前を入力、TGWを選択し、「Transit Gateway ルートテーブルを作成」ボタンを押します。

f:id:swx-yuki-yamashita:20211229170055p:plain

⑤-3. 作成後、状態がPendingからAvailableになるまで数分程度待ちます。

TGWルートテーブルの関連付け

⑤-4. 作成したTGWルートテーブルを選択し、「関連付け」→「関連付けを作成」を選択します。

f:id:swx-yuki-yamashita:20211229170127p:plain

⑤-5. アカウントBで作成したTGWアタッチメントを選択し、「関連付けを作成」ボタンを押します。

f:id:swx-yuki-yamashita:20211229170159p:plain

伝播を作成

⑤-6. アカウントB用のTGWルートテーブルに、アカウントA向けの経路を伝播します。対象のTGWルートテーブルを選択し、「伝播」→「伝達を作成」を選択します。

f:id:swx-yuki-yamashita:20211229170234p:plain

⑤-7. アカウントAのTGWアタッチメントを選択し、「伝達を作成」ボタンを押します。

f:id:swx-yuki-yamashita:20211229170259p:plain

⑤-8. アカウントA(10.0.0.0/16)向けの経路が追加されました。

f:id:swx-yuki-yamashita:20211229170319p:plain

⑤-9. 同様に、アカウントA用のTGWルートテーブルにも、アカウントB(172.16.0.0/16)向けの伝達を作成します。

f:id:swx-yuki-yamashita:20211229170334p:plain

⑥(アカウントA、B)VPCのルートテーブルの設定

仕上げに両方のアカウントで、VPCのルートテーブルを設定します。他のアカウント向けの経路をTGWに向けます。

⑥-1. 今回はEC2を設置したサブネットに関連付けたルートテーブルのみ設定します。(TGWアタッチメントを紐づけたサブネットは編集不要です)

f:id:swx-yuki-yamashita:20211229170419p:plain

f:id:swx-yuki-yamashita:20211229170431p:plain

⑦(アカウントA、B)疎通確認

⑦-1. 最後に両方のアカウントのEC2から、対向のEC2に向けてPingを打ってみます。セキュリティグループでICMPを許可するのを忘れないようにしましょう。

f:id:swx-yuki-yamashita:20211229170455p:plain

f:id:swx-yuki-yamashita:20211229170518p:plain

問題なくPingが通りました。

まとめ

RAMでTGWを共有した場合、承諾やTGWルートテーブルの設定のために、アカウントを行ったり来たりする必要があり混乱しやすいので、事前に手順の作成や動作検証を十分に実施されることをおすすめします。

この記事が少しでも参考になれば幸いです。