AWS Cloud Quest Security 学習記録 Day4: Amazon Virtual Private Cloud (VPC)
はじめに
AWS Security Specialty取得を目指すAWS Cloud Quest学習の4日目として、ネットワークセキュリティの基盤となるAmazon Virtual Private Cloud (VPC)について学習しました。VPCは、AWSクラウド内で論理的に分離されたプライベートネットワーク環境を構築し、セキュアなアプリケーション運用を実現するための重要なサービスです。
本日学習した内容:
- Amazon VPC概要と基本概念
- インターネット接続性とネットワーク設計
- ネットワークアクセス制御とセキュリティグループ
- セキュリティアーキテクチャのベストプラクティス
Amazon VPC 概要
基本概念
Amazon Virtual Private Cloud (VPC)は、AWSクラウド内のプライベートクラウドとして機能し、以下の特徴を持ちます:
- 論理的に分離されたAWSクラウドセクションをプロビジョニング
- 定義した仮想ネットワーク内でAWSリソースを起動
- AWSアカウント専用の仮想ネットワーク
- 各リージョンに事前設定されたデフォルトVPCが提供
VPCの主要メリット
1. Simple(シンプル)
- AWS Management Consoleを使用した迅速で簡単なVPC作成
- セットアップと管理の時間を短縮
- アプリケーション構築に集中できる環境
2. Customizable(カスタマイズ可能)
パブリックサブネット:
- Webサーバー用途
- インターネットアクセスが必要なリソース
プライベートサブネット:
- バックエンドシステム(データベース、アプリケーションサーバー)
- インターネットアクセス不要なリソース
ネットワーク拡張:
- 企業ネットワークとの接続によるデータセンターの延長
- 他のVPCとの接続
3. Secure(セキュア)
多層セキュリティ機能:
- Network Access Control Lists (NACLs):サブネットレベルの制御
- Security Groups:インスタンスレベルの仮想ファイアウォール
- VPC内限定Amazon S3アクセス:VPC内インスタンスのみアクセス可能なS3設定
VPCの基本構成要素
IP アドレッシングとCIDR
CIDR(Classless Inter-Domain Routing)ブロック
VPC作成時には、プライベートIPアドレスの範囲をCIDR表記で指定します:
許可されるCIDRブロックサイズ:
- 最小:/28(16個のIPアドレス)
- 最大:/16(65,536個のIPアドレス)
CIDR表記の例:
10.0.0.0/16
バイナリ表記での理解:
10.0.0.0/16 = 00001010 00000000 00000000 00000000
←─ 16ビット固定 ─→ ←─ 16ビット可変 ─→
- 固定部分(16ビット):ネットワーク部分
- 可変部分(16ビット):ホスト部分(65,536個のIPアドレス)
特別なCIDR:
- 0.0.0.0/0:すべてのIPアドレス(インターネット全体)
IP アドレスの種類
プライベートIPアドレス:
- VPC内のローカルアドレス
- インターネット経由では到達不可
- VPC内インスタンス間の通信に使用
パブリックIPアドレス:
- グローバルに一意なIPv4アドレス
- インターネット経由でのアクセスに必要
- Elastic IP:静的(変更されない)パブリックIPアドレス
IPv6アドレス:
- パブリックアドレス
- インターネット経由で到達可能
サブネットとAvailability Zone
サブネットの特徴
- VPCのIPアドレス範囲のパーティション
- 単一のAvailability Zone内に完全に配置
- 複数のAZにサブネットを配置することで耐障害性とアプリケーションの高可用性を実現
サブネット設計例
VPC: 10.0.0.0/16 (65,536個のIPアドレス)
├── サブネット1: 10.0.10.0/24 (251個のIPアドレス) - AZ-A
├── サブネット2: 10.0.20.0/24 (251個のIPアドレス) - AZ-B
└── サブネット3: 10.0.30.0/24 (251個のIPアドレス) - AZ-C
重要な制約:
- AWS予約IPアドレス:各サブネットで5個のIPアドレスがAWS内部使用のため予約
- サブネットのCIDRブロックは重複不可
VPCの制限
- デフォルト制限:1つのAWSアカウントでリージョンあたり5つまでのVPC
- 制限緩和:AWS Supportを通じて上限を増加可能
ルートテーブルとネットワーク制御
ルートテーブルの基本概念
自動作成されるメインルートテーブル
VPC作成時に自動的に作成され、以下のローカルルートが含まれます:
Destination: 10.0.0.0/16
Target: local
Status: Active
このルートにより、VPC内のすべてのリソース間で通信が可能になります。
カスタムルートテーブル
- 特定の要件に応じて作成
- サブネットごとに異なるルーティング設定が可能
- 各サブネットは必ずルートテーブルに関連付けされる必要
サブネットタイプの定義
パブリックサブネット
特徴:
- インターネットゲートウェイへのルートが存在
- インバウンド・アウトバウンド両方向のインターネットアクセス
ルートテーブル例:
Destination Target
10.0.0.0/16 local
0.0.0.0/0 igw-xxxxxxxxx
プライベートサブネット
特徴:
- インターネットゲートウェイへのルートが存在しない
- 直接的なインターネットアクセス不可
- 一般的により多くのIPアドレスを割り当て
設計の考慮点:
- パブリックサブネット:/24(251個のIPアドレス)
- プライベートサブネット:/20(4,091個のIPアドレス)
インターネット接続性
Internet Gateway
基本特徴
- 水平方向にスケーラブル
- 冗長性を備えた高可用性設計
- IPv4とIPv6の両方をサポート
- VPCとインターネット間の通信を可能にする
インターネットアクセスを有効にする手順
- Internet GatewayをVPCにアタッチ
-
サブネットのルートテーブルにルートを追加
Destination: 0.0.0.0/0 Target: igw-xxxxxxxxx
-
インスタンスにパブリックIPアドレスを割り当て
- パブリックIPv4アドレス
- IPv6アドレス
- Elastic IPアドレス
- ネットワークACLとセキュリティグループでトラフィックを許可
Elastic IP アドレス
- 静的パブリックIPv4アドレス(時間経過で変化しない)
- インスタンスまたはネットワークインターフェース間で迅速に移動可能
- 高可用性アーキテクチャでのフェイルオーバーに活用
NAT Gateway
目的と動作
プライベートサブネット内のインスタンスが以下を実現:
- インターネットへの接続
- インターネットからの直接接続の防止
Network Address Translation (NAT) プロセス
アウトバウンド通信:
プライベートIP → NAT Gateway → インターネット
(プライベートサブネット) (パブリックサブネット)
インバウンド応答:
インターネット → NAT Gateway → プライベートIP
(アドレス変換)
NAT Gateway設定手順
- パブリックサブネットでNAT Gatewayを作成
- Elastic IPアドレスをNAT Gatewayに関連付け
-
プライベートサブネットのルートテーブルを更新
Destination: 0.0.0.0/0 Target: nat-xxxxxxxxx
重要な制限:NAT GatewayはIPv6トラフィックをサポートしない
Egress-only Internet Gateway
IPv6専用のソリューション
- IPv6トラフィック専用
- プライベートサブネットからインターネットへのアウトバウンド通信を許可
- インターネットからの直接接続を防止
ステートフル動作
- プライベートサブネットからインターネットへトラフィックを転送
- 応答トラフィックを自動的にインスタンスに返送
設定方法
IPv6ルートテーブル設定:
Destination: ::/0
Target: eigw-xxxxxxxxx
ネットワークセキュリティ
Network Access Control Lists (NACLs)
基本特徴
- サブネットレベルのファイアウォール
- ステートレス:インバウンドとアウトバウンドの明示的なルールが必要
- 番号付きルールリストで評価順序を制御
デフォルトNACL vs カスタムNACL
デフォルトNACL:
- すべてのインバウンド・アウトバウンドトラフィックを許可
- VPCに自動的に付属
- 変更可能
カスタムNACL:
- デフォルトですべてのトラフィックを拒否
- 許可ルールを明示的に追加する必要
- より厳格なセキュリティ制御
ルール評価プロセス
評価順序:
- 最も小さい番号のルールから開始(最高優先度)
- トラフィックがルールに一致するまで順次評価
- 一致した時点で評価終了、ALLOWまたはDENYを適用
ルール例:
Rule# Protocol Port Range Source Allow/Deny
100 SSH(22) 22 172.31.1.2/32 ALLOW
200 ALL ALL 0.0.0.0/0 DENY
制約事項
- 複数のサブネットを1つのNACLに関連付け可能
- 1つのサブネットは同時に1つのNACLにのみ関連付け可能
- インバウンドとアウトバウンドの両方向で明示的なルールが必要
Security Groups
基本特徴
- インスタンスレベルの仮想ファイアウォール
- ステートフル:インバウンドトラフィックに対する応答は自動的に許可
- ステートフル:すべてのルールを評価してからトラフィック許可を決定
デフォルト動作
新しいセキュリティグループ:
- すべてのインバウンドトラフィックを拒否
- すべてのアウトバウンドトラフィックを許可
DENYルール不要:
- デフォルトで拒否されるため、ALLOWルールのみ設定
- より簡潔なルール管理
トラフィック制御要素
セキュリティグループでは以下の要素でトラフィックを制限:
- トラフィックタイプ(HTTP、HTTPS、SSH等)
- IPプロトコル(TCP、UDP、ICMP等)
- ポート範囲
- トラフィックソース(IPアドレス、他のセキュリティグループ等)
セキュリティグループチェーンの実装
階層化セキュリティアーキテクチャ
企業では一般的に機能層ごとにセキュリティグループを作成し、トラフィックフローを厳密に制御します:
3層アーキテクチャの例:
インターネット
↓ HTTPS (Port 443)
┌─────────────────┐
│ Web Tier │ ← Web Tier Security Group
│ (Web Servers) │
└─────────────────┘
↓ HTTP (Port 80)
┌─────────────────┐
│ Application Tier│ ← Application Security Group
│ (App Servers) │
└─────────────────┘
↓ TCP (Port 3306)
┌─────────────────┐
│ Data Tier │ ← Database Security Group
│ (Database) │
└─────────────────┘
セキュリティグループルールの詳細
Web Tier Security Group:
Inbound Rules:
- Type: HTTPS
- Protocol: TCP
- Port: 443
- Source: 0.0.0.0/0 (Internet)
Application Security Group:
Inbound Rules:
- Type: HTTP
- Protocol: TCP
- Port: 80
- Source: Web Tier Security Group
Database Security Group:
Inbound Rules:
- Type: MySQL/Aurora
- Protocol: TCP
- Port: 3306
- Source: Application Security Group
チェーン設計の利点
防御の深層化:
- 各層で異なるセキュリティ制御
- 単一障害点の排除
最小権限の原則:
- 各層は必要最小限のアクセスのみ許可
- 上位層からのトラフィックのみを受け入れ
侵害時の被害局限化:
- 仮にWebサーバーが侵害されても、データベースへの直接アクセスは不可能
- 攻撃者は各層のセキュリティを個別に突破する必要
NACLs vs Security Groups 比較
特徴 | Network ACLs | Security Groups |
---|---|---|
動作レベル | サブネット境界 | インスタンスレベル |
ステート | ステートレス | ステートフル |
ルールタイプ | ALLOW・DENYルール | ALLOWルールのみ |
ルール評価 | 順次評価(番号順) | すべてのルール評価 |
デフォルト動作 | すべて許可 | インバウンド拒否、アウトバウンド許可 |
関連付け | サブネット | インスタンス |
明示的ルール | インバウンド・アウトバウンド両方必要 | インバウンドのみ(応答は自動許可) |
VPCのセキュリティベストプラクティス
1. ネットワーク設計の原則
最小権限の原則
- 必要最小限のネットワークアクセスのみ許可
- 不要なポートやプロトコルのブロック
- ソースIPアドレスの厳格な制限
防御の深層化
- NACLsとSecurity Groupsの併用
- 複数層でのセキュリティ制御
- ネットワークレベルとアプリケーションレベルの両方で保護
2. サブネット分離戦略
パブリック vs プライベート分離
パブリックサブネット:
- ロードバランサー
- Webサーバー(必要な場合のみ)
- NATゲートウェイ
- Bastionホスト
プライベートサブネット:
- アプリケーションサーバー
- データベース
- 内部API
- 機密データを扱うサービス
機能別サブネット分離
- DMZ(非武装地帯)サブネット:外部向けサービス
- 内部サービスサブネット:社内システム
- 管理サブネット:運用・監視ツール
3. セキュリティグループ管理
命名規則の確立
<環境>-<層>-<サービス>-sg
例:prod-web-nginx-sg, dev-app-api-sg
グループ参照によるルール設定
IPアドレス範囲ではなく、セキュリティグループIDを参照:
Source: sg-xxxxxxxxx (Application Security Group)
利点:
- IPアドレス変更に対する柔軟性
- より明確な関係性の表現
- 管理の簡素化
4. 監視とログ記録
VPC Flow Logs
- ネットワークトラフィックの記録
- 異常なトラフィックパターンの検出
- セキュリティインシデントの分析
CloudTrail統合
- VPC設定変更の記録
- セキュリティグループ変更の監査
- コンプライアンス要件への対応
実装時の考慮事項
1. パフォーマンス最適化
地理的配置
- 利用者に近いリージョンでのVPC配置
- レイテンシーの最小化
帯域幅計画
- NAT Gatewayの帯域幅制限を考慮
- 複数のNAT Gatewayによる負荷分散
2. 高可用性設計
Multi-AZ配置
- 複数のAvailability Zoneにわたるサブネット配置
- 単一障害点の排除
冗長化
- 複数のNAT Gateway(AZごと)
- 複数のInternet Gateway(必要に応じて)
3. コスト最適化
NATゲートウェイコスト
- データ転送量の監視
- 不要なアウトバウンド通信の削減
Elastic IPコスト
- 未使用Elastic IPの削除
- 使用量の定期的なレビュー
まとめ
学習した主要ポイント
- Amazon VPCは、AWSクラウド内で論理的に分離されたプライベートネットワーク環境を構築
- サブネット設計により、パブリック・プライベートリソースの適切な分離を実現
- Internet Gateway・NAT Gatewayにより、セキュアなインターネット接続を提供
- NACLsとSecurity Groupsによる多層防御でネットワークセキュリティを強化
- セキュリティグループチェーンにより、階層化されたアクセス制御を実装
AWS Security Specialty取得に向けて
VPCは、AWS Security Specialtyにおいて以下の観点から重要です:
- ネットワーク分離:論理的な分離によるセキュリティ境界の確立
- アクセス制御:細かいネットワークレベルでのトラフィック制御
- 防御の深層化:複数のセキュリティ層による包括的保護
- コンプライアンス:規制要件に対応するネットワーク設計
Discussion