【AWS】Transit Gateway と AWS RAMを使用して異なるAWSアカウント間のVPC接続を実現する
どもです。三月に入り気持ち暖かくなってきて安心している今日この頃、春が恋しい僕です。
今回はTransit GatewayとAWS RAM(Resource Access Manager)を使用し、異なるAWSアカウントVPC間の接続を試してみましたので記事にしたいと思います。
検証アカウントの作成
前提として今回の検証には二つのAWSアカウントが必要になりますので、まずはそちらの用意をしましょう。すでに検証可能なアカウントを複数お持ちの方は読み飛ばしてください!
AWS Organizationsを使用し新しく検証用アカウントを作成しますが、その際にメールアドレスの登録が必要です。
以前のAWSアカウント作成時すでに登録されているメールアドレスは使用できないので、アドレスがない方は検証用に作成しておいてください。
Gmailであればエイリアスを使用し、現在使用されているアドレスを元に簡単に新しいメールアドレスを作成できます。詳しくは下記記事をご覧ください。
https://blastmail.jp/blog/mail/gmail-addaccounts
今回僕は検証用アカウント作成のために下記のようなメールアドレスを作成しました。
xxxxxxxxx.xxxx+sandbox@gmail.com
メールアドレスが取得できたら準備完了です。AWS Organizationsより検証用アカウントを作成しましょう。
![](https://graff-it-i.com/wp-content/uploads/2022/03/organizations-1024x273.png)
必要情報を入力し、アカウント作成が完了したらアカウントIDをメモしましょう。
それでは新しく作成したアカウントに移動してみましょう。コンソール画面右上の
アカウント名 @ アカウントID
の文字列をクリックするとサインアウトの隣に"ロールの切り替え"がありますのでクリックしてください。(スイッチロールという手法を用いアカウントをスイッチしています。ここでは詳しくは割愛させていただきます。)
アカウントには先ほどメモしたアカウントIDを、ロールにはデフォルトで設定される"OrganizationAccountAccessRole"を、表示名は任意のものを設定してください。
無事アカウントのスイッチができれば準備OKです。
移行本記事では、既存のアカウントを “アカウントA"、新規アカウントを"アカウントB"とします。
検証用リソースの作成
次に、疎通確認を行うためのリソースを各アカウントに作成していきます。
必要なリソースは以下の通り、各AWSアカウントに作成します。詳しい作成手順はここでは省略します。
・VPC(ネットワーク帯が重複しないように設定してください)
・サブネット
・ルートテーブル
・EC2(作成したサブネットに配置)
・セキュリティグループ(SSHと相手アカウントのサブネットCIDRブロックからのICMPを許可)
ここまで作成できましたら、アカウントAに移動してください。
いよいよTransit Gatewayの作成に突入しましょう!
Transit Gatewayの作成
一口にTransit Gateway作成といいつつも、様々な関連リソースが存在し、作成・設定していく必要があります。
まずはTransit Gateway本体を作成しましょう。
![](https://graff-it-i.com/wp-content/uploads/2022/03/cf33a857480f274c2023ba9f271a4547-1-1024x191.png)
設定項目はそれほど多くはなく、名前の設定と下記以外はデフォルトで問題ありません。
・ASN ボーダーゲートウェイプロトコル (BGP) セッションの AWS 側の自律システム番号 (ASN)です。64512を指定しておきましょう。
・クロスアカウント共有オプションの設定はチェックを入れておいてください。
しばらくすると作成が完了すると思います。
次にアタッチメント(接続)を作成していきます。作成したTransit Gatewayに接続対象となるVPCをアタッチすることができます。
![](https://graff-it-i.com/wp-content/uploads/2022/03/0db426fd2543d475d8435111cd4d2734-1024x220.png)
先ほど作成したTransit Gatewayと接続対象となるVPCを選択しましょう。
アタッチメントが作成されれば、Transit Gateway ルートテーブルのアソシエーションとプロパゲートにも項目が追加されていることがわかります。
ここまでがTransit Gatewayを設定する一通りの流れです。もう片方のアカウントでも同じような工程を行う必要があるのでしっかり押さえておきましょう。
Transit Gatewayを共有
では、アカウントAで作成したTransit GatewayをアカウントBでも使用できるようにリソースの共有設定をしましょう。
ここで登場するのがAWS RAM(Resource Access Manager)です。
![](https://graff-it-i.com/wp-content/uploads/2022/03/5b3ca178d50112e736f42b956ae5e2f8-1-1024x399.png)
まず左下設定からAWS Organizationとの共有を許可しておいてください。
次にリソースの共有を作成していきます。リソースタイプはTransit Gatewayで作成したものを許可しましょう。
“自分の組織内でのみ共有を許可します"を選択し、先ほど作成したアカウントのIDを入力しましょう。追加ボタン入力も忘れずに。
必要事項を入力したらリソース共有を作成してください。作成が完了したBアカウントにスイッチしてみてください。
“自分と共有"の"リソースの共有"に先ほどTGWが追加されています!リソース名をクリックし、共有を承認してください!
これでアカウントBの方でも同じようにTransit Gatewayの操作ができるようになっているはずなので、先ほどと同じようにアカウントB側のVPCを対象としたアタッチメントを作成してください!
これでアカウントB側のルートテーブルのアソシエーションやプロパゲートにも項目が現れましたね!
Transit Gatewayの準備はこれで終わりです。最後にゲートウェイ型リソースを使用するなら必ず必要なサブネットのルートテーブルの設定を行いましょう。あと少しです!
サブネットのルートテーブルを修正
さて、残るは各サブネットからTransit Gatewayまでのルーティング設定です。
とは言ってもやることは至ってシンプル、それぞれのサブネットのルートテーブルに
・送信先 → 送信先サブネットのCIDRブロック
・ターゲット → 作成したTransit Gateway
のルートを追記するだけです。これで全ての通信がつながりました!
実際に作成したEC2にSSH接続し、もう片方のEC2プライベートIP宛にPingを飛ばしてみましょう。設定がうまくできていればパケット送信が成功するでしょう!
さいごに
お疲れ様でした!今回は非常にボリューミーな記事でしたね!
今回作成した以下のリソースは必要に応じて削除しておいてください。
・EC2インスタンス
・VPC、サブネット、ルートテーブル、セキュリティグループ
・AWS RAM リソースの共有
・Transit Gatewayのアタッチメントと本体
めっちゃ疲れたので今日はこの辺にしたいと思います…
最後まで読んでいただきありがとうございました!