AWSで仮想ネットワークを作成しよう

# 

## 1. 導入: オンプレミスからAWSへ

従来、オンプレミス環境でのシステム構築では、ルーターやスイッチ、LANケーブルなどのネットワーク構成要素を物理的に用意することでネットワークを作成していました。しかし、クラウドサービスを利用するAWSの場合、これらの物理的な準備は不要です。その代わりに、Amazon VPC (Virtual Private Cloud) を利用してAWS上に専用の仮想ネットワークを簡単に作成することが可能です。

## 2. Amazon VPCとその特性

VPCは多くの便利な特性を持っていますが、その中でも特筆すべきは、異なるAZ (Availability Zone) を跨いで利用可能であるという点です。この機能により、非常に高い可用性を持つネットワークを作成することができます。ただし、異なるリージョン間でVPCを作成することはできません。そのため、ある特定のリージョンに何らかの問題（例えば災害など）が発生した場合、そのリージョンのVPCは機能しなくなる可能性があります。

しかし、リージョン間でVPCの接続は可能であり、これをVPCピアリングと呼びます。さらに、VPCはオンプレミスのネットワークとも接続可能です。これにより、オンプレミスとクラウドを組み合わせたハイブリッドなシステムの構築が可能となります。これを実現するための手段として、AWS Direct Connect や AWS Virtual Private Network (VPN) があります。通信の品質と安全性の面ではDirect Connectが優れていますが、利用料金や導入の容易さから考えると、VPNが有利となる場合もあります。

## 3. サブネットの大きさとその意味

ネットワークには"大きさ"の概念があり、これはサブネットマスクによって判断します。サブネットマスクは1から32までの数値で表現され、数が小さいほどネットワークは大きく、利用可能なIPアドレスの数が多くなります。サブネットマスクの数値が1つ小さくなると、利用可能なIPアドレスの

数が約2倍になります。

例えば、"10.0.0.0"から始まるネットワークでサブネットマスクの大きさが16であれば、"10.0.0.0/16"と表記します。ただし、VPCが提供するIPアドレスの中には、AWS側で利用されるために予約されているものがあり、ユーザーはそれらを使用することはできません。具体的には、"10.0.0.1"、"10.0.0.2"、"10.0.0.3"のIPアドレスが該当します。

## 4. AWS外のネットワークとVPCを接続する方法

### 4.1 サブネットの作成

AWS外のネットワークとVPCを接続するためには、インターネットが必要となります。VPCをインターネットに接続する前に、まず新しいネットワークをVPC上に作成する必要があります。Webページの公開などに利用するEC2やデータベースであるRDSなどのAWSサービスは、VPC上ではなくサブネット上で動作します。

サブネットの作成には2種類のサブネットを用意します。それぞれインターネットから直接アクセス可能なパブリックサブネットと、インターネットから直接アクセス不可能なプライベートサブネットです。パブリックサブネットにはWebページを公開するAWSサービスであるEC2を配置し、プライベートサブネットには個人情報などを格納するデータベースであるRDSを配置します。パブリックサブネットはインターネットと通信可能なのに対して、プライベートサブネットはパブリックサブネットとのみ通信可能で、インターネットからは直接アクセスできません。

### 4.2 インターネットに接続する

プライベートサブネットとパブリックサブネットを作成したら、次はVPCをインターネットに接続します。AWSで作成したネットワークをインターネットに接続するための代表的なAWSサービスを以下に紹介します。

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

インターネットゲートウェイは、AWS内のネットワークと公開インターネットとをつなぐためのルーティングデバイスです。これをVPCにアタッチすることで、VPC内のリソースがインターネット上のリソースと直接通信することが可能となります。しかし、プライベートサブネット内のリソース（例えば、EC2インスタンス）がインターネットにアクセスするには、それらにパブリックIPアドレスを割り当てるか、NATデバイスを経由する必要があります。

#### 4.2.2 NATゲートウェイ
一方、NATゲートウェイは、プライベートサブネット内のリソースがインターネットにアウトバウンド接続（例えば、ソフトウェアアップデートをダウンロードする）を行うのを助けるものです。しかし、インターネットからのインバウンド接続を許可しないため、リソースの安全性が向上します。

### 4.3 ネットワークを介した攻撃への対策

VPCをインターネットに接続すると、全世界のネットワークからVPCにアクセスが可能となります。そのため、VPC上に作成したシステムに対して十分なセキュリティ対策を施さないと、外部からさまざまな攻撃を受ける可能性があります。不正アクセスを防ぐためには、ネットワーク上の通信を制御し、必要最低限の通信のみを許可するようにする必要があります。AWSでネットワーク上の通信を制御する際に使用する代表的なAWSサービスを以下に紹介します。

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

セキュリティグループは、EC2やRDSのようなAWSサービスに対して通信を制御できるAWSサービスです。セキュリティグループでは、通信先から通信元に対する通信（インバウンドトラフィック）と、通信元から通信先に対する通信（アウトバウンドトラフィック）の制御について、拒否は設定できず、許可のみを設定できます。また、セキュリティグループは「ステートフル」であり、送信したリクエストは自動的にレスポンスを受け取ることができます。

#### 4.3.2 ネットワークACL
ネットワークACLは、サブネットレベルでのトラフィック制御を提供します。セキュリティグループとは異なり、ネットワークACLは「ステートレス」であり、受信と送信のルールがそれぞれ別々に適用されます。また、許可ルールと拒否ルールの両方を設定することができます。
#### 4.3.3 セキュリティグループとネットワークACLの違い
セキュリティグループ（SG）はステートフルなトラフィック制御を提供し、ネットワークACL（NACL）はステートレスなトラフィック制御を提供します。

##### ステートフルとステートレスの違い
あるEC2インスタンスが外部サービス（例えば、インターネット上のWebサーバー）にリクエストを送信する場合を考えてみましょう。

###### ステートフルなセキュリティグループ：

インバウンドルールが設定されていなくても、EC2インスタンスからのアウトバウンドリクエストが許可されていれば、その応答（レスポンス）は自動的にインスタンスに戻ることができます。これはセキュリティグループが「ステートフル」であるためで、つまり、リクエストの「状態」を追跡して、それに対するレスポンスを適切に処理することができます。

###### ステートレスなネットワークACL：
一方、ネットワークACLは「ステートレス」です。これは、送信（アウトバウンド）と受信（インバウンド）のトラフィックが独立して評価されることを意味します。したがって、あるトラフィックがアウトバウンドルールによって許可されても、そのレスポンスがインバウンドルールによって許可されていなければ、レスポンスはブロックされます。

#### サブネットレベルのトラフィック制御
ネットワークACLはサブネットレベルでのトラフィック制御を提供します。これは、特定のサブネット内のすべてのリソースに適用されるルールを定義できることを意味します。一方、セキュリティグループはインスタンスレベルでトラフィックを制御します。

例えば、特定のサブネット内のすべてのインスタンスが特定のIPアドレスからのトラフィックを拒否するように設定する場合、そのルールをネットワークACLに追加できます。これに対して、セキュリティグループを使用して特定のインスタンスのみにトラフィック制御ルールを適用することができます。

## 5. まとめ

本記事では、AWSを使って仮想ネットワーク（VPC）を作成する方法を解説しました。また、VPCの機能と特徴、サブネットの設定方法、インターネットとの接続方法、そしてセキュリティ対策についても触れました。AWSを用いて仮想ネットワークを作成し、適切なセキュリティ対策を施すことで、安全なシステム環境を構築することが

可能になります。