〜AWS初学者の資格日記〜 VPC編 (ソリューションアーキテクトレベル)

こんにちは、つかさです
今回は`VPC`に関してです。特にVPCの接続に関係する部分を中心に記事を書いていこうと思います。
個人的にとても間違えやすく苦手なので、もし同じような境遇の方がいれば一緒に頑張ってきましょう！:grin:

## VPC
Virtual Private Cloudの略でAWS上に作成できるプライベート仮想ネットワーク空間
<p align="right">
  <img width="50"src="https://cloud5.jp/wp-content/uploads/2024/05/aws-lambda-icon-28.jpg">
</p>

### 基本構成
- 問題文
- 答え
- なぜその答えなのか
- その答えを理解するための周辺知識
***

<details open><summary>問題</summary>

セキュリティ上の理由でオンプレミスからパブリックIPアドレスを使用せずにS3バケットへデータをアップロードします。どのような方法がありますか？
</details>

<details><summary>答え</summary>

VPCとVPN接続し、VPCにインターフェースエンドポイントを作成する。エンドポイントへS3バケットへのリクエストを作成する。
</details>

<details><summary>理由</summary>

パブリックIPアドレスを使用しないという要件からプライベート接続したいことがわかる。そしてS3へのプライベート接続には`ゲートウェイエンドポイント`と`インターフェースエンドポイント`の２つがある。今回オンプレミスからの接続なので`インターフェースエンドポイント`が適切な答えになります。
</details>

この問題ではオンプレミスからS3に対してどのようにプライベートアクセスするかをイメージし理解する事が大切です。

今回問題で挙げられているアクセスは大きく2つに分ける事ができます。
1 : オンプレミスからVPCへのプライベートアクセス
2 : VPC内リソースからS3へのプライベートアクセス

#### オンプレミスからVPCへのプライベートアクセス
オンプレミスからVPCに対してプライベート接続する方法は２つある。`AWS Direct Connectによる専用線接`または`AWS Site-to-Site VPNによるVPN接続`です。

これらの違いについて見てみましょう!

|  | AWS Direct Connect | AWS Site-to-Site VPN |
|:-:|:-:|:-:|
| 接続の方法と仕組み  | データセンターや通信事業者の施設を通じ、物理的な専用線を使用してAWSネットワークとオンプレミスネットワークを直接接続する。 | インターネットを経由でのVPNゲートウェイを使用して、IPsec（インターネットプロトコルセキュリティ）に基づく暗号化接続をする。 |
| 接続速度と帯域  | 50 Mbps から 100 Gbps までの速度で高性能な専用線接続で低レイテンシー | インターネットの品質に依存するため、速度が変動する。 |
| 接続の信頼性と可用性  | 高い信頼性と可用性 | AWS Direct Connectほどの信頼性と可用性はない |
| コスト  | 高い | 低い |
| 導入の容易さ  | 時間と初期費用がかかる | 迅速にかつ初期費用ほぼゼロ |

:::note info
IPsec 
データの機密性と認証を提供するプロトコルスイート
:::
:::note info
プロトコルスイート
複数のプロトコルがセットになり、ネットワーク通信全体を実現するためのもの
:::

#### VPC内リソースからS3へのプライベートアクセス

VPC内リソースからAWSサービス（例：S3、SNSなど）やサードパーティのサービスに、プライベートでアクセスしたい場合は`VPCエンドポイント`を使用します。

### VPCエンドポイント
VPCエンドポイントは`ゲートウェイエンドポイント`と`インターフェースエンドポイント(PrivateLink)`の2種類あります。それぞれの違いについて見にいきましょう

:::note info
privateLink
インターフェースエンドポイントを使用して、広範なAWSサービスに対してプライベートアクセスを提供する仕組み
:::

ここで抑えときたいポイント:bulb:
- `ゲートウェイエンドポイント`はAmazon S3とDynamoDB以外に利用できない
- `ゲートウェイエンドポイント`はVPC外（例えばオンプレミス環境）からは直接利用できない

逆に`インターフェースエンドポイント`はこれらの`ゲートウェイエンドポイント`に利用できないことができます。

#### ゲートウェイエンドポイント仕組み

<img src="https://devio2023-media.developers.io/wp-content/uploads/2020/07/039f0e52a70e6b9198b5f65053250de7.png">

