AWSネットワークの構成要素について理解する

## はじめに
クラウド環境でシステムを構築する際、ネットワーク設計は最も重要な基盤です。従来のオンプレミス環境とAWS環境では、同じネットワークの概念に基づいていますが、構築や管理方法が大きく異なります。本記事では、オンプレミスとの比較を通じて、AWSネットワーク構成の全体像と主要な構成要素についてまとめました。

## なぜAWSネットワークを理解する必要があるのか
クラウド上では、物理的な機器や配線がなくても、すべてのシステムは「目に見えないネットワーク」で繋がっています。
AWSネットワークを理解すると、次のようなリスクを抑えることができます：
- 最低限の通信だけ許可し、外部からの不正アクセスを低減できる
- 不要な通信や構成を排除し、通信コストを抑えることができる
- 通信経路を適切に設計すれば、接続エラーやタイムアウトなどのトラブルの発生を抑えられる

クラウドのネットワークは、オンプレミスとは仕組みが異なるため、基本を正しく押さえることが重要です。

## オンプレミスとAWSネットワークを比較
以下に、オンプレミス環境とAWS環境のネットワーク構成要素の対応関係をまとめました：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3958955/7ab6a557-8771-4c91-96e4-64f6e7aa540f.png)

#### 1. ルーター／ファイアウォール ⇔ インターネットゲートウェイ
インターネットとネットワークを接続する出入り口です。

#### 2\.VLAN（仮想LAN） ⇔ サブネット
ネットワークを目的に応じて区切ることで、異なる種類のサーバーや機能を整理して管理できます。それぞれのセグメントにリソースを異なる通信ルールやアクセス権を設定することが可能です。

#### 3\. NATルーター	 ⇔ NATゲートウェイ
内部ネットワークからインターネットへの通信を可能にしますが、外部から直接アクセスされることはありません。

#### 4\. サーバーファイアウォール	 ⇔ セキュリティグループ
特定の通信だけを許可することで、不正アクセスを防ぐ役割を持ちます。

それでは、オンプレミス環境とAWSクラウド環境の特徴を比較してみましょう。
#### オンプレミス環境
- 物理ネットワーク機器やサーバーの配置と物理的なケーブル接続が必要
- 機器の購入や設置、保守が必要

#### AWSクラウド環境
- PC1台で、仮想ネットワークを構築することが可能
- 物理的な機器や管理が不要

まとめると、オンプレミスは「物理機器で構成されたネットワーク」、AWSクラウド環境は「GUIやIaCツールを使って定義・変更できる仮想ネットワーク」だと言えます。

## AWSネットワーク構成の全体像
AWSのネットワークは、VPC(Virtual Private Cloud)を中心に構成されています。
AWSのネットワーク構成は、家の設計図のようなものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3958955/5db27097-10a3-4a3d-8304-16f261afce33.png)

- 家全体 = VPC
- 玄関 = インターネットゲートウェイ
- 玄関に付ける表札 = Elastic IP
- 玄関への隠し通路 ＝ NATゲートウェイ
- 部屋 = サブネット
    - リビング = パブリックサブネット
    - 自分の部屋  = プライベートサブネット 
- 勝手口 ＝ VPCエンドポイント（インターフェース型）
- 外周の塀 = ネットワークACL
- 家の壁 = セキュリティグループ
- 屋根裏への折りたたみはしご = 踏み台サーバー
※使う人・使うタイミングが限られ、常に開いているわけではない

## 各ネットワーク構成要素

### VPC
AWSアカウントに紐づけられた自分専用の仮想ネットワーク空間です。
最初からインターネットと繋がっているわけではなく、自分で通信のルールや構成を決められる「隔離された空間」として動作します。VPCにIPアドレスの範囲（10.0.0.0/16）を決めて、インターネットゲートウェイやサブネット、ルートテーブルなどのネットワーク構成を設計し、セキュリティグループとネットワークACLで通信の制御を行います。
 
### サブネット(Subnet)
サブネットは仮想ネットワークであるVPCの中を分割して管理するための、より小さいネットワークの単位です。サブネットを使うと、外からアクセスされるサーバー（Webサーバー）と、内部だけで使うサーバー（データベースサーバー）を分けて配置できます。

