【SAA-C03 備忘録】VPCらへん

# はじめに

問題解いてて問われた内容の備忘録だったもの。

# VPC（Virtual Private Cloud）

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/what-is-amazon-vpc.html

## セキュリティグループ・ネットワークACL

VPC内でそれぞれインスタンスおよびサブネットレベルのトラフィックを制御し、ネットワークセキュリティを強化する役割を果たす。

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

- **ステートフル**
  - 一度許可した通信セッションは、逆方向のトラフィックも自動的に許可される
- 許可のみ IN / Out で設定（明示的に「拒否」を設定することはできない）
- デフォルトでは同じセキュリティグループ内通信が許可されている（詳細はVPCの初期設定に依存することがあるが）
- **設定の変更が加えられた際は紐づいているすべてのリソースに即時反映**
- セキュリティグループはCIDRブロックでルールの条件を指定できるのに加え、別のセキュリティグループIDを指定することも可能
  - CIDRブロックを指定するとサブネット内の他のAWSリソースからもアクセスできてしまうことに注意
  - ちなみにCIDRブロックの設計にはVPCやサブネットのブロックサイズ制限（通常 `/16~28` の範囲）を考慮する必要あり

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

### ネットワークACL

- サブネットレベルのプロトコル通信の許可と拒否を設定するためのファイアウォール
  - ネットワークACLはサブネット単位で適用され、個々のインスタンスへ直接の通信制御は不可能
- **ステートレス**
  - インバウンドルールとアウトバウンドルールは別々に設定され、一方を設定しただけでは他方が自動的に許可されない
  - 許可と拒否を IN / Out の両方で設定
  - デフォルトではすべてのインバウンドとアウトバウンドトラフィックが許可
- ルールの評価と反映
  - ネットワークACLのルールはルールナンバーの低い値から高い値に順に評価される
  - 条件を満たすルールが初めて見つかった時点でそのルールが適用される
  - ルールの変更は即時反映
- SSH接続におけるエフェメラルポートの考慮
  - SSH接続を受け入れるためにクライアントの応答トラフィックが許可されるように、エフェメラルポートへのアウトバウンド通信を許可する必要がある
  - 設定例：
    - インバウンド通信
      - ポート22を許可（SSHのウェルノウンポート）
    - アウトバウンド通信
      - エフェメラルポート（例えば49152–65535）を許可
      - これによりSSHセッションが確立された後の応答トラフィックを許可

## ゲートウェイ
### インターネットゲートウェイ

- VPC内に配置されたインスタンスからインターネットへの通信を可能にするVPCコンポーネント
- AWSによるマネージドなサービスなので冗長化や障害時の復旧が自動で行われる
- パブリックサブネットと関連付ける

### 仮想プライベートゲートウェイ

- VPCがVPNやDirect Connectと接続するためのインターフェース
- 各VPCに1つだけ設置

### NATゲートウェイ

- プライベートIPをNATゲートウェイが持つパブリックIPに置き換える
- なので配置先はパブリックサブネットと関連付ける
- マルチAZ構成にするには「AZごとに」配置する必要がある
- NATを配置したうえで、プライベートサブネットから各NATゲートウェイへのルートの設定が必要になるよ
- インバウンドはWebサーバーとかをかまして、アウトバウンドのときにNATを通らせるようにすると、外部からの直接アクセスを防ぎセキュリティを強化できるよ

### Egress Only-インターネットゲートウェイ

- IPv6 トラフィックでのみ使用される
  - IPv4 経由での送信専用のインターネット通信を可能にする場合は代わりに NAT ゲートウェイを使用する


## VPCエンドポイント

インターネットを経由せずに、VPC内のサービスからVPC外のAWSサービスに接続することができる（同一リージョン内の通信料金は無料であるため、通信コスト削減できる！）

- **ゲートウェイエンドポイント**
  - **パブリックIPを利用する** がAWSのネットワークを使うのでインターネットを経由しない
  - Amazon S3 および DynamoDB のみ対応
    - S3 や DynamoDB へ「接続したいリソースが配置されているVPC」に VPC エンドポイントを割り当てる
    - VPCのルートテーブルにVPCエンドポイントのルーティングを設定
- **インターフェースエンドポイント**
  - **プライベートIPを利用した**、VPC内外のリソース同士のプライベートアクセスを実現するためのインターフェース型エンドポイント
  - ルートテーブルに関連付けるのではなく、DNSを使った名前解決を行ってVPC内部からのプライベートアクセスを実現
    - プライベートIPアドレス経由でS3バケットなどにアクセス可能
- エンドポイントポリシー
  - VPCエンドポイントにはアクセス制御のためのエンドポイントポリシーの設定が必要

## オンプレ-AWS間の接続

### VPN（Amazon Site-to-Site VPN）で接続

インターネットを経由しながらも、暗号化された通信ができる。

- オンプレ側：カスタマーゲートウェイを設置
- AWS側：仮想プライベートゲートウェイを設置

### Direct Connectで接続

オンプレミス環境とAWSを専用線で直接接続する。インターネットを経由せずに、安定した高速かつ低レイテンシの接続が可能に。

## AWS-AWS間の接続

 - VPCピアリング：
   - 2つのVPCをプライベート接続するやつ
   - AWSアカウントをまたいでつなぐこともできる
   - ※ ３つ以上のネットワーク間接続はVPCピアリングでは非効率なのでTransit Gatewayで複数のVPCとオンプレネットワークを接続したほうがよいかも
- VPCエンドポイント：
  - ゲートウェイエンドポイント
  - インターフェースエンドポイント
- AWS PrivateLink：
  - プライベートネットワークを介してAWSサービスや他のVPCと通信する
  - VPC内でVPCエンドポイントを使用する際には、適切なセキュリティグループとルートテーブルの設定が必要
- Direct Connect Gateway：
  - 異なるリージョンに対してDirect Connect接続
  - アカウントをまたいでVPCをつなぐときは、各VPCが正しく設定されていることを確認する必要あり

## その他VPCの機能
### DNS hostnamesオプション

- 非有効化：サブネットで起動されたインスタンスがDNS名を取得できない
- 有効化：Route53と連携してVPC内部において名前解決ができるようになる

https://qiita.com/satofujino/items/a8f3106dbd5557097ad6

### VPCフローログ

- ネットワークインターフェースを介するトラフィックを追跡し、ログ化する
- 有効化することで、EC2インスタンスのネットワークインターフェイスを通じて送受信されるIPトラフィック情報をキャプチャできる

### Elastic Network Interface（ENI）

仮想ネットワークカードを表す VPC 内の論理ネットワーキングコンポーネント。

例えば、EC2インスタンスがネットワークに接続するには、IPアドレスや所属するVPCといったネットワーク情報が必要。これらの情報はインスタンス自体に直接設定されるのではなく、ENIに関連付けられている。

付与されているということは付け替えることも可能で、以下の方法でEC2にアタッチできる。

- ホットアタッチ：実行中インスタンスへのアタッチ
- ウォームアタッチ：停止中インスタンスへのアタッチ
- コールドアタッチ：起動中インスタンスへのアタッチ

https://business.ntt-east.co.jp/content/cloudsolution/column-14.html