【AWS-SAA勉強記】第4回_Amazon VPC編

この記事は作者本人がAWS-SAAの学習を通じて、曖昧や覚えづらい部分をサービス単位でまとめたものです。
特に、概要だけではイメージがわきづらいので、できるだけユースケースを活用して理解しやすいようにしています。
教材はSHOEISHAの[AWS教科書 AWS認定ソリューションアーキテクトアソシエイト テキスト＆問題集](https://www.amazon.co.jp/AWS%E6%95%99%E7%A7%91%E6%9B%B8-AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88-%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%EF%BC%86%E5%95%8F%E9%A1%8C%E9%9B%86-%E7%85%A4%E7%94%B0-%E5%BC%98%E6%B3%95/dp/4798183261/ref=sr_1_5?crid=3FF4OG65DFJ67&dib=eyJ2IjoiMSJ9.T249byXp1rsbDxkYXfxXb6fI4BUDNVOMSaquZL-1mVpPGu6oOTJAj19zZAYJR86Jon6ca0-q7sg_Ial5s1cea15f4gmNEJG8LyNQfNCbzfRWbdc3QShULjB2kryq34xDUkL-inBJMmFaiNYCb3lq0OcIRowzNObcgxFyIO96gEzEfcAYd2dxcSG6AHyl5e2DAQpdDy0xOEQZb_sRAX47vahzwyOMS8huPEScwArE3A0.zBHSxW-BjHBATnQ5vd4s6NikPxikuDNRnvEEGpF7d6A&dib_tag=se&keywords=aws+%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88+%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88&qid=1724027719&s=books&sprefix=AWS%2Cstripbooks%2C195&sr=1-5)を参考にしています。

## Amazon VPCに関する曖昧な部分
Amazon VPC(以下、VPC)は、AWSのクラウドインフラストラクチャ上に仮想的なネットワークを構築するためのサービスです。
これにより、ユーザーは自分専用の仮想ネットワークを作成し、その中でAWSリソース（例：EC2インスタンス、RDSデータベースなど）を起動・管理できます。

AWSでシステムを構築する場合は、ほとんどの場合VPCを作成することになり、AWS-SAAに合格するためにはVPCを深く理解する必要があります。
Amazon VPCの中で、曖昧になりがちな部分は以下の通りです。（あくまでも私個人が曖昧であると感じた部分です）

* VPCとオンプレミスネットワークがIGWを経由せずに通信するには？
* VPCと他のVPCがIGWを経由せずに通信するには？
* VPC内のリソースとVPC外のリソースがIGWを経由せずに通信するには？
* 混同しやすいセキュリティグループとネットワークACL

本記事では、これらの内容について解説していきます。

## VPCとオンプレミスネットワークがIGWを経由せずに通信するには？
VPCはインターネットゲートウェイ（IGW）を通してインターネットと通信することが可能です。
その際は、パブリックサブネットをIGWと接続し、パブリックサブネットにNATGWを配置します。
このあたりは[こちらの記事](https://qiita.com/c60evaporator/items/2f24d4796202e8b06a77)にまとめられていますのでご参照ください。

本章では、IGWを経由せずにVPCがオンプレミスネットワークと通信する方法を整理します。
IGWを経由して接続することも可能なのですが、セキュリティを確保したい場合は外部のインターネットを経由して接続することは避ける必要がありますね。

そこで登場するのが、**AWS Direct Connect**と**Site-to-Site VPN**、**AWSトランジットゲートウェイ**です。

### IGWを経由せず通信するための前提
まず、VPCがIGWを経由せずにオンプレミスネットワークと通信するためには、以下が必要です。
- 仮想プライベートゲートウェイ（Virtual Private Gateway, VGW）
    - VGWは、VPC内のリソースとオンプレミスネットワークを接続するためのVPNコンセントレータです。
- カスタマーゲートウェイ
    - オンプレミスネットワーク側のVPN終端装置です。具体的にはオンプレミス側のルータやFWのことを指します。
- ルートテーブル
    - ルートテーブルには、サブネットやゲートウェイからのネットワークトラフィックの経路を判断するためのルール（ルート）が含まれています。
    これにより、VPC内のリソースがどのように通信するかを制御できます。

### AWS Direct Connect
AWS Direct Connectは、インターネットを経由せずにAWSとオンプレミスネットワークを接続するための**専用回線**を提供します。

AWSはDirect Connectロケーションと呼ばれる実在するデータセンターからAWSへの専用接続を提供します。
一方、**クライアントのオンプレミス拠点からDirect Connectロケーションまでの回線は、提供してくれません**。

そのため、**Direct Connectの利用開始までは数週間から数カ月かかる可能性がある**ということが注意点です。
`AWS-SAAの問題において、「いち早くネットワークを構築する必要がある」等の文言があった場合、その時点でAWS Direct Connectは除外してください。`

### Site-to-Site VPN
AWS Site-to-Site VPNは、インターネットプロトコルセキュリティ（IPsec）を使用して、AWSとオンプレミスネットワーク間に暗号化されたトンネル（VPN）を確立します。
AWS Management Console、AWS CLI、AWS SDKを使用して**簡単に設定**することができます。

AWS Direct ConnectとSite-to-Site VPNの特徴をまとめると以下の通りです。
| サービス | インターネット接続 | 開通所要期間 |
| ---- | ---- | ---- |
| AWS Direct Connect | 無（専用回線） | 長い |
| AWS Site-to-Site VPN | 有（VPN） | 短い |

### AWSトランジットゲートウェイ（TGW）
TGWとは複数のAmazon Virtual Private Cloud (VPC) やオンプレミスネットワークを一元的に接続するためのハブとして機能します。
1:1接続であればSite-to-Site VPNで十分なのですが、複数のSite-to-Site VPN接続が必要な場合は、TGWを使用した方が管理が容易となります。

`TGWはVPCとオンプレミスネットワークの通信だけではなく、VPC同士の接続も管理します。`
`詳細は、次章で説明します。`

## VPCと他のVPCがIGWを経由せずに通信するには？
VPCと他のVPCがIGWを経由せずに通信するためには、ルートテーブルと、**VPCピアリング接続**ないしは**AWSトランジットゲートウェイ**が必要です。

### VPCピアリング接続
VPCピアリング接続を利用することで、特定のVPCから別のVPCとを**一対一で接続**することが可能です。
`通信するVPC同士のIPアドレスレンジの重複は出来ないことに注意が必要です。`

また、**複数のVPCを相互に接続したい場合は、フルメッシュでの接続が必要**となってしまいます。
そのため、VPCピアリング接続は一対一の場合で利用し、複数のVPC接続の場合はあまり利用しないと考えてよいでしょう。

### AWSトランジットゲートウェイ（TGW）
TGWは**複数のVPCや複数のVPN接続等のハブ**として機能します。
TGW側のルートテーブルでルーティングテーブルを一元管理するため、**多数のピアリング接続やSite-to-Site VPNを個別に管理するのに比べて、管理が容易**となります。

`VPC同士の接続のみではなく、VPCとオンプレミスネットワークへの接続もTGWの管理対象となります。`

## VPC内のリソースとVPC外のリソースがIGWを経由せずに通信するには？
VPC内のリソースとVPC外のリソースがIGWを経由せずに通信するには、**VPCエンドポイント**または**AWS PrivateLink**を活用します。

### VPCエンドポイント
AWSのVPCエンドポイントは、VPC内のリソースがIGWを経由せずにAWSサービスへアクセスできるようにするための機能です。
VPCエンドポイントには主に2種類あります。
- ゲートウェイエンドポイント
    - **Amazon S3とDynamoDB**に対して使用されます。
    VPCのルートテーブルにエントリを追加することで、これらのサービスにアクセスできます。
    - **VPCに対して１つ作成**
        - 名前の通り、IGWと似たような位置づけと覚える
    - **無料**
- インターフェイスエンドポイント
    - **S3をはじめとした他の多くのAWSサービス**に対して使用されます。
    エンドポイントはVPC内のENI（Elastic Network Interface）として機能し、プライベートIPアドレスを持ちます。
        - AWSのElastic Network Interface (ENI) は、仮想ネットワークインターフェースで、物理環境のネットワークインターフェースカード (NIC) に相当します。
        ENIは、Amazon VPC内でEC2インスタンス等にネットワーク接続を提供するために使用します。
    - **サブネットに対して１つ作成**
    - **有料**

### AWS PrivateLink
AWS PrivateLinkは、IGWを経由せずにインターフェイスエンドポイントを使用してVPC外のAWSサービスに通信を可能とします。
ただし、PrivateLinkにはもう一つ特徴的な機能があります。

それは、**クライアントのVPCで提供しているサービスに対して、別のVPCからインターフェイスエンドポイント経由で通信可能にする**という機能です。

`AWS-SAAで「インターネットを経由せずにSaaS事業者（サービスプロバイダー）のサービスにアクセス」といった文言が出てきた場合、AWS PrivateLinkを選択しましょう。`


## 混同しやすいセキュリティグループとネットワークACL
VPC内でセキュリティを確保するための機能として、セキュリティグループとネットワークACLがあります。
どちらもVPC内のトラフィックを制御するFWとしての役割を果たしますが、基本的には**セキュリティグループとネットワークACLの両方を活用して多層的な防御を行うこと**が重要です。

### セキュリティグループ
**EC2やRDS等のリソース単位でアタッチ**し、**ステートフルなFW**となっています。
**ステートフル**とはインバウンド通信を許可していれば、その帰りの通信（アウトバウンド通信）を許可していなくても通信ができるということです。

### ネットワークACL
サブネット単位でアタッチし、**ステートレスなFW**となっています。
ステートレスであるため、インバウンド通信とアウトバウンド通信の両方を許可（または拒否）する必要があります。

### セキュリティグループと根とワークACLの代表的な違い
先に申した通り、両者は併用することでより価値を発揮するサービスです。
ただし、混同がしやすいところでもあるので代表的な違いを表でまとめます。
|  | セキュリティグループ | ネットワークACL |
| ---- | ---- | ---- |
| 対象 | EC2やRDS等のリソース | サブネット |
| 許可リスト／拒否リスト | 許可リストのみ | 許可リストと拒否リスト |
| ステート | ステートフル | ステートレス |
| ルール評価 | 優先順位無し | 優先順位あり（ルール番号が小さい順に評価） |

## まとめ
本記事では、以下についてまとめました。
* VPCとオンプレミスネットワークがIGWを経由せずに通信するには？
* VPCと他のVPCがIGWを経由せずに通信するには？
* VPC内のリソースとVPC外のリソースがIGWを経由せずに通信するには？
* 混同しやすいセキュリティグループとネットワークACL

次回は[【AWS-SAA勉強記】第5回_Amazon CloudFront、Global Accelerator編](https://qiita.com/sknp/items/9af88a0ed6ab7e1aa04f)です。