AWS勉強備忘録24 - サブネットの設定とそれに関する周辺知識

## パブリックサブネット
パブリックサブネットは、インターネットから直接アクセス可能なネットワークセグメントのことを指します。クラウド環境（例：AWS）内で仮想プライベートクラウド（VPC）を設定する際に、パブリックサブネットとプライベートサブネットを定義することが一般的です。
パブリックサブネット内のリソースはインターネットゲートウェイを介してインターネットに接続され、外部からアクセスすることが可能です。これに対して、プライベートサブネット内のリソースはインターネットから直接アクセスできず、通常は内部ネットワークや特定のサービスのみと通信します。

## Webアプリを例にしたサブネットの説明

Webアプリのバックエンドシステムをクラウド上に構築する場合を想像してみましょう。アプリケーションサーバー、データベースサーバー、ファイルストレージなど、さまざまなコンポーネントから構成されます。ここで、ユーザーがWebアプリにアクセスする際に必要となるのが、アプリケーションサーバーへのアクセスです。

### パブリックサブネット内のアプリケーションサーバー
Webアプリのユーザーがアプリにアクセスするためには、インターネット経由でアプリケーションサーバーに到達できる必要があります。そのため、アプリケーションサーバーはパブリックサブネット内に配置され、インターネットゲートウェイを介して外部のユーザーからのリクエストを受け取ることができるようになります。

### プライベートサブネット内のデータベースサーバー
一方で、データベースサーバーなどのセンシティブな情報を扱うシステムコンポーネントは、プライベートサブネット内に配置されることが一般的です。これは、直接インターネットからアクセスされるリスクを避け、セキュリティを強化するためです。アプリケーションサーバーからは内部ネットワークを通じて安全にデータベースサーバーにアクセスできます。

以下は、パブリックサブネット内のアプリケーションサーバーとプライベートサブネット内のデータベースサーバーの比較表です。

| 特徴                     | パブリックサブネット内のアプリケーションサーバー | プライベートサブネット内のデータベースサーバー |
|--------------------------|--------------------------------------------|-----------------------------------------|
| **アクセス可能性**         | インターネット経由で直接アクセス可能                  | インターネットからの直接アクセスは不可              |
| **配置場所**              | パブリックサブネット                          | プライベートサブネット                       |
| **インターネット接続**     | インターネットゲートウェイを介して接続                | インターネットに直接接続しない                   |
| **セキュリティリスク**    | インターネットからアクセス可能なため高い               | インターネットから隔離されているため低い            |
| **主な利用目的**          | ユーザーがアプリケーションにアクセスするため             | センシティブなデータの処理や保管                    |
| **内部ネットワークからのアクセス** | 可能（VPC内の他のリソースからのアクセス）        | 可能（例: アプリケーションサーバーからのアクセス）   |
| **利用されるAWSサービス**  | インターネットゲートウェイ                      | NATゲートウェイ（アウトバウンド接続が必要な場合）     |

## パブリックサブネット内のリソース

### 1. Application Load Balancer
ALBはパブリックサブネット内に配置され、インターネットからのトラフィックを受け取ります。ALBはそのトラフィックをプライベートサブネット内のアプリケーションサーバー群に分散させる役割を果たします。このようにして、ALBはセキュリティの境界として機能し、プライベートサブネット内のリソースを直接インターネットから隔離します。

### 2. NATゲートウェイ
プライベートサブネット内のリソース（例えば、アプリケーションサーバー）がインターネット上のサービス（例えば、ソフトウェアのアップデート）にアクセスする必要がある場合、NAT（Network Address Translation）ゲートウェイを使用します。NATゲートウェイはパブリックサブネット内に配置され、プライベートサブネットからのアウトバウンド接続（インターネットへの接続）を可能にし、インバウンド接続（インターネットからの直接の接続）は許可しません。

### まとめ
この構成により、プライベートサブネット内のリソースがインターネットから隔離され、セキュリティリスクを軽減しながら、必要な外部リソースへのアクセスが可能になります。NATゲートウェイを通じたトラフィックは、特定のポートやプロトコルで制限するなどしてさらにセキュリティを強化することが可能です。
このように、パブリックサブネットとプライベートサブネットの使い分け、およびNATゲートウェイの使用は、クラウド環境におけるセキュリティとアクセス制御の重要な側面を形成します。特に、パブリックサブネットには外部からアクセスが必要な最低限のリソースのみを配置し、重要なバックエンドシステムはプライベートサブネット内に隔離することが推奨されます。

