AWS - VPC
Virtual Private Cloudについて学びましょう!
AI生成コンテンツは不正確または誤解を招く可能性があります。
理論
VPC(仮想プライベートクラウド)
Virtual Private Cloudの略で、AWS上で論理的に独立した空間を提供してリソースを実行できるようにします。
VPCの種類
AWSにはリージョンごとにDefault VPCとCustom VPCが存在します。 Default VPCは各リージョンにデフォルトで1つずつ作成されており、 Custom VPCはリージョンごとに最大5つまで作成できます。
Subnet(サブネット)
ネットワーク領域を分割したネットワークです。 クラウド環境のVPCでもサブネットを通じてネットワークを分離して分割できます。
サブネットで予約されたIPアドレス
サブネットに割り当てたIP帯域が10.0.0.0/24の場合、10.0.0.0~10.0.0.255のうち
| アドレス | 説明 |
|---|---|
| 10.0.0.0 | ネットワークアドレス |
| 10.0.0.1 | AWS VPC仮想ルーターアドレス |
| 10.0.0.2 | AWS DNSサーバーアドレス |
| 10.0.0.3 | 将来の新機能のために予約 |
| 10.0.0.255 | ネットワークブロードキャストアドレス |
また、AWS SubnetにはPublic SubnetとPrivate Subnetが存在します。 Public Subnetは外部インターネットと直接通信できるネットワークであり、 Private Subnetは外部インターネットと直接通信できない閉じたネットワークです。*ただしPrivateサブネットの場合もNATゲートウェイがあれば外部との通信が可能です。
Security GroupとACL
インスタンスレベルでのセキュリティ技術はSecurity Groupです。 サブネットで使用するセキュリティ技術も存在し、それがAccess Control List(ACL)です。
実習 - Public Subnet VPC構成
実習ステップ
| Public Subnet VPC作成 | 検証 |
|---|---|
| VPC作成 | EC2インスタンス作成 |
| パブリックサブネット作成 | EC2インスタンスアクセス後、通信確認 |
| インターネットゲートウェイ作成およびVPC接続 | |
| パブリックルーティングテーブル作成およびサブネット接続 | |
| パブリックルーティングテーブル経路追加 |
VPC作成
- VPC Consoleにアクセス -> VPC

- 名前:CloudPeter-VPC
IPv4 CIDRブロック:10.0.0.0/16

- 作成確認
*後でデフォルトVPCとユーザーVPCを区別する際、Name Tagの有無を確認できます
Public Subnet作成
- VPC Consoleにアクセス -> サブネット

- VPC ID:作成したVPCを選択(CloudPeter-VPC)
名前タグ:CloudPeter-Public-SN
アベイラビリティーゾーン:ap-northeast-2a
IPv4 CIDRブロック:10.0.0.0/24

- 作成確認

インターネットゲートウェイ作成およびVPC接続
外部インターネットとの通信のためにIGWを作成し、VPCと接続します。
- VPC Consoleにアクセス -> インターネットゲートウェイ

- 名前タグ:CloudPeter-IGW

- IGWとVPCを接続
使用可能なVPC:作成したVPCを選択(CloudPeter-VPC)

- 接続確認

ここまで進めると、インターネットと通信するためのIGWがVPCと接続され、サブネットも作成された状態です。 ただし、まだ外部インターネットへのアクセスは不可能です。VPCの仮想ルーティングテーブルに外部インターネットへのルーティング経路がないためです。
パブリックルーティングテーブル作成およびサブネット接続
- VPC Consoleにアクセス -> ルーティングテーブル

- 名前タグ:CloudPeter-Public-RT
VPC:作成したVPCを選択(CloudPeter-VPC)

- 作成確認およびサブネット接続
サブネット接続をクリック
サブネット接続の編集をクリック
以前作成したサブネットを選択
パブリックルーティングテーブル経路追加
- VPC Console -> ルーティングテーブル
- CloudPeter-Public-RTを選択
- ルーティングタブに移動

- 宛先:0.0.0.0/0
ターゲット:インターネットゲートウェイ -> igw-xxxを選択

- 適用確認

