今回は、AWSにおいて安全なネットワーク設計を行いポイントについてお話ししたいと思います。
AWSを使用する際に、VPCやSubnet、RouterTableなどのネットワークについては意識していますでしょうか
AWSアカウントを作成した際に最初からあるデフォルトのVPCやSubnetをそのまま何も使用していますか?
下記のような場合にはそれでもいいと思います
- 個人で趣味のため使用している
- EC2インスタンス数台のみの使用
- 多少停止しても問題ない
- 重要な情報は保存していない
逆に下記のような場合には、ネットワークの設計についても考え始める必要があると思います。
- システムの規模がある程度大きくなってきた
- サービス停止しない安定したシステムを作る必要がある
- クレジットカード情報や個人情報など重要な情報を保存している
三階層のネットワークに分割する

AWSだけではなく、一般的にデータベースがあるWebシステムの場合の標準的なネットワークの設計は三階層のネットワークモデルだと思います。AWSでは下記の三つのサービスをそれぞれの三階層に割り当てるのがよいと思います。
説明 | 配置するAWS リソース | デフォルトルート |
外部からアクセス可能なネットワーク | ELB (ロードバランサー) | Internet Gateway |
外部からアクセスできないが内部から外部にはできるネットワーク | EC2 (サーバー) | NAT gateway |
内部アクセスのみしかできないネットワーク | RDS (データベース) | なし |
まず、ELBは外部からのリクエストを受け付ける役割のため、Internet Gatewayをデフォルトルートに設定されたネットワークに配置する必要があります。
次に、ELBを中継してリクエストを受け取るEC2サーバは外部と直接通信する必要はありませんので、デフォルトルートにNAT Gatewayを持つネットワークに配置します。こうすることで、外部からEC2には直接通信できませんが、OSパッケージのアップデートや、S3、SESなど他のAWSサービスと連携などEC2から外部へのアクセスは可能になります。
最後に、EC2からの通信のみを受ければよく、またクレジットカード情報や個人情報など重要な情報を保存することが多いRDSは外部との直接通信は一切遮断されたネットワークに配置することで安全にします。
各階層に複数のAvailability zoneを使う

AWSでは、Availability zoneという概念があり、東京などの1つのリージョンの中のさらに物理的に離れたサーバの配置場所のことです。単体のEC2インスタンスしか使わなかった場合、ハードウェア故障やその他のトラブルによっていつでも止まってしまう可能性があります。さらに1つのAvailability zoneしか使わなかった場合でも、止まってしまう可能性がありますので、いつ止まっても良いように、複数のAvailability zoneにEC2インスタンスを配置して冗長化を行う必要があります。
AWSでは、VPC内に作成するSubnetにAvailability zoneと紐づける必要があります
実際のAWSでの構築ステップ
今回はネットワーク設計の基本的な考え方のみを説明しましたが、実際のAWSでの構築のステップについてはまた別の記事で詳細を記載したいと思います。