Transit Gatewayでアカウント跨ぎのVPC間通信をやってみた
Transit Gatewayを利用すると、複数VPCや、オンプレミスを単一のゲートウェイで接続することができます。以前、Transit Gatewayのやってみた系で以下エントリを書きました。
本エントリでは、アカウントを跨いだVPC間通信を実施してみたいと思います。
構成&前提
AアカウントをTransit Gatewayのオーナーアカウントにし、Aアカウントで作成したTransit GatewayをBアカウントに共有し、各VPC間で双方向の通信を実施してみたいと思います。以下のような構成です。
各アカウントにある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 ID
、Propagation 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)でした!