AWS Transit Gatewayを整理してみた

# 背景・目的
AWS ネットワークについて、曖昧に覚えている箇所があるので整理してます。
今回は、AWS Transit Gatewayについて整理します。

# まとめ
下記に特徴を整理します。

|特徴|説明|
|:-- |:--|
|概要|VPCとオンプレを相互接続するために使用できるNW中継ハブ<BR>リージョン間ピアリングはAWSデータセンター間の全てのNWトラフィックは、物理層で自動的に暗号化される|
|概念|・アタッチメント<BR>・MTU<BR>・Transit Gateway ルートテーブル<BR>・Associations<BR>・Route propagation|
|課金形態|・TGW接続数/時間<BR>・TGWを経由するトラフィック量|
|ユースケースの例|・集中型ルーター<BR>・分離された VPC<BR>・共有サービスによる分離された VPC<BR>・ピア接続<BR>・一元的な発信ルーティング<BR>・アプライアンス VPC|


# 概要
[Transit Gateway とは](https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/what-is-transit-gateway.html)を元に整理します。

> Transit Gateway は、仮想プライベートクラウド (VPC) とオンプレミスネットワークを相互接続するために使用できるネットワークの中継ハブです。クラウドインフラストラクチャがグローバルに拡張されるにつれて、リージョン間ピアリングはAWSグローバルインフラストラクチャ AWS データセンター間のすべてのネットワークトラフィックは、物理層で自動的に暗号化されます。


- VPCとオンプレを相互接続するために使用できるNW中継ハブ
- リージョン間ピアリングはAWSデータセンター間の全てのNWトラフィックは、物理層で自動的に暗号化される

## Transit Gatewayの概念

### アタッチメント
下記をアタッチメントできます。
- 1つ以上のVPC
- SD-WAN/サードパーティ製NWアプライアンス
- AWS Direct Connect Gateway（DXGWという）
- 別のTransit Gateway接続
- Transit GatewayへのVPN接続


### Transit Gatewayの最大送信単位
- ネットワーク接続の最大送信単位を MTU（Muaximnm Transmission Unit)という。
- 接続を介して渡すことができる最大許容パケットサイズ (バイト単位) 
- 接続の MTU が大きいほど、より多くのデータを単一のパケットで渡すことが可能
- Transit Gateway は、VPC、AWS Direct Connect、Transit Gateway 接続、およびピアリングアタッチメント間のトラフィックに対して 8500 バイトの MTU をサポート
- VPN 接続を介したトラフィックは、1500 バイトの MTU

### Transit Gateway ルートテーブル
- デフォルトのルートテーブルがある
- オプションで追加のルートを含める事が可能
- 動的ルートと静的ルートが含まれる

### Associations
- 各アタッチメントには、1 つのルートテーブルに関連付けられる

### Route propagation
- VPC、VPN 接続、または Direct Connect ゲートウェイは、Transit Gateway ルートテーブルに動的にルートを伝達できる
- VPC では、Transit Gateway にトラフィックを送信するための静的ルートを作成する必要がある
- VPN 接続では、ボーダーゲートウェイプロトコル (BGP) を使用してトランジットゲートウェイからオンプレミスのルーターにルートが伝達される

## ユースケースの例
[Transit Gateway のユースケースの例](https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/TGW_Scenarios.html)を元に整理します。

### 集中型ルーター
> すべての VPC、AWS Direct Connect 、および Site-to-Site VPN 接続を接続する集中型ルーターとしてトランジットゲートウェイを設定することができます。このシナリオでは、アタッチメントはすべて、トランジットゲートウェイのデフォルトルートテーブルに関連付けられ、トランジットゲートウェイのデフォルトルートテーブルに伝播されます。そのため、アタッチメントはすべて、単純なレイヤー 3 IP ルーターとしてトランジットゲートウェイを提供しながら、パケットを相互にルーティングできます。

- 全てのVPC,DX、VPNを接続する集中型ルーター
- アタッチメントは全て、TGWののデフォルトルートテーブルに関連付けられる


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/37844a74-dd63-8b79-e2af-ffe32b9113a5.png)
出典：[Transit Gateway > ユースケースの例 > 集中型ルーター](https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/transit-gateway-centralized-router.html)

### 分離された VPC
> 複数の独立したルーターとしてトランジットゲートウェイを設定することができます。これは複数のトランジットゲートウェイを使用するのと似ていますが、ルートとアタッチメントが変わる可能性がある場合に、より高い柔軟性を提供します。このシナリオでは、独立した各ルーターに単一のルートテーブルがあります。独立したルーターに関連付けられているすべてのアタッチメントは、伝播されてそのルートテーブルに関連付けられます。1 つの独立したルーターに関連付けられているアタッチメントは、相互にパケットをルーティングできますが、別の独立したルーターのアタッチメントにパケットをルーティングしたり、アタッチメントからパケットを受信したりすることはできません。