:::note warn
**1つのアベイラビリティゾーン（AZ）にしか属することはできません。**
AZは、それぞれ物理的に分類されたデータセンター群です。
仮にサブネットが複数のAZにまたがっていた場合、片方のAZで障害が起きると、
**同じサブネット全体が影響を受けてしまう可能性があります。**
つまり、サブネットは必ず1つのAZに限定され、複数のAZに跨がる構成はできない
という仕様になっています。
:::

サブネットには2種類あります：
- #### パブリックサブネット
    - IGWを通じてインターネットから直接アクセスできるサブネット
    - 外部公開が必要なWebサーバーなどを配置する

- #### プライベートサブネット
    - IGWを経由せず、インターネットから直接アクセスできないサブネット
    - 内部でのみ通信するアプリケーションサーバー、データベースサーバーなどのリソースを配置する

### インターネットゲートウェイ(IGW：Internet Gateway)
VPC内のリソースとインターネットを接続するための仮想的な出入り口です。
このゲートウェイをVPCにアタッチし、ルートテーブルで経路を指定することで、パブリックサブネットにあるリソースがインターネットと通信できるようになります。

1. IGWをVPCにアタッチする
1. パブリックサブネットに属するリソースのルートテーブルと`0.0.0.0/0 ⇒ IGW`へ設定
1. セキュリティグループでインバウンド/アウトバウンドの許可を設定

これにより、VPC内のリソースが初めてインターネットへ通信できるようになります。

### Elastic IP (EIP)
Elastic IPは、AWSが提供する**静的なパブリックIPアドレス**です。インスタンスの再起動や置き換えを行ってもIPアドレスが変わらず、**常に同じIPアドレス**でアクセスが可能です。IGWを通じて外部との通信を行うリソースに割り当てることができます。Elastic IPは、DNSの変更を待つことなくIPアドレスを即座に別のインスタンスに付け替えることもできるため、高可用性の確保や障害対応に役立ちます。ただし、**未使用状態でも課金が発生するため**、不必要なEIPの割り当ては避け、必要なときだけ使用することが推奨されます。

### NATゲートウェイ（NAT：Network Address Translation Gateway）
NATゲートウェイは、VPC内のプライベートサブネットからインターネットへの通信を可能にするための中継役です。NATゲートウェイを経由することで内部のリソースからインターネットへのアクセスを可能にする「**一方向の通信**」を実現します。外からは直接アクセスできないため、セキュリティを保ちながら外部サービスの利用やソフトウェア更新が行うことができます。

### ルートテーブル（Route Table）
ルートテーブルは、通信経路の情報・決まりごとです。
VPC内の通信が「どこへ」「どうやって届くか」を決める地図のような役割を担います。
各サブネットにはルートテーブルが関連付けられており、そのサブネットから出ていく通信の行き先と、使うルート（ゲートウェイ）を指定します。そのサブネットから出ていく通信が内部通信になるのか、外部に出るのかをここで制御します。

ルートテーブルの設定例は以下の通りです：
| 宛先（Destination） | ターゲット（Target） | 説明 |
|---------------------|------------------|------|
| 10.0.0.0/16         | local            | 同じVPC内の通信はVPC内部でルーティング |
|                     |                  |                                     |
| 0.0.0.0/0           | igw-xxxxxxxx     | インターネットへの通信はIGWを経由      |


### VPCエンドポイント
VPCエンドポイントは、インターネットを経由せずに、VPC内からS3やDynamoDBなどのAWSサービスに安全にアクセスできる仕組みです。インターネットゲートウェイやNATゲートウェイを使わず、VPC内で通信が完結するため、セキュリティの向上やコスト削減に繋がります。

VPCエンドポイントには2種類あります：
- **ゲートウェイ型**のVPCエンドポイント
    - データの保存・取得が必要な場合に使用
    - S3、DynamoDBにだけアクセスする
    - ルートテーブルで制御する
