Transit Gatewayでアカウント跨ぎのVPC間通信をやってみた

Transit Gatewayを利用すると、複数VPCや、オンプレミスを単一のゲートウェイで接続することができます。 本エントリでは、アカウントを跨いだVPC間通信を実施してみたいと思います。
2019.10.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Transit Gatewayを利用すると、複数VPCや、オンプレミスを単一のゲートウェイで接続することができます。以前、Transit Gatewayのやってみた系で以下エントリを書きました。

本エントリでは、アカウントを跨いだVPC間通信を実施してみたいと思います。

構成&前提

AアカウントをTransit Gatewayのオーナーアカウントにし、Aアカウントで作成したTransit GatewayをBアカウントに共有し、各VPC間で双方向の通信を実施してみたいと思います。以下のような構成です。

00

各アカウントにあるVPC、EC2は作成済みであることを前提としています。

やってみた

Transit Gateway作成

AアカウントにてTransit Gatewayを作成します。[Name tag]は任意の名称で、アソシエーション、プロパゲーション等はデフォルトのまま[Create Transit Gateway]をクリックします。

Transit Gatewayが作成されました。

作成時にデフォルトルートテーブルへのアソシエーション、プロパゲーションを有効にしているので、ルートテーブルも作成されています。

現時点で、Transit GatewayにVPCをアタッチメントしていないので、アソシエーション、プロパゲーションはなく、ルートテーブルに経路情報はありません。

アタッチメント(A-VPC)

A-VPCをTransit Gatewayにアタッチメントします。Aアカウントにて[Create Transit Gateway Attachment]をクリックします。

さきほど作成したTransit Gatewayをアタッチメント先に指定します。アタッチメントするVPC、サブネットを指定し[Create attachment]をクリックします。

「State」が「available」になるとアタッチメントは完了です。

Transit Gateway作成時にアソシエーション、プロパゲーション等を有効にしていたので、アタッチメントが完了すると、アソシエーション、プロパゲーションが行われ、ルートテーブルに経路情報が追加されています。

Transit Gateway共有

アカウント間で通信を実施するため、Aアカウント(オーナーアカウント)から、BアカウントにTransit Gatewayを共有します。AアカウントのResource Access Managerコンソールに移動し[リソースの共有]をクリックします。

任意の名称を付け、リソースにはさきほど作成したTransit Gatewayを指定します。プリンシパルに共有先アカウント(ここではBアカウント)を指定し[リソースの共有の作成]をクリックします。

リソースの共有が開始されます。

BアカウントにてResource Access Managerコンソールを確認すると、共有されたリソース(Transit Gateway)が表示されます。

共有されたリソースを選択し、[リソースの共有を承認]をクリックします。

[OK]をクリックします。

共有されたリースへのアクセスが可能になると、Transit Gatewayを確認することができます。

なお、Association route table IDPropagation route table IDに表示されているIDをクリックしても、ルートテーブルを確認することはできません。

アタッチメント(B-VPC)

B-VPCをTransit Gatewayにアタッチメントします。[Create Transit Gateway Attachment]クリック。

共有されたTransit Gatewayをアタッチメント先に指定します。アタッチメントするVPC、サブネットを指定し[Create attachment]をクリックします。

「State」が「available」になるとアタッチメントは完了です。

なお、Aアカウントでもアタッチメントが追加されたことが確認できます。

Aアカウントにてルートテーブル確認すると、追加でアタッチメントしたVPC(B-VPC)の経路情報等が追加されています。

以上でTransit Gatewayのルートテーブルが完成しました。

サブネットのルートテーブルに経路追加

通信を行いたい各サブネットのルートテーブルに、Transit Gatewayへの経路を追加します。

Aアカウント A-Subnet

B-Subnetへの経路を追加します。送信先にB-SubnetのCIDR、ターゲットには作成したTransit Gatewayを指定します。

Bアカウント B-Subnet

A-Subnetへの経路を追加します。送信先にA-SubnetのCIDR、ターゲットには作成したTransit Gatewayを指定します。

SG

各セキュリティグループで通信を許可します。

アクセス確認

Transit Gatewayにアタッチメントしたリソース間で通信を確認してみます。

A-Server → B-Server

[ec2-user@ip-10-0-1-57 ~]$ ping -c 3 172.16.0.158
PING 172.16.0.158 (172.16.0.158) 56(84) bytes of data.
64 bytes from 172.16.0.158: icmp_seq=1 ttl=254 time=0.766 ms
64 bytes from 172.16.0.158: icmp_seq=2 ttl=254 time=0.494 ms
64 bytes from 172.16.0.158: icmp_seq=3 ttl=254 time=0.556 ms

--- 172.16.0.158 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2049ms
rtt min/avg/max/mdev = 0.494/0.605/0.766/0.118 ms

B-Server → A-Server

[ec2-user@ip-172-16-0-158 ~]$ ping -c 3 10.0.1.57
PING 10.0.1.57 (10.0.1.57) 56(84) bytes of data.
64 bytes from 10.0.1.57: icmp_seq=1 ttl=254 time=0.928 ms
64 bytes from 10.0.1.57: icmp_seq=2 ttl=254 time=0.575 ms
64 bytes from 10.0.1.57: icmp_seq=3 ttl=254 time=0.509 ms

--- 10.0.1.57 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2055ms
rtt min/avg/max/mdev = 0.509/0.670/0.928/0.186 ms

想定通りの通信が確認できました。

なお、共有先のBアカウントでは、Transit Gatewayは削除できませんので、お片付けする時は共有の解除から実施してください。

さいごに

Transit Gatewayを利用して、アカウントを跨ぎのVPC間通信手順を紹介しました。Transit Gatewayを利用するケースでは多くの場合、アカウントを跨いだ通信があるのではないでしょうか?

接続ポイントと料金を考慮し、Transit Gatewayの利用を検討してみてはいかがでしょうか。料金については、以下を参考にしてみてください。

以上、坂巻(@nochi251)でした!

参考