- 複数の独立したルーターとしてTGWを設定する
- 独立した各ルーターに単一のルートテーブルがある
- 独立したルーターに関連付けられる全てのアタッチメントは、伝播されてそのルートテーブルに関連付けられる
- 1つの独立したルーターに関連付けられるアタッチメントは、相互にパケットをルーティングできるが、別の独立したルーターのアタッチメント二パケットをルーティングしたり、アタッチメントからパケットを受信できない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0a211dcf-145f-ba1f-06a5-fec37dfa3fb2.png)
出典：[Transit Gateway > ユースケースの例 > 分離されたVPC](https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/transit-gateway-isolated.html)



### 共有サービスによる分離された VPC
> 共有サービスを使用する複数の分離されたルーターとしてトランジットゲートウェイを設定できます。これは複数のトランジットゲートウェイを使用するのと似ていますが、ルートとアタッチメントが変わる可能性がある場合に、より高い柔軟性を提供します。このシナリオでは、独立した各ルーターに単一のルートテーブルがあります。独立したルーターに関連付けられているすべてのアタッチメントは、伝播されてそのルートテーブルに関連付けられます。1 つの独立したルーターに関連付けられているアタッチメントは、相互にパケットをルーティングできますが、別の独立したルーターのアタッチメントにパケットをルーティングしたり、アタッチメントからパケットを受信したりすることはできません。アタッチメントは、共有サービスとの間でパケットを送受信することができます。このシナリオは、分離する必要があるが、本番システムなどの共有サービスを使用する必要があるグループがある場合に使用できます。

- ルートとアタッチメントが変わる可能性がある場合に、より高い柔軟性を提供する
- 独立した各ルーターに単一のルートテーブルがある
- 独立したルーターに関連付けられるすべてのアタッチメントは、伝播されそのルートに関連付けられる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/c572a126-4cd2-b06e-3b04-7ef44fa00808.png)
出典：[Transit Gateway > ユースケースの例 > 分離されたVPC](https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/transit-gateway-isolated-shared.html)

### ピア接続 Transit Gateway
> 異なるリージョンで Transit Gateway 間に Transit Gateway ピアリング接続を作成できます。その後、各 Transit Gateway のアタッチメント間でトラフィックをルーティングできます。このシナリオでは、VPC および VPN アタッチメントは、Transit Gateway のデフォルトルートテーブルに関連付けられ、Transit Gateway のデフォルトルートテーブルに伝播されます。各 Transit Gateway のルートテーブルには、ゲートウェイのピアリングアタッチメントを指す静的ルートがあります。

- 異なるリージョンで、TGW間にTGWピアリング接続を作成できる
- その後、各TGWのアタッチメント間でトラフィックをルーティングできる
- VPC、VPNアタッチメントはTGWのデフォルトルートテーブルに関連付けられ、TGWのデフォルトルートテーブルに伝播される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fc38c9f5-78ce-66b1-8ca9-064e405c4b15.png)
出典：[Transit Gateway > ユースケースの例 > ピア接続 Transit Gateway](https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/transit-gateway-peering-scenario.html)

### インターネットへの一元的な発信ルーティング
> インターネットゲートウェイがない VPC からのアウトバウンドインターネットトラフィックを、NAT ゲートウェイとインターネットゲートウェイを含む VPC にルーティングするように、トランジットゲートウェイを設定できます。

- IGWがないVPCからのアウトバウンドインターネットトラフィックをNATとIGWを含むVPCにルーティングする


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/dd471aa7-4b6b-2bf5-3cb0-9e83c67de938.png)
出典：[Transit Gateway > ユースケースの例 > インターネットへの一元的な発信ルーティング](https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/transit-gateway-nat-igw.html)

### 共有サービス VPC のアプライアンス
> 共有サービス VPC でアプライアンス (セキュリティアプライアンスなど) を設定できます。トランジットゲートウェイアタッチメント間でルーティングされるすべてのトラフィックは、まず、共有サービス VPC のアプライアンスによって検査されます。アプライアンスモードが有効な場合、トランジットゲートウェイは、フローハッシュアルゴリズムを使用して、アプライアンス VPC 内の 1 つのネットワークインターフェイスを選択し、フローの有効期間中トラフィックを送信します。トランジットゲートウェイは、リターントラフィックに同じネットワークインターフェイスを使用します。これにより、双方向トラフィックは対称的にルーティングされます。つまり、フローの有効期間中、VPC アタッチメント内の同じアベイラビリティーゾーンを経由してルーティングされます。アーキテクチャ内に複数のトランジットゲートウェイがある場合、各トランジットゲートウェイは独自のセッションアフィニティを維持し、各トランジットゲートウェイは異なるネットワークインターフェイスを選択できます。