## 補足1: アプリケーションサーバがプライベートサブネット内にある場合のアプリケーションへの接続方法
### 1. ロードバランサーを利用する
アプリケーションサーバーの前にロードバランサー（例：Application Load Balancer）を配置します。ロードバランサーはパブリックサブネット内にあり、インターネットからのリクエストを受け取ることができます。ロードバランサーは、そのリクエストをプライベートサブネット内のアプリケーションサーバーに転送し、サーバーからのレスポンスをユーザーに返します。この方法で、ユーザーは間接的にプライベートサブネット内のアプリケーションサーバーと通信することができます。

### 2. APIゲートウェイ
APIを介してサービスを提供する場合、APIゲートウェイ（例：Amazon API Gateway）を利用して、プライベートサブネット内のアプリケーションサーバーへのアクセスポイントとして機能させることができます。APIゲートウェイはパブリックなエンドポイントを提供し、バックエンドのプライベートサブネットにあるサービスと通信するための中継点として機能します。

### 3. ドメイン名システム（DNS）との統合
ロードバランサーやAPIゲートウェイには、通常、一意のDNS名が割り当てられます。ユーザーはこのDNS名を使用してアプリケーションにアクセスし、背後でロードバランサーやAPIゲートウェイがプライベートサブネット内の適切なサーバーにリクエストをルーティングします。

このように、プライベートサブネット内にアプリケーションサーバーを配置しつつも、ロードバランサーやAPIゲートウェイといった中継サービスを通じて、安全に外部からのアクセスを可能にすることができます。このアーキテクチャにより、セキュリティを保ちながらもユーザーにサービスを提供することが可能になります。

## 補足2: ロードバランサーとプロキシ

### ロードバランサー
ロードバランサーは、複数のサーバー間でネットワークトラフィックを分散させるデバイスまたはソフトウェアです。その主な目的は、リクエストを複数のサーバーに均等に配分することで、単一のサーバーに負荷が集中するのを防ぎ、アプリケーションの可用性と耐障害性を高めることです。ロードバランサーは、特に高トラフィックのWebアプリケーションやサービスでよく使用されます。ロードバランサーは、Layer 4（トランスポートレイヤー）またはLayer 7（アプリケーションレイヤー）で動作することができます。

### プロキシ
プロキシは、クライアントとサーバーの間に立って、クライアントのリクエストを代わりにサーバーに送信し、そのレスポンスをクライアントに返す役割を果たすサーバーです。プロキシは、主にセキュリティ（例：ファイアウォールとしての使用）、プライバシー保護（クライアントのIPアドレスを隠す）、コンテンツフィルタリング、キャッシングなどの目的で使用されます。プロキシは、クライアントとサーバーの間の通信を制御し、管理するために使用されます。

### 主な違い
- **目的**: ロードバランサーの主な目的は、複数のサーバー間でトラフィックを分散させ、可用性と耐障害性を高めることです。一方、プロキシはセキュリティ、プライバシー、コンテンツフィルタリング、キャッシングなどのために使用されます。
- **動作レイヤー**: ロードバランサーはトランスポートレイヤーまたはアプリケーションレイヤーで動作することが多いですが、プロキシは通常アプリケーションレイヤーで動作します。
- **通信の制御**: プロキシは、クライアントとサーバー間の通信をより細かく制御することが可能です。ロードバランサーは、主にトラフィックの分散に焦点を当てています。

## 補足3: プロキシ、リバースプロキシの役割を果たすAWSサービス
### プロキシの役割を果たすAWSサービス
- **Amazon API Gateway**: クライアントからのAPIリクエストをバックエンドサービス（例えば、Lambda関数、HTTPベースのエンドポイントなど）へ転送するマネージドサービスです。API Gatewayは、リクエストとレスポンスの変換、認証・認可、トラフィック管理など、プロキシとしての機能を提供します。

- **Amazon RDS Proxy**: Amazon RDSやAmazon Auroraへのデータベース接続をプロキシするマネージドサービスです。RDS Proxyは、データベースへの接続を管理し、接続プールを提供することで、データベースの負荷を軽減し、アプリケーションのスケーラビリティを向上させます。

### リバースプロキシの役割を果たすAWSサービス

- **Elastic Load Balancing (ELB)**: AWSのロードバランサーサービスで、アプリケーションレベル（Application Load Balancer）、トランスポートレベル（Network Load Balancer）、またはクラシックモデル（Classic Load Balancer）のロードバランシングを提供します。特にApplication Load Balancerはリバースプロキシとして機能し、インターネットからのトラフィックをバックエンドのEC2インスタンスやコンテナ、Lambda関数などに分散させます。

- **Amazon CloudFront**: AWSのコンテンツ配信ネットワーク（CDN）サービスです。CloudFrontは、世界中のエッジロケーションにキャッシュされたコンテンツをユーザーに高速に配信するリバースプロキシとして機能します。また、オリジンへのリクエストを最適化し、セキュリティ機能（例：DDoS保護、SSL/TLS暗号化）を提供します。