IBM Cloud: Transit Gatewayで複数アカウント間通信を試してみた

#1. はじめに

以下の発表記載のあるとおり、Transit Gatewayが複数アカウント間通信をサポートするようになったので、試してみた。
https://www.ibm.com/blogs/solutions/jp-ja/ibm-cloud-transit-gateway-multi-account-support-now-available/

(2021/3/31追記）
Transit Gatewayは別アカウントのClassic Infrastructureとの接続もサポートされるようになりました。詳細はこちら。
https://qiita.com/testnin2/items/a57fc659c82d99ba0602

#2. 仕様の確認

- ~~自アカウントのTransit Gatewayから別アカウントで接続できる対象はVPCのみであり、別アカウントのClassic Infrastructureには接続できない。~~ (2021/3/31)自アカウントのTransit Gatewayから別アカウントで接続できる対象はVPCだけでなくClassic Infrastructureも対象となりました。
- 別アカウントのVPCへの接続は、いったんTransit Gatewayを作成した後の**追加作業**で行う。<br>
https://cloud.ibm.com/docs/transit-gateway?topic=transit-gateway-ordering-transit-gateway

>To add them later, refer to Adding a connection. Cross account (VPC only) connections can only be added later, after you provision the gateway.

- Cross Account接続で許容される接続は10まで。ただし、例外承認を取れば10以上も接続できるようだ。<br> https://cloud.ibm.com/docs/transit-gateway?topic=transit-gateway-faqs-for-transit-gateway#connections <br> https://cloud.ibm.com/docs/transit-gateway?topic=transit-gateway-edit-gateway#adding-cross-account-connections

> Q: How many connection requests can I make from one account to VPCs in other IBM Cloud accounts?
A: Each gateway is only permitted to have 10 outstanding requests for a cross account connection.

> Tip: Only 10 pending requests are allowed per gateway. To create more requests, you can cancel the pending connection request, or wait for it to be approved. Connection requests expire if not approved within 72 hours. 



#3. 接続方法

既に、Account-Aに、VPCおよびClassic Infrastructureが存在し、TransitGatewayがすでに存在しているとする。この状態から、Account-BのVPCに接続するようにしたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/a2747075-e5f0-131b-4eac-e8f1ddc4aec4.png)

なお、IBM Cloud docs上に記載されている手順は[ここ](https://cloud.ibm.com/docs/transit-gateway?topic=transit-gateway-edit-gateway#adding-cross-account-connections)にある。

##3-1. （Account-B作業）接続対象のVPCのCRNを調査する。

Resource Listを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/bacc435d-ebf4-54ce-3adb-5a3b556ce186.png)

`Virtual Private Cloud`でフィルタリングし、対象のVPCを見つけたら、その行を選択する。すると右側にCRN情報が表示されるのでコピーしておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/938381e5-3b75-0a46-52d3-032e8c5c6321.png)

##3-2. （Account-A作業）Transit GatewayにAccount BのVPCを追加リクエストする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/da6f8797-0efe-87ad-2729-8271c6f4ad7c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/e123b1af-b2ed-f7c9-715b-bb0a6960dd31.png)


##3-3. (Account-B作業)承認作業

Transit Gatewayにて新たにTransit Gatewayが追加されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/5c3cd594-2593-730c-8da2-de14c6e3ac59.png)

Approveを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/6a61922b-f84c-17df-57e4-79d08fc79914.png)

こちらもApproveを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/2b12dd45-8d3c-9d5b-ed25-dab53be0f48f.png)

承認された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/a137b02c-0c09-47bb-f9cf-728ee8992b35.png)

##3-4. (Account-A作業）

こちらも最終的に全てがAttached状態になった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/16bff7d3-4670-6acf-93d5-6961b135e900.png)



#4 接続テスト
相互接続できることが確認できた（Classic Infrastructureのサーバーから、172.16.xx.xへの経路がBCRに転送されるようにstatic routeを構成済み）

Account-A VPCのVSI: vpca(172.16.0.4)
Account-A classicのVSI: classic(10.192.27.2)
Account-B VPCのVSI: vpcb(172.16.100.4)


```
# AccountA-VPC -> AccountA-Classic Infrastructure
[root@vpca ~]# ping 10.192.27.2
PING 10.192.27.2 (10.192.27.2) 56(84) bytes of data.
64 bytes from 10.192.27.2: icmp_seq=1 ttl=55 time=1.70 ms
64 bytes from 10.192.27.2: icmp_seq=2 ttl=55 time=1.65 ms
64 bytes from 10.192.27.2: icmp_seq=3 ttl=55 time=1.69 ms
64 bytes from 10.192.27.2: icmp_seq=4 ttl=55 time=1.76 ms
```

```
# AccountA-VPC -> AccountB-VPC
[root@vpca ~]# ping 172.16.100.4
PING 172.16.100.4 (172.16.100.4) 56(84) bytes of data.
64 bytes from 172.16.100.4: icmp_seq=1 ttl=59 time=0.804 ms
64 bytes from 172.16.100.4: icmp_seq=2 ttl=59 time=1.70 ms
64 bytes from 172.16.100.4: icmp_seq=3 ttl=59 time=0.784 ms
64 bytes from 172.16.100.4: icmp_seq=4 ttl=59 time=0.761 ms
```



```
# AccountA-Classic Infrastructure -> AccountA-VPC
[root@classic ~]# ping 172.16.0.4
PING 172.16.0.4 (172.16.0.4) 56(84) bytes of data.
64 bytes from 172.16.0.4: icmp_seq=1 ttl=55 time=1.97 ms
64 bytes from 172.16.0.4: icmp_seq=2 ttl=55 time=8.43 ms
64 bytes from 172.16.0.4: icmp_seq=3 ttl=55 time=1.83 ms
64 bytes from 172.16.0.4: icmp_seq=4 ttl=55 time=1.73 ms
```

```
# AccountA-Classic Infrastructure -> AccountB-VPC
[root@classic ~]# ping 172.16.100.4
PING 172.16.100.4 (172.16.100.4) 56(84) bytes of data.
64 bytes from 172.16.100.4: icmp_seq=1 ttl=55 time=1.69 ms
64 bytes from 172.16.100.4: icmp_seq=2 ttl=55 time=2.11 ms
64 bytes from 172.16.100.4: icmp_seq=3 ttl=55 time=1.66 ms
64 bytes from 172.16.100.4: icmp_seq=4 ttl=55 time=1.68 ms
```

```
# AccountB-VPC -> AccountA-VPC
[root@vpcb ~]# ping 172.16.0.4
PING 172.16.0.4 (172.16.0.4) 56(84) bytes of data.
64 bytes from 172.16.0.4: icmp_seq=1 ttl=59 time=0.823 ms
64 bytes from 172.16.0.4: icmp_seq=2 ttl=59 time=0.745 ms
64 bytes from 172.16.0.4: icmp_seq=3 ttl=59 time=0.774 ms
64 bytes from 172.16.0.4: icmp_seq=4 ttl=59 time=0.719 ms
```

```
#AccountB-VPC -> AccountA-Classic Infrastructure
[root@vpcb ~]# ping 10.192.27.2
PING 10.192.27.2 (10.192.27.2) 56(84) bytes of data.
64 bytes from 10.192.27.2: icmp_seq=1 ttl=55 time=1.69 ms
64 bytes from 10.192.27.2: icmp_seq=2 ttl=55 time=1.63 ms
64 bytes from 10.192.27.2: icmp_seq=3 ttl=55 time=1.68 ms
64 bytes from 10.192.27.2: icmp_seq=4 ttl=55 time=1.61 ms
```