- 共有サービスVPCでアプライアンスを設定できる
- TGW間でルーティングされる全てのトラフィックは、共有VPCのアプライアンスにより検査される

> フローの維持を保証するには、1 つのトランジットゲートウェイをアプライアンス VPC に接続する必要があります。複数のトランジットゲートウェイを 1 つのアプライアンス VPC に接続しても、これらのトランジットゲートウェイはフロー状態情報を相互に共有しないので、フローの維持は保証されません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d6f22461-1c67-8003-434e-458406aa61f7.png)
出典：[Transit Gateway > ユースケースの例 > 共有サービス VPC のアプライアンス](https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/transit-gateway-appliance-scenario.html)


## Transit Gateway 設計のベストプラクティス
> - 各 Transit Gateway VPC アタッチメントに個別のサブネットを使用します。各サブネットに対して、小さな CIDR (/28 など) を使用して、EC2 リソースのアドレスが増えるようにします。別のサブネットを使用する場合は、次の項目を設定できます:
    ・ Transit Gateway サブネットに関連付けられたインバウンドおよびアウトバウンド NACL を開いたままにします。
    ・　トラフィックフローに応じて、ワークロードサブネットに NACL を適用できます。

- VPCアタッチメントに個別のサブネットを使用する
- 各サブネットは小さなCIDRを割当てる

> - ネットワーク ACL を 1 つ作成し、Transit Gateway に関連付けられたすべてのサブネットに関連付けます。ネットワーク ACL は、インバウンド方向とアウトバウンド方向の両方で開いたままにします。

- NACLを1つ作成する
- TGWに関連付けられたすべてのサブネットに関連付ける
- NACLはインバウンドとアウトバウンドの両方を開ける

> - ネットワーク設計で複数の VPC ルートテーブル (複数の NAT ゲートウェイを経由してトラフィックをルーティングする中間ボックス VPC など) を必要としない限り、同じ VPC ルートテーブルをTransit Gateway に関連付けられたすべてのサブネットに関連付けます。
> - Border Gateway Protocol (BGP) Site-to-Site VPN 接続を使用します。接続用のカスタマーゲートウェイデバイスまたはファイアウォールがマルチパスをサポートしている場合は、機能を有効にします。

- BGP VPNを使用する
- 接続用のCGWデバイス、FWがマルチパスをサポートしている場合は、機能を有効化

> - AWS Direct Connectゲートウェイアタッチメントおよび BGP Site-to-Site VPN アタッチメントのルート伝達を有効にします。
> - VPC ピアリングから移行して Transit Gateway を使用する場合、以下の点を検討してください。
    ・ Transit Gateway では、セキュリティグループの参照はサポートされません。
    ・ VPC ピアリングと Transit Gateway 間の MTU サイズの不一致により、非対称トラフィックで一部のパケットがドロップされる可能性があります。サイズの不一致によりジャンボパケットがドロップされないように、両方の VPC を同時に更新してください。

- DXGW、BGP Site-to-Site VPNアタッチメントのルート伝播を有効にする
    
> - 設計上、Transit Gateway は可用性が高いため、高可用性を得るためにTransit Gateway を追加する必要はありません。

- TGWは高可用性である。高可用性目的でTGWを追加する必要はない

> - 設計で複数のTransit Gateway ルートテーブルが必要でない限り、Transit Gateway ルートテーブルの数を制限します。

- TGWルートテーブルが必要でない限り、TGWルートテーブルの数を制限する

> - 冗長性を確保するには、災害対策用に各リージョンで 1 つの Transit Gateway を使用します。

- 冗長性を確保するために、災害対策用に各リージョンで1つのTGWを使用する

> - 複数の Transit Gateway のデプロイを行う場合は、それぞれの Transit Gateway に固有の自律システム番号 (Amazon 側の ASN) を使用することをお勧めします。リージョン間のピアリングも使用できます。詳細については、「AWS Transit Gateway のリージョン間ピアリングを使用したグローバルネットワークの構築」を参照してください。

- 複数のTGWのデプロイを行う場合、TGWに固有のAS番号を使用する

## 料金
2024/2/18時点の[AWS Transit Gateway の料金](https://aws.amazon.com/jp/transit-gateway/pricing/)を元に整理します。

> AWS Transit Gateway では、Transit Gateway に時間ごとに行われた接続数と、AWS Transit Gateway を経由するトラフィック量に対して課金

- TGW接続数/時間
- TGWを経由するトラフィック量

- ap-northeast-1の場合
    - アタッチメントごとの料金 (USD):0.07 USD
    - 処理データ 1 GB あたりの料金 (USD)	:0.02USD

# 考察
今回は、ドキュメントを元に整理してみました。今後は実際に触って確認してみます。

# 参考
https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/what-is-transit-gateway.html