# AWS - VPC & Networking 基本情報

{{#include ../../../../banners/hacktricks-training.md}}

## AWS ネットワーキングの概要

**VPC** は **ネットワーク CIDR** を含みます（例: 10.0.0.0/16、**ルーティングテーブル** と **ネットワーク ACL** を持つ）。

この VPC ネットワークは **サブネット** に分割されており、**サブネット** は **VPC**、**ルーティングテーブル**、および **ネットワーク ACL** に直接 **関連** しています。

次に、サービス（EC2 インスタンスなど）に接続された **ネットワークインターフェース** は **サブネット** に **セキュリティグループ** を使用して **接続** されます。

したがって、**セキュリティグループ** は、**サブネット** に関係なく、ネットワーク **インターフェース** の公開ポートを制限します。そして、**ネットワーク ACL** は **全体のネットワーク** に対して公開ポートを **制限** します。

さらに、**インターネットにアクセスするためには**、確認すべきいくつかの興味深い設定があります：

- **サブネット** は **自動的にパブリック IPv4 アドレスを割り当てる** ことができます
- **自動的に IPv4 アドレスを割り当てる** サブネット内で作成された **インスタンス** は、1 つのアドレスを取得できます
- **インターネットゲートウェイ** は **VPC** に **接続** される必要があります
- **Egress-only インターネットゲートウェイ** を使用することもできます
- **プライベートサブネット** に **NAT ゲートウェイ** を持つこともでき、そこから外部サービスに **接続する** ことが可能ですが、外部からそれらに到達することは **できません**。
- NAT ゲートウェイは **パブリック**（インターネットへのアクセス）または **プライベート**（他の VPC へのアクセス）である可能性があります。

![](<../../../../images/image (274).png>)

## VPC

Amazon **Virtual Private Cloud** (Amazon VPC) は、定義した仮想ネットワークに **AWS リソースを起動する** ことを可能にします。この仮想ネットワークには、いくつかのサブネット、インターネットゲートウェイ、ACL、セキュリティグループ、IP などがあります。

### サブネット

サブネットは、より高いレベルのセキュリティを強化するのに役立ちます。**類似リソースの論理的グループ化** は、インフラストラクチャ全体の **管理の容易さ** を維持するのにも役立ちます。

- 有効な CIDR は /16 ネットマスクから /28 ネットマスクまでです。
- サブネットは同時に異なるアベイラビリティゾーンに存在することはできません。
- **AWS は各サブネットの最初の 3 つのホスト IP アドレスを** **内部 AWS 使用のために予約しています**：最初のホストアドレスは VPC ルーター用に使用されます。2 番目のアドレスは AWS DNS 用に予約され、3 番目のアドレスは将来の使用のために予約されています。
- **インターネットに直接アクセスできる** サブネットは **パブリックサブネット** と呼ばれ、プライベートサブネットはそうではありません。

<figure><img src="https://lh5.googleusercontent.com/N_WTrTrDAHwN61FMKJvLSHVua2EM0IazHH1fSTg8JQfTChm-dLN9mn7wkjz2MlpD-uOUqtWdMZpqKOp4VxaHy5-5X66GD1K8y1UGc27r-GbHdFty9ImpXdcjEsC7u4vjxKme_B_HwDOUnG6camxENYECTw=s2048" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh3.googleusercontent.com/MmjfVzGmV4jM7tO8lVoTKONoeqbq6E40DGeKUoo4kN-lmMDKnEiGNB-gGVx3EvjK9UV844im225CA8aAjomHf1Modt3MramHrHZdEGbeSZncWhVuT9R8f7tQZ2pXjdSJxeNfErmJ-0mmcUaV6dcU0TAd2A=s2048" alt=""><figcaption></figcaption></figure>

### ルートテーブル

ルートテーブルは、VPC 内のサブネットのトラフィックルーティングを決定します。どのネットワークトラフィックがインターネットまたは VPN 接続に転送されるかを決定します。通常、次のアクセスが見つかります：

- ローカル VPC
- NAT
- インターネットゲートウェイ / Egress-only インターネットゲートウェイ（VPC にインターネットアクセスを提供するために必要です）。
- サブネットをパブリックにするには、**インターネットゲートウェイを作成して VPC に接続する** 必要があります。
- VPC エンドポイント（プライベートネットワークから S3 にアクセスするため）

次の画像では、デフォルトのパブリックネットワークとプライベートネットワークの違いを確認できます：

<figure><img src="https://lh3.googleusercontent.com/q4ASpcLAYqijdNMLhMLl8EoowDtTMU5I_7YCVfk7-5hxDyeQOik9ImHnD2SYy32XUA2qXjEbXTAxA1lP--znJASdhYOdBveDcrD42f9XBKZ3EmjJCazN3YPLC6oS0xtRMmfORuwCszmMt-KrAkH07_izwg=s2048" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh5.googleusercontent.com/30psylXAI0gRN6_LK-reP00aGIlMma64E1qafCVPunn6nS-y5jAO6Y2JiempKcf6-LFi7ScicYcOh7BbHEya2VWtksnFX_8SPXQf97tKkg2tNZzrArWbiDCCn2m2LP1QUq6MZ_KayH3yir7t8zpO7CEQOw=s2048" alt=""><figcaption></figcaption></figure>

### ACLs

**ネットワークアクセス制御リスト (ACL)**：ネットワーク ACL は、サブネットへの入出力ネットワークトラフィックを制御するファイアウォールルールです。特定の IP アドレスまたは範囲へのトラフィックを許可または拒否するために使用できます。

- アクセスを許可/拒否するためにセキュリティグループを使用することが最も一般的ですが、これは確立されたリバースシェルを完全に切断する唯一の方法です。セキュリティグループのルールを変更しても、すでに確立された接続は停止しません。
- ただし、これは全体のサブネットに適用されるため、必要な機能が妨げられる可能性があるため、注意が必要です。

### セキュリティグループ

セキュリティグループは、VPC 内のインスタンスへの入出力ネットワーク **トラフィック** を制御する仮想 **ファイアウォール** です。1 つの SG と M インスタンスの関係（通常は 1 対 1）。\
通常、これはインスタンスの危険なポートを開くために使用されます。例えば、ポート 22 など：

<figure><img src="https://lh5.googleusercontent.com/LliB7eb3cYfkEyOpyw1-eYgWsn2kq1yF6uRn5VYndvOuTvDlURimYx9UvuK8F2impTLmx50mid4MdTXE-Ljt2i_rxaIfnKUdji_hFjCdU9tdoW-axng9-W4tSL71gbbjrPQ7IYY5lAdH_G3UoMRMGGGOxQ=s2048" alt=""><figcaption></figcaption></figure>

### Elastic IP アドレス

_Elastic IP アドレス_ は、動的クラウドコンピューティング用に設計された **静的 IPv4 アドレス** です。Elastic IP アドレスは、あなたの AWS アカウントに割り当てられ、解放するまであなたのものです。Elastic IP アドレスを使用することで、インスタンスやソフトウェアの障害をマスクし、アドレスをアカウント内の別のインスタンスに迅速に再マッピングできます。

### サブネット間の接続

デフォルトでは、すべてのサブネットは **自動的にパブリック IP アドレスを割り当てる** 設定がオフになっていますが、オンにすることができます。

**ルートテーブル内のローカルルートは、VPC サブネット間の通信を可能にします。**

異なるサブネットと接続する場合、他のサブネットに接続されたサブネットにはアクセスできません。直接接続を作成する必要があります。**これはインターネットゲートウェイにも適用されます**。インターネットにアクセスするためにサブネット接続を通過することはできず、インターネットゲートウェイをサブネットに割り当てる必要があります。

### VPC ピアリング

VPC ピアリングは、**2 つ以上の VPC を接続する** ことを可能にします。IPV4 または IPV6 を使用し、同じネットワークの一部であるかのように接続します。

ピア接続が確立されると、**1 つの VPC のリソースが他の VPC のリソースにアクセスできます**。VPC 間の接続は、既存の AWS ネットワークインフラストラクチャを通じて実装されるため、高可用性で帯域幅のボトルネックはありません。**ピア接続は同じネットワークの一部であるかのように動作するため、使用できる CIDR ブロック範囲に制限があります。**\
VPC に **重複または重なり合う CIDR** 範囲がある場合、**VPC をピアリングすることはできません**。\
各 AWS VPC は **そのピアとのみ通信します**。例えば、VPC 1 と VPC 2 の間にピア接続があり、VPC 2 と VPC 3 の間に別の接続がある場合、VPC 1 と VPC 2 は直接通信でき、VPC 2 と VPC 3 も同様ですが、VPC 1 と VPC 3 は通信できません。**1 つの VPC を通じて別の VPC にルーティングすることはできません。**

### **VPC フローログ**

VPC 内には、異なるサブネット間で通信する数百または数千のリソースが存在する可能性があります。**VPC フローログを使用すると、VPC 内のリソースのネットワークインターフェース間で流れる IP トラフィック情報をキャプチャできます**。

S3 アクセスログや CloudFront アクセスログとは異なり、**VPC フローログによって生成されたログデータは S3 に保存されません。代わりに、キャプチャされたログデータは CloudWatch ログに送信されます**。

制限事項：

- VPC ピア接続を実行している場合、同じアカウント内のピア VPC のフローログのみを表示できます。
- EC2-Classic 環境内でリソースを実行している場合、残念ながらそのインターフェースから情報を取得することはできません。
- VPC フローログが作成されると、変更することはできません。VPC フローログの設定を変更するには、削除して新しいものを再作成する必要があります。
- 次のトラフィックはログによって監視されず、キャプチャされません。VPC 内の DHCP トラフィック、Amazon DNS サーバー宛のインスタンスからのトラフィック。
- VPC デフォルトルーターの IP アドレス宛のトラフィック、およびインスタンスメタデータを収集するために使用される 169.254.169.254 および Amazon Time Sync Service に使用される 169.254.169.123 との間のトラフィック。
- Windows インスタンスからの Amazon Windows アクティベーションライセンスに関連するトラフィック
- ネットワークロードバランサーインターフェースとエンドポイントネットワークインターフェース間のトラフィック

CloudWatch ロググループにデータを公開する各ネットワークインターフェースは、異なるログストリームを使用します。そして、これらのストリームの各々には、ログエントリの内容を示すフローログイベントデータがあります。これらの **ログは、約 10 ～ 15 分のウィンドウ内でデータをキャプチャします**。

## VPN

### 基本的な AWS VPN コンポーネント

1. **カスタマーゲートウェイ**：
- カスタマーゲートウェイは、VPN 接続のあなたの側を表すために AWS で作成するリソースです。
- これは、サイト間 VPN 接続のあなたの側にある物理デバイスまたはソフトウェアアプリケーションです。
- ルーティング情報とネットワークデバイス（ルーターやファイアウォールなど）のパブリック IP アドレスを AWS に提供してカスタマーゲートウェイを作成します。
- VPN 接続を設定するための参照ポイントとして機能し、追加料金は発生しません。
2. **仮想プライベートゲートウェイ**：
- 仮想プライベートゲートウェイ (VPG) は、サイト間 VPN 接続の Amazon 側の VPN 集中装置です。
- VPC に接続され、VPN 接続のターゲットとして機能します。
- VPG は VPN 接続の AWS 側エンドポイントです。
- VPC とオンプレミスネットワーク間の安全な通信を処理します。
3. **サイト間 VPN 接続**：
- サイト間 VPN 接続は、オンプレミスネットワークを VPC に安全な IPsec VPN トンネルを介して接続します。
- このタイプの接続には、カスタマーゲートウェイと仮想プライベートゲートウェイが必要です。
- データセンターやネットワークと AWS 環境間の安全で安定した一貫した通信に使用されます。
- 通常、定期的で長期的な接続に使用され、接続を介して転送されるデータ量に基づいて請求されます。
4. **クライアント VPN エンドポイント**：
- クライアント VPN エンドポイントは、クライアント VPN セッションを有効にし、管理するために AWS で作成するリソースです。
- 個々のデバイス（ラップトップ、スマートフォンなど）が AWS リソースまたはオンプレミスネットワークに安全に接続できるようにするために使用されます。
- サイト間 VPN とは異なり、個々のクライアント向けに設計されています。

### サイト間 VPN

**オンプレミスネットワークを VPC に接続します。**

- **VPN 接続**：オンプレミス機器と VPC 間の安全な接続。
- **VPN トンネル**：顧客ネットワークから AWS へのデータが通過できる暗号化されたリンク。

各 VPN 接続には、同時に使用できる 2 つの VPN トンネルが含まれています。

- **カスタマーゲートウェイ**：AWS に顧客ゲートウェイデバイスに関する情報を提供する AWS リソース。
- **カスタマーゲートウェイデバイス**：サイト間 VPN 接続のあなたの側にある物理デバイスまたはソフトウェアアプリケーション。
- **仮想プライベートゲートウェイ**：サイト間 VPN 接続の Amazon 側の VPN 集中装置。サイト間 VPN 接続の Amazon 側のゲートウェイとして仮想プライベートゲートウェイまたはトランジットゲートウェイを使用します。
- **トランジットゲートウェイ**：VPC とオンプレミスネットワークを相互接続するために使用できるトランジットハブ。サイト間 VPN 接続の Amazon 側のゲートウェイとしてトランジットゲートウェイまたは仮想プライベートゲートウェイを使用します。

#### 制限事項

- 仮想プライベートゲートウェイの VPN 接続では IPv6 トラフィックはサポートされていません。
- AWS VPN 接続は Path MTU Discovery をサポートしていません。

さらに、サイト間 VPN を使用する際には次の点を考慮してください。

- VPC を共通のオンプレミスネットワークに接続する場合、ネットワークのために重複しない CIDR ブロックを使用することをお勧めします。

### クライアント VPN <a href="#what-is-components" id="what-is-components"></a>

**あなたのマシンから VPC に接続します**

#### 概念

- **クライアント VPN エンドポイント**：クライアント VPN セッションを有効にし、管理するために作成および構成するリソースです。すべてのクライアント VPN セッションが終了するリソースです。
- **ターゲットネットワーク**：ターゲットネットワークは、クライアント VPN エンドポイントに関連付けるネットワークです。**VPC のサブネットはターゲットネットワークです**。サブネットをクライアント VPN エンドポイントに関連付けることで、VPN セッションを確立できます。高可用性のために、複数のサブネットをクライアント VPN エンドポイントに関連付けることができます。すべてのサブネットは同じ VPC からでなければなりません。各サブネットは異なるアベイラビリティゾーンに属する必要があります。
- **ルート**：各クライアント VPN エンドポイントには、利用可能な宛先ネットワークルートを説明するルートテーブルがあります。ルートテーブル内の各ルートは、特定のリソースまたはネットワークへのトラフィックのパスを指定します。
- **認可ルール**：認可ルールは、**ネットワークにアクセスできるユーザーを制限します**。指定されたネットワークに対して、アクセスを許可される Active Directory またはアイデンティティプロバイダー (IdP) グループを構成します。このグループに属するユーザーのみが指定されたネットワークにアクセスできます。**デフォルトでは、認可ルールはありません**。リソースやネットワークにアクセスできるようにするには、認可ルールを構成する必要があります。
- **クライアント**：クライアント VPN エンドポイントに接続して VPN セッションを確立するエンドユーザー。エンドユーザーは OpenVPN クライアントをダウンロードし、作成したクライアント VPN 構成ファイルを使用して VPN セッションを確立する必要があります。
- **クライアント CIDR 範囲**：クライアント IP アドレスを割り当てるための IP アドレス範囲。クライアント VPN エンドポイントへの各接続には、クライアント CIDR 範囲から一意の IP アドレスが割り当てられます。クライアント CIDR 範囲を選択します。例えば、`10.2.0.0/16` など。
- **クライアント VPN ポート**：AWS クライアント VPN は、TCP および UDP の両方でポート 443 および 1194 をサポートします。デフォルトはポート 443 です。
- **クライアント VPN ネットワークインターフェース**：サブネットをクライアント VPN エンドポイントに関連付けると、そのサブネットにクライアント VPN ネットワークインターフェースが作成されます。**クライアント VPN エンドポイントから VPC に送信されるトラフィックは、クライアント VPN ネットワークインターフェースを介して送信されます**。その後、ソースネットワークアドレス変換 (SNAT) が適用され、クライアント CIDR 範囲からのソース IP アドレスがクライアント VPN ネットワークインターフェースの IP アドレスに変換されます。
- **接続ログ**：クライアント VPN エンドポイントの接続イベントをログに記録するために接続ログを有効にできます。この情報を使用してフォレンジックを実行したり、クライアント VPN エンドポイントの使用状況を分析したり、接続の問題をデバッグしたりできます。
- **セルフサービスポータル**：クライアント VPN エンドポイントのセルフサービスポータルを有効にできます。クライアントは、自分の資格情報を使用してウェブベースのポータルにログインし、クライアント VPN エンドポイント構成ファイルの最新バージョンをダウンロードしたり、AWS 提供のクライアントの最新バージョンをダウンロードしたりできます。

#### 制限事項

- **クライアント CIDR 範囲は、関連付けられたサブネットが存在する VPC のローカル CIDR と重複してはなりません**。また、クライアント VPN エンドポイントのルートテーブルに手動で追加されたルートとも重複してはなりません。
- クライアント CIDR 範囲は、**少なくとも /22 のブロックサイズ**を持ち、**/12 より大きくはなりません**。
- クライアント CIDR 範囲内の**一部のアドレス**は、クライアント VPN エンドポイントの可用性モデルをサポートするために使用され、クライアントに割り当てることはできません。したがって、**サポートする最大同時接続数の 2 倍の IP アドレスを含む CIDR ブロックを割り当てることをお勧めします**。
- **クライアント CIDR 範囲は、クライアント VPN エンドポイントを作成した後に変更することはできません**。
- **クライアント VPN エンドポイントに関連付けられたサブネットは、**同じ VPC に存在する必要があります**。
- **同じアベイラビリティゾーンから複数のサブネットをクライアント VPN エンドポイントに関連付けることはできません**。
- クライアント VPN エンドポイントは、**専用テナンシー VPC でのサブネット関連付けをサポートしていません**。
- クライアント VPN は **IPv4** トラフィックのみをサポートします。
- クライアント VPN は **FIPS** **準拠** ではありません。
- マルチファクター認証 (MFA) が Active Directory に対して無効になっている場合、ユーザーパスワードは次の形式であることはできません。

```
SCRV1:<base64_encoded_string>:<base64_encoded_string>
```

- セルフサービスポータルは、**相互認証を使用して認証されるクライアントには利用できません**。

{{#include ../../../../banners/hacktricks-training.md}}
