初学者向けのAWS基本設計と構築、EC2インスタンスによるインターネット接続確認

## はじめに
今回は、AWSのVPC (Virtual Private Cloud) を使用して仮想ネットワークを構築し、セキュリティ設定について解説します。VPCはAWS上でプライベートなネットワーク環境を提供し、オンプレミスのネットワークに近い形でインフラを構築できます。

VPCを利用することで、ネットワークの分離やセキュリティの制御が可能になり、セキュアなクラウド環境の構築が重要なポイントです。

この記事では、AWSのバージニア北部リージョン（us-east-1）を使用し、VPCを構築します。また、パブリックサブネットとプライベートサブネットの設定、セキュリティグループ、NATゲートウェイを利用したセキュリティ設定についても説明していきます。

## 前提条件

:::note warn
**以下の条件を満たしていることが前提です。**
・AWSアカウントを持っていること
・VPC、サブネット、セキュリティグループなど基本的なネットワーク知識を理解していること
・バージニア北部リージョン（us-east-1）で検証を行うこと
:::

## 知識整理
本記事で扱う主な知識は以下の通りです。

**VPC (Virtual Private Cloud)**
AWS VPCはクラウド内で隔離されたネットワーク環境を提供します。独自のIPアドレス範囲を設定し、サブネットを作成してネットワーク内のリソースを制御できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/08084b48-f640-d600-cdfd-3a1bdff463f2.png)

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

**サブネット**
VPC内で作成されるネットワークの一部で、パブリックサブネットとプライベートサブネットに分けてリソースを配置します。パブリックサブネットはインターネットアクセスが可能なリソース向けで、プライベートサブネットは外部に公開されないリソースを配置します。

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/configure-subnets.html

**インターネットゲートウェイ**
インターネットゲートウェイは、VPCをインターネットに接続するためのゲートウェイです。パブリックサブネット内のリソースにインターネットアクセスを提供します。

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Internet_Gateway.html

**NATゲートウェイ**
NATゲートウェイは、プライベートサブネット内のリソースがインターネットに接続できるようにするゲートウェイです。セキュリティの観点から、プライベートサブネット内のリソースから外部アクセスを制限しつつ、必要な通信のみを許可します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/590de9cd-b44d-c053-bd55-91b0428d7e63.png)
引用画像：https://blog.jicoman.info/2021/05/how-to-analyze-cost-of-nat-gateway-using-vpc-flowlogs/

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-nat-gateway.html

**セキュリティグループ**
セキュリティグループは、各インスタンスに対する仮想ファイアウォールの役割を果たします。許可する通信ルールを定義し、特定の通信のみを許可します。

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

## 構築手順
### ステップ1: VPCの作成
まず、AWS Management Consoleにログインし、リージョンを バージニア北部（us-east-1） に設定します。

```
VPCサービスを選択し、VPCを作成をクリックします。
VPC名: Test-VPC
CIDRブロック: 10.0.0.0/16
IPv6 CIDRブロックは無効のままでOK。
タグを追加: Name = Test-VPC
```

設定を確認し、「VPCを作成」をクリックしてVPCを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/1ef834ca-5fce-b736-20fe-248edecdb627.png)

補足: VPCサービス画面から一括で作成することも可能です。今回は一括作成機能を使用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/89eb234f-aacd-8c19-d412-731332e3fbfc.png)


### ステップ2: サブネットの作成
サブネットの作成を選択し、以下の設定でサブネットを作成します。

```
パブリックサブネット1 (us-east-1a):
サブネット名: Test-VPC-subnet-public1-us-east-1a
CIDRブロック: 10.0.0.0/20
プライベートサブネット1 (us-east-1b):
サブネット名: Test-VPC-subnet-private1-us-east-1a
CIDRブロック: 10.0.128.0/20
```

各サブネットの作成が完了したら、サブネットの一覧で確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/9b2eb3d6-a99f-290d-23c0-7cf839a48096.png)

### ステップ3: インターネットゲートウェイの作成とアタッチ
次に、インターネットゲートウェイを作成し、VPCにアタッチします。

インターネットゲートウェイの作成 を選択し、名前を「Test-VPC-igw」に設定し、作成したインターネットゲートウェイを Test-VPC にアタッチします。