1. ゲートウェイエンドポイントをVPCにアタッチする
2. サブネットのルートテーブルにゲートウェイエンドポイント対してのルート追加し指定する(ターゲット)
3. プレフィックスリストを使用してS3やDynamoDBを指定する(送信先)
4. プライベートなアクセスが可能になる 

:::note info
プレフィックスリスト
特定のAWSサービス（S3やDynamoDBなど）に対応するCIDRのリスト
:::
:::note info
CIDR(クラスレスドメイン間ルーティング)
IPアドレスの範囲を効率的に表現する方法
:::

`プレフィックスリスト`はAWS側で管理しており、あらかじめ多くのAWSサービスに対する`CIDR`を管理しています。同一リージョン内で作成された特定のサービスは`プレフィックスリスト`で管理されているそのサービスの`CIDR`内のIPアドレスが割り振られます。よってプレフィックスリストを使用してS3やDynamoDBを送信先として指定することができます。

#### インターフェースエンドポイント仕組み

<img src="https://devio2023-media.developers.io/wp-content/uploads/2020/07/1af74b804c5c88e88d8240033ecc0032-640x454.png">

インターフェースエンドポイントは、AWSのさまざまなサービスに対して、VPC内のElastic Network Interface（ENI）を使用してプライベート接続を提供します。

1. VPC内にインターフェースエンドポイントを作成する。この時、`アクセス対象のサービス`と`サブネット`を指定します。すると自動的にその`サブネット`内にENIが作成される
2. ここで「プライベートDNS」オプションを有効にすること
3. 指定した`サブネット`内で、指定した`アクセス対象のサービス`に対してリクエストが行われた時に、プライベートDNSがサービスのドメイン名を対応するENIのプライベートIPに解決し、ENIへのルーティングが行われる
4. プライベートなアクセスが行える

:::note info
ENI(Elastic Network Interface) 
仮想ネットワークインターフェイスでインスタンスに複数の IP アドレスやセキュリティグループを持たせるために使われる
:::

- プライベートDNS 
通常、VPC内からAWSのサービスにアクセスする場合、そのサービスのドメイン名（例：s3.amazonaws.com）はパブリックDNSサーバーを使用して解決され、パブリックIPアドレスにルーティングされます。この場合、インターネットを経由してアクセスすることになります。しかし、プライベートDNSを有効にすることで、通常のAWSサービスのドメイン名を使ってリクエストを送るだけで、パブリックインターネットではなく、VPC内のプライベートネットワークを介してサービスにアクセスすることが可能になります。

#### オンプレミスからAWSサービスへのプライベートアクセス

・まず最初に大きく分けたアクセスの一つである`VPC内リソースからS3へのプライベートアクセス`では上記であるように、S3向けのインターフェースエンドポイントを作成します。

・そして大きく分けたアクセスの一つである`オンプレミスからVPCへのプライベートアクセス`の内容にあるように`AWS Direct Connectによる専用線接`または`AWS Site-to-Site VPNによるVPN接続`でVPCにアクセスします。この際のポイントとしては、オンプレミスのルートテーブルのターゲットとして作成したインターフェースエンドポイントにルーティングするように設定します。

・あとはVPC内のリソースからAWSサービスにインターフェースエンドポイントを介してプライベートアクセスする流れと同じになります。
***

#### 復習問題

<details open><summary>問題</summary>
EC2インスタンスからDynamoDBへの項目を読み書きしているアプリケーションがあります。アプリケーションをよりセキュアにしたいのでインターネットを介さないようにしたいです。どの方法を使用しますか？
</details>
選択肢

1 : NATゲートウェイのみを利用してセキュアにアクセスする。
2 : VPCゲートウェイエンドポイントを作成してルートテーブルにルートを追加する
3 : VPCゲートウェイエンドポイントを作成する

<details><summary>答え</summary>
2
</details>

<details><summary>理由</summary>
まず、1はインターネットを介すので選択肢から排除できます。
2と3ですが、ゲートウェイエンドポイントはルートテーブルにルートを追加する必要があるので2が正解になります。
</details>

### まとめ

読んでいただきありがとうございました！
これからも自分のペースで記事を更新したり、新たな記事を書いていこうと思うので是非見ていただけたらなと思います！:grin: