AWSのネットワークについてまとめてみた

# はじめに
[AWS Cloud Practitioner Essentials (Japanese) (Na) 日本語実写版](https://explore.skillbuilder.aws/learn/course/external/view/elearning/1875/aws-cloud-practitioner-essentials-japanese-ri-ben-yu-zi-mu-ban 'AWS Cloud Practitioner Essentials (Japanese) (Na) 日本語実写版')を受講してみてAWSのネットワークの基本的な部分がわかりやすく説明されていたのでまとめてみました。

:::note info 
Amazonアカウントを取得していれば無料で受講できます。
:::

# VPC
正式名称は**Amazon Virtual Private Cloud**、通称**VPC**と言う。
AWSリソースに対する境界を確立するためのネットワークサービスであり、AWSの中に独立した仮想ネットワークを作成できる。
![VPC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2860566/92724a82-f815-24b9-1c8c-7d5ce4c63484.png)

### インターネットゲートウェイ
実際にクライアントからVPCにアクセスするためにはVPCに**インターネットゲートウェイ**という出入り口を作ってあげる必要がある。
**インターネットゲートウェイ**はVPCとインターネットを繋ぐ役割を果たす。
![vpcigw.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2860566/889a1728-b7f7-f2f0-4107-333be73e7a4b.png)

### 仮想プライベートゲートウェイ
**仮想プライベートゲートウェイ**はVPC内のプライベートリソースにアクセスするために使用し、**保護されたインターネット接続**(**VPN**)をVPCで受け付けるためのもの。
* 使用例. 企業のデータセンターとAWS間など
![vpc_privatesub.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2860566/16dfe651-b568-53de-d670-be9bf9f6f732.png)


# サブネット
**サブネット**はセキュリティまたは運用のニーズに基づいてリソースをグループ化できるVPC内のセクション
**パブリックサブネット**と**プライベートサブネット**と2つ種類がある。
VPC内で**サブネット**は相互に通信できる。

![subnet.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2860566/dc2fe14a-1651-24a1-3bab-aa71ece81343.png)

### パブリックサブネット
インターネットと通信できるサブネットであり、**インターネットから直接アクセスさせたいもの**を入れる。
主にウェブサイトなど一般公開されているリソースが含まれている。


### プラベートサブネット
インターネットと通信できないサブネットであり、**インターネットから直接アクセスさせたくないもの**を入れる。
主に個人情報や注文履歴を含むデータベースなど、プライベートネットワークを介してのみアクセス可能なリソースが含まれている。
 

# ネットワークACL
**ネットワークコントロールリスト**、通称**ネットワークACL**と言う。

**ネットワークACL**はサブネットレベルで**インバウンドトラフィック:arrow_down:とアウトバウンドトラフィック:arrow_up:を制御する仮想ファイアウォール**

クライアントからデータをリクエストしパケットが送信されるとインターネットゲートウェイを介してVPCに送信される。
パケットがサブネットに出入りする前に、アクセス許可がチェックされる、パケットからサブネットへのアクセス許可をチェックする役割を果たすのが**ネットワークACL**です。

![nacl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2860566/04ef2425-c93b-80e1-93b0-5c8534dfca54.png)


### デフォルトのネットワークACL
各AWSアカウントには、デフォルトのネットワークACLがある。
VPCを設定する際は、アカウントの**デフォルトのネットワークACL**を使用するか、**カスタムネットワークACL**を作成できる。

デフォルトのネットワークACLでは、**すべてのインバウンドトラフィック:arrow_down:とアウトバウンドトラフィック:arrow_up:を許可する。**

### カスタムネットワークACL
カスタムネットワークACLは、許可するトラフィックを指定するルールを追加するまでは、**すべてのインバウンドトラフィック:arrow_down:とアウトバウンドトラフィック:arrow_up:が拒否されます。**

## ステートレスパケットフィルタリング
ネットワークACLでは、ステートレスパケットフィルタリングが実行されます。
パケットは**サブネットの境界(インバウンド:arrow_down:とアウトバウンド:arrow_up:の双方向)を出入りするたびにチェックされる。**

リクエストに対するレスポンスが返ってくるとき、ネットワークACLに以前のリクエストの情報は保存されていない。
ネットワークACLでは、**パケットの応答がルールのリストと照合され、許可するか拒否するかが決定されます。**

:::note info
> ステートレスとは、システムが現在の状態を表すデータなどを保持せず、入力の内容によってのみ出力が決定される方式

(出典: [ステートレス 【stateless】](https://e-words.jp/w/%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%AC%E3%82%B9.html 'ステートレス'))
:::

## セキュリティグループ
パケットがサブネットを通過したら、次はサブネット内のリソース(EC2など)に対して評価するアクセス許可が必要です。
パケットのEC2インスタンスへのアクセス許可をチェックする役割を果たすのが**セキュリティグループ**です。

![security.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2860566/82c294ae-80d8-a835-519f-720928279c68.png)

セキュリティグループは、**Amazon EC2インスタンスのインバウンドトラフィック:arrow_down:とアウトバウンドトラフィック:arrow_up:を制御する仮想ファイアウォールです。**

デフォルトの設定では、セキュリティグループは**すべてのインバウンドトラフィック:arrow_down:を拒否し、すべてのアウトバウンドトラフィック:arrow_up:を許可します。**

### ステートフルパケットフィルタリング
セキュリティグループでは、ステートフルパケットフィルタリングが実行されます。
受信パケットに対して行われた以前の処理情報は保存されてる。

:::note info
> ステートフルとは、システムが現在の状態を表すデータなどを保持しており、その内容を処理に反映させる方式。同じ入力に対する出力が常に同じとは限らず、内部の状態次第で変わることがある。

(出典: [ステートフル 【stateful】](https://e-words.jp/w/%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%95%E3%83%AB.html 'ステートフル'))
:::

#### EC2インスタンスからインターネットにリクエストを送信するという例で考えてみる
そのリクエストに対するレスポンスがEC2インスタンスに返されるとき、以前のリクエストの情報がセキュリティグループに保存されているので、この場合、セキュリティグループは、セキュリティグループの**インバウンドルールに関係なく、レスポンスの通信を通過させます。**




# 参考にしたもの
[AWS Cloud Practitioner Essentials (Japanese) (Na) 日本語実写版](https://explore.skillbuilder.aws/learn/course/external/view/elearning/1875/aws-cloud-practitioner-essentials-japanese-ri-ben-yu-zi-mu-ban 'AWS Cloud Practitioner Essentials (Japanese) (Na) 日本語実写版')
コーヒーショップを例にわかりやすく説明されています。