```
VPC名: Test-VPC
```

作成したVPCにアタッチされていることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/8eaaca0d-ee6a-b4b2-50f7-76ce14d6211c.png)


### ステップ4: ルートテーブルの作成と設定
ルートテーブルを作成し、VPCに関連付けます。

```
ルートテーブル名: Test-VPC-rtb-public
VPC名: Test-VPC
```

ルートの編集でインターネットゲートウェイへのルートを追加します。

```
送信先: 0.0.0.0/0
ターゲット: Test-Internet-Gateway
```

サブネット関連付けで、パブリックサブネット (Public-Subnet-1) を選択して関連付けを行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/cc81f404-1ace-2c66-7628-965772bb2822.png)


### ステップ5: NATゲートウェイの作成
NATゲートウェイを作成します。

```
サブネット: Public-Subnet-1
Elastic IP: 新しいElastic IPを割り当てます。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/258c7df3-b60f-490c-d696-92ac610a904a.png)

プライベートサブネット (Private-Subnet-1) 用にルートテーブルを作成し、NATゲートウェイへのルートを追加します。

```
送信先: 0.0.0.0/0
ターゲット: NATゲートウェイ
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/6f0139cb-da32-f813-37bf-674b35a3f74f.png)


### ステップ6: セキュリティグループの設定
パブリックサブネット用のEC2インスタンスのセキュリティグループを作成し、名前をPublic-SGとします。

```
インバウンドルール: SSH (22番ポート) を自分のIPアドレスから許可。
アウトバウンドルール: 全トラフィックを許可。
```

プライベートサブネット用のEC2インスタンスのセキュリティグループを作成します。

```
インバウンドルール: 必要なポートだけを許可（例: データベース通信ポートなど）。
アウトバウンドルール: 全トラフィックを許可。
```

### ステップ7: EC2インスタンスの作成とテスト
最後に、EC2インスタンスを作成し、それぞれのサブネットにデプロイします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/5553b6d9-67aa-f6db-dc71-4d11810e65e5.png)

プライベートサブネットにEC2インスタンスを作成し、NATゲートウェイ経由でインターネット接続を確認します。

## 検証確認
パブリックサブネットのEC2インスタンスにSSHでアクセスできることを確認します。

SSH接続する際には、事前に作成しておいたpemキーを使いec2-userとしてログインしていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d99bc9a7-8c63-ac94-538c-b118b679e88d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/3fa648fd-85ca-feee-4bad-9b5e4c979eb1.png)



プライベートサブネットのEC2インスタンスがNATゲートウェイを経由してインターネットに接続できることを確認します。

プライベートサブネットのEC2インスタンスへのSSH接続は、パブリックサブネット内のEC2インスタンスを経由してSSH接続を実施していきます。

```
scp -i ご自身のpemキーのパス先を指定 ご自身のpemキーのパス先を指定 ec2-user@ec2-3-86-109-85.compute-1.amazonaws.com:~
```

必要に応じて上記のコマンドで、事前に作成したpemキーをパブリックサブネットのEC2インスタンスに配置してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/b80523b4-b8c5-2c97-2e2b-a5af5e4a1688.png)


セキュリティグループの設定が正しく機能しているかを確認します。ここでは、pingによる接続確認とcurlによるウェブアクセス確認をしていきます。
```
ping 8.8.8.8
curl http://www.google.com
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/6265b22c-c5c3-d676-e79e-e7713daebfa6.png)

## まとめ
AWS VPCを使用すると、クラウド上でセキュアかつ柔軟なネットワークを構築できます。今回の検証では、バージニア北部リージョンでVPCを作成し、パブリック/プライベートサブネット、インターネットゲートウェイ、NATゲートウェイを使ってセキュアな環境を構築しました。

セキュリティグループの設定により、インターネットアクセスや内部通信の制御も容易です。

この構成は、様々なアプリケーションのネットワーク要件を満たす柔軟な基盤となるため、実践的なAWS環境での利用が期待できます。

## 参考文献
https://qiita.com/takayuki-miura0203/items/bb44113eefa65a8dc853

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