すべての設定が完了しました。 実際に通信が可能か検証しましょう。
EC2インスタンス作成
通信確認のためにEC2インスタンスを作成します。
-
EC2 Consoleにアクセス -> インスタンス
-
インスタンスの起動をクリック

-
名前:Public-EC2 OSイメージ:Amazon Machine Image(AMI)、64bit インスタンスタイプ:T2.micro キーペア:いつも使用しているもの
-
ネットワーク設定 -> 編集

-
VPC:作成したVPCを選択(CloudPeter-VPC) サブネット:作成したSubnetを選択(CloudPeter-Public-SN) パブリックIP自動割り当て:有効化

-
セキュリティグループ:default

-
作成確認

EC2インスタンスアクセス後、通信確認
パブリックIPでSSH接続後
ping google.com
pingが通れば成功!
実習 - Private Subnet VPC構成
実習ステップ
| Private Subnet追加 | 検証 |
|---|---|
| プライベートサブネット作成 | EC2インスタンス作成 |
| NATゲートウェイ作成 | EC2インスタンスアクセス後、通信確認 |
| プライベートルーティングテーブル作成およびサブネット接続 | パブリックサブネットとプライベートサブネットの通信フロー |
| プライベートルーティングテーブル経路追加 |
Private Subnet作成
-
VPC Consoleにアクセス -> サブネット
-
サブネット作成 VPC ID:作成したVPCを選択(CloudPeter-VPC) 名前タグ:CloudPeter-Private-SN アベイラビリティーゾーン設定:ap-northeast-2c IPv4 CIDRブロック:10.0.1.0/24

-
作成確認

NATゲートウェイ作成
-
VPC Consoleにアクセス -> NATゲートウェイ

-
名前:CloudPeter-NAT サブネット:パブリックサブネットを選択(CloudPeter-Public-SN) Elastic IP割り当てをクリック!

-
作成確認

プライベートルーティングテーブル作成およびサブネット接続
-
VPC Consoleにアクセス -> ルーティングテーブル
-
名前タグ:CloudPeter-Private-RT VPC:作成したVPCを選択(CloudPeter-VPC)

-
プライベートルーティングテーブルを選択
-
ルーティング編集をクリック

-
プライベートサブネット(CloudPeter-Private-SN)を選択

プライベートルーティングテーブル経路追加
-
VPC Consoleにアクセス -> ルーティングテーブル
-
プライベートルーティングテーブルを選択
-
ルーティング編集をクリック
以下のように編集(NATゲートウェイを選択)

EC2インスタンス作成
-
EC2 Consoleにアクセス -> インスタンス
-
名前:Private-EC2 ネットワーク:作成したVPCを選択(CloudPeter-VPC) サブネット:作成したプライベートサブネット(CloudPeter-Private-SN)
-
ネットワーク設定

-
高度な詳細

#!/bin/bash
(
echo "qwe123"
echo "qwe123"
) | passwd --stdin root
sed -i "s/^PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config
service sshd restart上記のユーザーデータはパスワード方式でSSHにアクセスできるようにする設定です。 EC2インスタンスが起動時に読み込んで適用します。
- 作成確認

Private-EC2のネットワークを確認すると、パブリックIPが付与されていないことが確認できます。
EC2インスタンスアクセス後、通信確認
-
Public-EC2のIPでSSH接続
-
SSH接続した状態でPrivate-EC2のプライベートIPv4アドレスでSSH接続
-
NATを利用して
ping google.comにpingが通るか確認
*NATの場合、内部から外部への通信は可能ですが、外部からPrivate Subnetへのアクセスは不可能です
リソース削除
- EC2インスタンスの終了(EC2 -> インスタンス -> インスタンス選択 -> アクション -> インスタンスの状態 -> 終了)
- NATゲートウェイの削除(VPC -> NATゲートウェイ -> アクション -> NATゲートウェイの削除) ⚠️ NATゲートウェイが削除されるまで待機
- Elastic IPの削除(VPC -> Elastic IP -> Actions -> Elastic IPアドレスのリリース)
- VPCの削除(VPC -> VPC -> アクション -> VPCの削除)