- **インターフェース型**のVPCエンドポイント
    - 各種サービスとプライベート接続が必要な場合に使用
    - VPC内にENI（Elastic Network Interface）＝仮想ネットワークカードを作って通信する

### セキュリティグループ（SG：Security Group）
セキュリティグループは、EC2インスタンスやRDSなどのリソースに対する**インスタンス単位**のファイアウォールです。セキュリティグループは**ステートフル**な仕組みで、外部からの通信を許可すると、戻りの通信（応答）も自動的に許可されます。つまり、**片方の通信を許可すれば双方向の通信ができる**というのがステートフルの特徴であり、送信や応答などの**通信の状態（コネクションの関連性）を覚えている**ということです。

- どの**通信プロトコル**（例：SSH、HTTP、HTTPS）を
- どの**ポート番号**（例：22、80、443）で
- どこからの**アクセス**（送信元IPアドレス）を許可するか

といった条件を細かく設定することができます。

:::note warn
**拒否ルールを設定することはできません！**
セキュリティグループは許可する通信だけを定義することができ、
定義されていない通信はすべて遮断されます。
:::

### ネットワークACL（Network Access Control List）
ネットワークACLは、**サブネット単位**で通信を制御するファイアウォールです。1つのサブネットに属するインスタンスの通信を一括で制御します。ネットワークACLは、**ステートレス**な仕組みで、通信の状態を覚えないため、外部からの通信と戻りの通信をそれぞれ明示的に許可する必要があります。例えば、WebサーバーへのHTTPリクエスト（受信）を許可するだけではなく、そのレスポンス（送信）も別途許可をする必要があります。

- どの**通信プロトコル**（例：SSH、HTTP、HTTPS）を
- どの**ポート番号**（例：22、80、443）で
- どこからの**アクセス**（送信元IPアドレス）を許可または拒否するか

といった条件を設定することができます。

:::note warn
**許可と拒否の両方のルールを設定できます！**
特定のIPアドレスからのアクセスを明示的にブロックすることも可能です。
各ルールには番号が付けられ、**番号が小さい順に評価され、最初に一致したルールが適用**されます。それ以降は評価されません。初期状態では、**すべての通信を許可**する設定になっていることが多く、実務では複雑な制御が必要な場合を除き、ネットワークACLはデフォルトのまま使われることも一般的です。
:::

:::note info
### AWS WAF（Web Application Firewall）
AWS WAFは、SQLインジェクションやXSSといった**Webアプリケーションへの攻撃からリソースを守る**ファイアウォールです。 AWS WAFは、ネットワーク層（Layer 3）やトランスポート層（Layer 4）の通信制御は行わず、アプリケーション層（Layer 7）の**HTTP/HTTPS通信のみ**を対象としています。つまり、VPC内の通信制御には使用できません。あくまでも、Webアプリ向けのファイアウォールです。そのため、AWSにおけるネットワークのセキュリティ対策では、セキュリティグループやネットワークACLといったサービスと明確に役割を区別して使う必要があります。

※ファイアウォールと聞くとAWS WAFを連想する方も多いため、その役割との違いが分かるように併せて紹介しています。（2025/3/28 加筆）
:::

以下に、レイヤーで見る位置づけの違いを図で表しました：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3958955/26c2546f-e591-4e43-8a74-4c208eef1624.png)

### 踏み台サーバー(Bastion)
踏み台インスタンスは、プライベートサブネット内のリソースに安全にアクセスするための中継点となるEC2インスタンスです。通常はパブリックサブネットに配置し、SSHやRDP接続を特定の管理者IPに制限することで、内部リソースへの直接アクセスを防ぎ、セキュリティを高めます。現在は、AWS Systems Manager（SSM）を使えば、踏み台を使わずに安全な接続が可能であり、こちらが主流となりつつあります。

## まとめ
AWSのネットワーク構成は、オンプレミスとは異なる考え方が求められます。
基本構成を理解することで、安全で効率的なクラウド環境を構築できるようになります。

https://docs.aws.amazon.com/vpc/

https://aws.amazon.com/jp/builders-flash/202503/learn-vpc-end-point/

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-security-groups.html

https://aws.amazon.com/jp/waf/