【AWS】ネットワークのわからないを終わらせましょう

### はじめに
AWS認定資格「AWS Certified Advanced Networking - Specialty」の勉強はとても難しかった。
なぜか？
専門的な知識が必要なのもありますが、文字だけをみてもなかなかイメージをつかみにくいところがありました。

ということで、ネットワークを徹底的に図解してみました！
ネットワークのわからないを終わらせましょう。

### 対象ネットワーク
すべてのネットワークを網羅するのは大変なので、イメージしにくい以下のネットワーク構成に絞りました。

* オンプレミスとAWS Cloudを接続

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/ca9b31d3-ef61-4769-8fce-7a121b33ad14.png)


* 接続の構成（ Direct Connect / Transit Gateway / PrivateLink ）
* VIF（ Private VIF / Public VIF / Transit VIF ）

それでは見ていきましょう！
（間違い等ありましたらご指摘いただけると幸いです:bow:）

### オンプレミスとAWS Cloudの接続

オンプレミスとAWSとでネットワークを構成するやり方はいくつかあります。
いちばんシンプルなのは、インターネット経由で接続すること。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/ff6886eb-bc14-41f5-9fce-ea9a29200e32.png)

AWS側は「**Internet gateway**」で通信をインターネット経由にします。
インターネット経由にするということはセキュリティを確保するために通信の暗号化が必要になります。

そこで、インターネット経由でかつ暗号化されたプライベートなネットワークであるVPN接続にしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/4de17c82-0d90-480d-abe7-df238f3e9efa.png)

オンプレミス側は「**Customer gateway**」、AWS側は「**Virtual Private Gateway**」でVPN接続を構築します。

しかしながら、会社は機密情報を扱っており、要件としてインターネット経由の通信は許可されない場合もあるかもしれません。

そんなときはどうすればよいでしょう？

### 接続の構成（ Direct Connect / Transit Gateway / VPN ）

**Direct Connect**を使って専用線経由で通信できるようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/92bbc051-8926-4453-805e-c34a85004ada.png)

Direct ConnectはVPCに接続できます。
実際は、1つのVPCだけではなく、複数のVPCに接続することになると思います。
その場合、**Direct Connect Gateway** を使うと良いでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/67d0f8ed-285a-49b4-90b5-0e11da189cd5.png)

Direct Connect Gatewayで複数のVPCの接続を集約できます。
VPCでは「**Virtual Private Gateway**」をDirect Connect Gatewayに関連付けします。

また、Direct Connect Gatewayはリージョンをまたぐことが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/c9b8b428-ede3-49c8-9b65-68122c0c494b.png)

ただし、Direct Connect Gatewayが関連付けられるVPCは最大20個となります。
さらに、VPC間同士の通信はできません。

https://docs.aws.amazon.com/ja_jp/directconnect/latest/UserGuide/limits.html

20個より多くのVPCと関連付けしたり、VPC間同士の通信をできるようにするにはどうしたらよいでしょうか。

**Transig Gateway** を使いましょう。
Direct Connect GatewayにTransit Gatewayを接続します。
そして、接続したいVPCをTransit Gatewayにアタッチします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/b3673f0a-b981-42f0-a2b1-a5af63af42b8.png)

Transit Gatewayは最大5000のVPCと接続することが可能です。
また、VPC間の通信も可能です。

https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/transit-gateway-quotas.html

ただし、Transit Gatewayはリージョンをまたぐことができません。
リージョンをまたいで接続する場合は、Transit Gatewayの **ピアリング** を利用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/6fb9cef5-f954-4718-8077-5ab37165f44f.png)

リージョンをまたいで接続する必要がない場合は、Direct Connect Gatewayに別リージョンのTransit Gatewayを接続することもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/adc8e33f-7880-4786-86ae-f881efc6c5e7.png)

ちなみに、Direct Connectを利用せずにTransit Gatewayに直接接続することも可能です。
専用線を必要とするかどうかですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/03c0a26f-4cb4-49e0-a669-2ede31f51883.png)

---
では、ここからは通信の暗号化をするVPN接続をすることを考えてみましょう。

Direct Connectで専用線を用意できますが、通信は暗号化されていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/369c59cd-fe69-433c-bc81-9a84d204033a.png)

そこで、**Direct Connect + VPN** で通信を暗号化するとよりセキュアになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/76f4c919-71b8-47e8-b87e-af03c1fdc772.png)

オンプレミス側は「**Customer gateway**」、AWS側は「**Vuirtual Private Gateway**」でVPN接続を構築します。
ここでの **Site-to-Site VPN** は、異なる2つのネットワーク（オンプレミスのネットワークとAWS環境）をインターネットを介して安全に接続することを表しています。

では、Direct Connectを使わないまでも、インターネット経由でかつ暗号化されたプライベートなネットワークであるVPN接続したい場合を考えてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/3c5a311b-f89f-4ab2-869d-cf39f9f71e48.png)

VPN接続は1つのVPCのVirtual Private Gatewayにつながります。
複数のVPCとVPN接続したい場合は、複数のVirtual Private Gatewayが必要となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/dbced00d-93a5-4d9c-8b74-fa4fe557fb1b.png)

VPCの数が多くなるとリソースが増え、管理が大変になります。
そこで、 **Transit Gateway** でネットワークを集約しましょう。

**[ 2025/4/1追記 ]
Transit Gatewayを利用すると接続する各VPCにVirtual Private Gatewayを配置する必要がなくなります。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/526de310-d6a9-4674-b94f-bade74d21563.png)

こうすることで、オンプレミスとAWSのセキュアな接続ができるようになります。

### VIF（ Private VIF / Public VIF / Transit VIF ）

VIF（Virthal Interface：仮想インタフェース）には以下の種類があります。
| VIF | 簡単な説明 |
|:-|:-|
| Public VIF | AWSのパブリックサービス（例：S3、DynamoDBなど）へのアクセスを提供します。 |
| Private VIF | VPC（Virtual Private Cloud）へのアクセスを提供します。 |
| Transit VIF | Transit Gatewayを介して複数のVPCをと接続する際に使用します。 |

#### Public VIF（パブリック仮想インタフェース）
オンプレミスとAWS環境との接続においてPublic VIFを使用します。
ただし、パブリックのため通信の暗号化など考慮する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/32cc5355-2edb-4b2f-922a-271869ee4f33.png)

AWSのパブリックサービス（例：S3、DynamoDBなど）へのアクセスするときにも使用します。
AWS環境は通信の暗号化がデフォルトでなされています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/c5c47a33-90e5-4845-9425-334c57261733.png)

#### Private VIF（プライベート仮想インタフェース）
VPCへのアクセスをプライベートにしたいときに構成します。
VPCには「**Virtual Private Gateway**」を用意します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/182873c6-28ed-45f1-a555-d74143aa5923.png)

#### Transit VIF（トランジット仮想インタフェース）
Transit Gatewayを介して複数のVPCと接続する際に使用します。
Transit Gatewayが出てきたらTransit VIFを使うんだなーと覚えましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/eeaaf9b6-0dfb-453e-95d5-32de502358d7.png)

### さいごに
* ネットワークは図を描いてみないと理解ができない！
* 「AWS Certified Advanced Networking - Specialty」の勉強の助けになりますように！

お読みいただきありがとうございました。