VPC基礎・接続性ガイド - AWS ネットワーキングの基盤理解
Amazon Virtual Private Cloud(VPC)は、AWSクラウド内に論理的に分離されたネットワーク環境を構築するための基盤サービスです。企業のオンプレミスデータセンターと同様の制御レベルを提供し、IPアドレス範囲、サブネット、ルートテーブル、ネットワークゲートウェイを完全に制御できます。
VPCの基本概念
VPCとは何か
VPCは、AWSアカウント内に作成される仮想ネットワーク環境です。この環境では、従来のネットワークと同じ概念を使用しながら、クラウドの拡張性とメリットを活用できます。
主な特徴
- 論理的分離: 他のAWSアカウントから完全に分離された環境
- 完全制御: IPアドレス範囲、サブネット、ルーティング、セキュリティを自由に設定
- スケーラビリティ: 必要に応じてリソースを動的に拡張・縮小
- セキュリティ: 複数層のセキュリティ機能を内蔵
CIDR(Classless Inter-Domain Routing)
VPCを作成する際は、IPアドレス範囲をCIDR表記で指定します。この選択は後から変更が困難なため、将来の拡張を考慮した設計が重要です。
CIDR設計のベストプラクティス
本番環境VPC: 10.0.0.0/16 (65,536 個のIPアドレス)
開発環境VPC: 10.1.0.0/16 (65,536 個のIPアドレス)
テスト環境VPC: 10.2.0.0/16 (65,536 個のIPアドレス)
大企業では、より大きな範囲を確保することが一般的です。
企業全体: 10.0.0.0/8 (16,777,216 個のIPアドレス)
リージョン1: 10.0.0.0/12 (1,048,576 個のIPアドレス)
リージョン2: 10.16.0.0/12 (1,048,576 個のIPアドレス)
サブネットの設計と配置
サブネットの種類
サブネットは、VPC内をさらに細分化したネットワークセグメントです。アベイラビリティゾーン(AZ)ごとに作成し、用途に応じてパブリックとプライベートに分類します。
パブリックサブネット
パブリックサブネットは、インターネットから直接アクセス可能なリソースを配置するために使用されます。
特徴
- Internet Gatewayへのルートが設定されている
- インスタンスにパブリックIPアドレスが自動割り当て可能
- ロードバランサー、NATゲートウェイ、Bastion ホストの配置に適用
典型的な使用例
- Application Load Balancer(ALB)
- Network Load Balancer(NLB)
- NAT Gateway
- Bastion Host(踏み台サーバー)
プライベートサブネット
プライベートサブネットは、インターネットから直接アクセスできないリソースを配置し、セキュリティを強化します。
特徴
- Internet Gatewayへの直接ルートなし
- NAT Gateway/Instanceを経由してアウトバウンド通信可能
- データベース、アプリケーションサーバーの配置に最適
典型的な使用例
- EC2アプリケーションサーバー
- RDSデータベース
- ElastiCache
- 内部API
Internet Gatewayとルーティング
Internet Gateway(IGW)
Internet Gatewayは、VPCとインターネット間の双方向通信を可能にするAWS管理サービスです。
重要な特徴
- 高可用性: 自動的に冗長化されており、単一障害点にならない
- スケーラビリティ: 帯域幅制限なし
- 1対1の関係: 1つのVPCに対して1つのIGWのみ
- 無料: データ転送料金以外の追加コストなし
ルートテーブルの設定
ルートテーブルは、ネットワークトラフィックの経路を制御します。サブネットごとに異なるルートテーブルを関連付けることで、細かな制御が可能です。
パブリックサブネット用ルートテーブル
送信先 ターゲット
10.0.0.0/16 Local
0.0.0.0/0 igw-xxxxxxxxx
プライベートサブネット用ルートテーブル
送信先 ターゲット
10.0.0.0/16 Local
0.0.0.0/0 nat-xxxxxxxxx
NAT Gateway vs NAT Instance
プライベートサブネット内のリソースがインターネットにアクセスする際は、NAT(Network Address Translation)デバイスが必要です。AWSでは、NAT GatewayとNAT Instanceの2つの選択肢があります。
NAT Gateway(推奨)
NAT Gatewayは、AWS完全管理型のNATサービスです。高い可用性とパフォーマンスを提供します。
主な利点
- フルマネージド: パッチ適用、メンテナンス不要
- 高パフォーマンス: 最大45Gbpsの帯域幅
- 高可用性: AZ内で自動的に冗長化
- スケーラビリティ: 自動的にスケールアップ
設定例
# NAT Gateway作成
aws ec2 create-nat-gateway \
--subnet-id subnet-12345678 \
--allocation-id eipalloc-12345678
NAT Instance(レガシー)
NAT InstanceはEC2インスタンスを使用したNATソリューションです。コスト最適化や特別な要件がある場合に選択されることがあります。
主な特徴
- コスト効率: 小規模環境では低コスト
- 柔軟性: カスタム設定やソフトウェアインストール可能
- セキュリティグループ: セキュリティグループを直接関連付け可能
- 管理負荷: パッチ適用、スケーリング、監視が必要
選択基準
要件 | NAT Gateway | NAT Instance |
---|---|---|
本番環境 | ◎ 推奨 | △ 要検討 |
開発・テスト | ○ 適用可 | ◎ コスト効率 |
高可用性必須 | ◎ 自動冗長化 | △ 手動設定必要 |
カスタム機能 | × 不可 | ◎ 柔軟対応 |
セキュリティグループ | × 直接関連付け不可 | ◎ 可能 |
運用負荷 | ◎ ゼロ | △ 高い |
セキュリティグループと Network ACL
AWSでは、EC2インスタンスレベルとサブネットレベルの2段階でネットワークセキュリティを制御できます。
セキュリティグループ(インスタンスレベル)
セキュリティグループは、EC2インスタンスに関連付けられる仮想ファイアウォールです。
重要な特徴
- ステートフル: 許可された通信の戻りトラフィックは自動的に許可
- デフォルト拒否: 明示的に許可されていない通信はすべて拒否
- インバウンド/アウトバウンド: それぞれ独立して制御
- 動的変更: インスタンス停止不要で即座に適用
設定例
# Webサーバー用セキュリティグループ
aws ec2 create-security-group \
--group-name web-servers \
--description "Security group for web servers"
# HTTP/HTTPSアクセス許可
aws ec2 authorize-security-group-ingress \
--group-id sg-12345678 \
--protocol tcp \
--port 80 \
--cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress \
--group-id sg-12345678 \
--protocol tcp \
--port 443 \
--cidr 0.0.0.0/0
Network ACL(サブネットレベル)
Network ACLは、サブネットレベルでトラフィックを制御するオプションの追加セキュリティ層です。
重要な特徴
- ステートレス: 戻りトラフィックも明示的に許可が必要
- 番号ベース: ルール番号の小さい順に評価(1-32766)
- サブネット関連付け: サブネット内のすべてのインスタンスに適用
- デフォルト許可: デフォルトNACLはすべての通信を許可
Network ACL設定例
ルール番号 タイプ プロトコル ポート範囲 送信元/送信先 許可/拒否
100 HTTP TCP 80 0.0.0.0/0 許可
110 HTTPS TCP 443 0.0.0.0/0 許可
120 SSH TCP 22 10.0.0.0/8 許可
32767 ALL ALL ALL 0.0.0.0/0 拒否
セキュリティ層の使い分け
ベストプラクティス
- セキュリティグループ: 日常的なアクセス制御に使用
- Network ACL: 追加のセキュリティ層として、特定要件がある場合に使用
- 最小権限の原則: 必要最小限のアクセスのみ許可
- 定期的な見直し: 不要なルールの削除と設定の最適化
VPC Flow Logs による通信分析
VPC Flow Logsは、VPC内のネットワークインターフェースで送受信されるIPトラフィックに関する情報をキャプチャする機能です。
Flow Logsの活用場面
セキュリティ分析
- 異常なトラフィックパターンの検出
- セキュリティグループ設定の妥当性確認
- 潜在的なセキュリティ脅威の特定
ネットワークトラブルシューティング
- 接続問題の原因特定
- パフォーマンス問題の分析
- ルーティング設定の検証
コンプライアンス対応
- 通信ログの保管要件への対応
- 監査対応のためのトラフィック記録
- データ所在地の確認
Flow Logs設定例
# VPCレベルでFlow Logs有効化
aws ec2 create-flow-logs \
--resource-type VPC \
--resource-ids vpc-12345678 \
--traffic-type ALL \
--log-destination-type cloud-watch-logs \
--log-group-name VPCFlowLogs
# サブネットレベルでFlow Logs有効化
aws ec2 create-flow-logs \
--resource-type Subnet \
--resource-ids subnet-12345678 \
--traffic-type REJECT \
--log-destination-type s3 \
--log-destination arn:aws:s3:::my-flow-logs-bucket
Flow Logsデータ分析
Flow Logsの典型的なレコード形式です。
version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes windowstart windowend action flowlogstatus
2 123456789012 eni-1235b8ca 172.31.9.69 172.31.9.12 49761 22 6 1 40 1418530010 1418530070 ACCEPT OK
重要フィールド
- srcaddr/dstaddr: 送信元/送信先IPアドレス
- srcport/dstport: 送信元/送信先ポート番号
- protocol: プロトコル番号(6=TCP、17=UDP)
- action: ACCEPT(許可)またはREJECT(拒否)
実践的な VPC 設計例
3-Tier アーキテクチャ
典型的なWebアプリケーション向けの3層アーキテクチャをVPCで実装する例です。
マルチAZ構成
高可用性を実現するため、複数のアベイラビリティゾーンにリソースを分散配置します。
推奨構成
VPC: 10.0.0.0/16
AZ-1a:
- パブリックサブネット: 10.0.1.0/24
- プライベートサブネット: 10.0.11.0/24
- データベースサブネット: 10.0.21.0/24
AZ-1b:
- パブリックサブネット: 10.0.2.0/24
- プライベートサブネット: 10.0.12.0/24
- データベースサブネット: 10.0.22.0/24
AZ-1c:
- パブリックサブネット: 10.0.3.0/24
- プライベートサブネット: 10.0.13.0/24
- データベースサブネット: 10.0.23.0/24
トラブルシューティングとベストプラクティス
よくある問題と解決方法
問題1: インスタンスにインターネットからアクセスできない
解決ステップ:
- セキュリティグループの設定確認
- Network ACLの設定確認
- ルートテーブルの設定確認
- Internet Gatewayの関連付け確認
- パブリックIPアドレスの割り当て確認
問題2: プライベートインスタンスからインターネットにアクセスできない
解決ステップ:
- NAT Gateway/Instanceの動作状況確認
- ルートテーブルのNATデバイスへのルート確認
- NAT Gateway/Instanceのセキュリティグループ確認
- NAT Gateway/InstanceのElastic IP確認
設計時のベストプラクティス
CIDR設計
- 将来の拡張を考慮した十分なアドレス空間の確保
- オンプレミスネットワークとの重複回避
- 環境別(本番、開発、テスト)での一意性確保
セキュリティ
- 最小権限の原則に基づくアクセス制御
- 多層防御アプローチの実装
- 定期的なセキュリティ設定の見直し
高可用性
- 複数AZでのリソース分散配置
- 単一障害点の排除
- 自動復旧メカニズムの実装
運用性
- 分かりやすい命名規則の採用
- タグを活用したリソース管理
- 包括的な監視とアラート設定
VPCは、AWSネットワーキングの基盤となる重要なサービスです。これらの基本概念をしっかりと理解することで、より高度なネットワーキングサービスの活用や、複雑なアーキテクチャの設計が可能になります。