セキュリティイベント アーカイブガイド
このドキュメントでは、セキュリティイベントの長期保存とクラウドストレージへのアーカイブ戦略について説明します。
概要
課題
security_event テーブルは90日間の保持期間後に自動削除されますが、コンプライアンスや監査要件により、より長期間のデータ保存が必要な場合があります。
解決策
pg_partmanの retention_schema 機能を活用し、削除前にパーティションをアーカイブスキーマに退避。その後、外部ストレージ(S3、GCS、Azure Blob等)にエクスポートします。
┌─────────────────────────────────────────────────────────────────────────┐
│ アーカイブフロー │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ security │ │ archive │ │ 外部 │ │ 分析基盤 │ │
│ │ _event │──▶│ schema │──▶│ ストレージ │──▶│ (Athena等) │ │
│ │ (90日) │ │ (退避) │ │ (S3等) │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │ │
│ pg_partman 自動移動 エクスポート クエリ検索 │
│ retention (DETACH) (Parquet) (SQL) │
│ │
└─────────────────────────────────────────────────────────────────────────┘
AWS構成の全体像
AWSを使用する場合の推奨アーキテクチャです。
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ AWS アーカイブアーキテクチャ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ VPC │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────────────┐ │ │
│ │ │ Aurora PostgreSQL │ │ │
│ │ │ ┌────────────────┐ ┌────────────────┐ │ │ │
│ │ │ │ security_event │ │ archive schema │ │ │ │
│ │ │ │ (90日保持) │───▶│ (退避領域) │ │ │ │
│ │ │ └────────────────┘ └───────┬────────┘ │ │ │
│ │ │ │ │ │ │ │
│ │ │ pg_partman pg_cron │ │ │
│ │ │ (02:00 UTC) (03:00 UTC) │ │ │
│ │ │ │ │ │ │
│ │ └────────────────────────────────│──────────────────────────┘ │ │
│ │ │ │ │
│ │ │ aws_s3 拡張 │ │
│ │ │ query_export_to_s3() │ │
│ │ ▼ │ │
│ └───────────────────────────────────│──────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────────────│──────────────────────────────────────────┐ │
│ │ S3 (アーカイブストレージ) │ │ │
│ │ ▼ │ │
│ │ s3://idp-archive-bucket/ │ │
│ │ └── security_event/ │ │
│ │ ├── year=2024/ │ │
│ │ │ ├── month=01/ │ │
│ │ │ │ ├── day=01/data.csv │ │
│ │ │ │ ├── day=02/data.csv │ │
│ │ │ │ └── ... │ │
│ │ │ └── month=12/... │ │
│ │ └── year=2025/... │ │
│ │ │ │
│ │ ライフサイクルポリシー: │ │
│ │ ├── 0-90日: S3 Standard │ │
│ │ ├── 90-365日: S3 Standard-IA │ │
│ │ └── 365日〜: S3 Glacier Deep Archive │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ │ │
│ ┌───────────────────────────────────│──────────────────────────────────────────┐ │
│ │ 分析基盤 │ │ │
│ │ ▼ │ │
│ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │ │
│ │ │ Glue Crawler │───▶│ Glue Catalog │◀───│ Athena │ │ │
│ │ │ (04:00 UTC) │ │ (メタデータ) │ │ (SQLクエリ) │ │ │
│ │ └────────────────┘ └────────────────┘ └───────┬────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌────────────────┐ │ │
│ │ │ QuickSight │ │ │
│ │ │ (ダッシュボード)│ │ │
│ │ └────────────────┘ │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────────────────┐ │
│ │ セキュリティ・権限 │ │
│ │ │ │
│ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │ │
│ │ │ IAM Role │ │ S3 Bucket │ │ KMS │ │ │
│ │ │ (Aurora用) │ │ Policy │ │ (暗号化キー) │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ s3:PutObject │ │ Aurora からの │ │ S3 SSE-KMS │ │ │
│ │ │ s3:GetObject │ │ アクセス許可 │ │ │ │ │
│ │ └────────────────┘ └────────────────┘ └────────────────┘ │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────┘
処理タイムライン
┌─────────────────────────────────────────────────────────────────────────┐
│ 日次処理スケジュール (UTC) │
│ │
│ 02:00 pg_partman maintenance │
│ └── 90日経過パーティションを archive スキーマに DETACH │
│ │
│ 03:00 process_archived_partitions() │
│ └── archive スキーマのテーブルを S3 にエクスポート & DROP │
│ │
│ 04:00 Glue Crawler │
│ └── S3 の新規パーティションを検出し Glue Catalog を更新 │
│ │
│ いつでも Athena クエリ │
│ └── 過去データの検索・分析・レポート生成 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
コスト試算(詳細シミュレーション)
前提条件
| 項目 | 値 |
|---|---|
| ユーザー数 | 100万人 |
| 1ユーザーあたりイベント数/日 | 100件 |
| 1日のイベント総数 | 1億件 |
| 1イベントあたりのサイズ | 500 bytes |
| 1日のデータ量 | 約50GB |
| リージョン | ap-northeast-1 (東京) |
ストレージ単価(東京リージョン参考値)
| ストレージ種別 | 単価 (GB/月) |
|---|---|
| Aurora PostgreSQL | $0.12 |
| S3 Standard | $0.025 |
| S3 Glacier Deep Archive | $0.002 |
※ AWS公式料金ページで最新価格を確認してください
パターンA: DBにずっと保持する場合
┌─────────────────────────────────────────────────────────────────────────┐
│ Aurora PostgreSQL にすべて保持 │
│ │
│ データ増加: 50GB/日 × 365日 = 18.25TB/年 │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 1年後: 18.25TB │ 2年後: 36.5TB │ 3年後: 54.75TB │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
| 期間 | 累積データ量 | Aurora ストレージ月額 |
|---|---|---|
| 3ヶ月後 | 4.5TB | $540 |
| 6ヶ月後 | 9TB | $1,080 |
| 1年後 | 18.25TB | $2,190 |
| 2年後 | 36.5TB | $4,380 |
| 3年後 | 54.75TB | $6,570 |
| 5年後 | 91.25TB | $10,950/月 |
年間コスト(5年運用時): 約 $131,400/年(ストレージのみ)
パターンB: 90日でS3にアーカイブする場合
┌─────────────────────────────────────────────────────────────────────────┐
│ 90日保持 + S3アーカイブ │
│ │
│ Aurora: 50GB × 90日 = 4.5TB (固定) │
│ S3: 毎日50GBが追加され、1年後にGlacierへ │
│ │
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │
│ │ Aurora │ │ S3 Standard │ │ S3 Glacier │ │
│ │ 4.5TB (固定) │ │ (90日〜1年) │ │ (1年超) │ │
│ └───────────────┘ └───────────────┘ └───────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
| ストレージ | データ量 | 単価 | 月額コスト |
|---|---|---|---|
| Aurora (90日分) | 4.5TB | $0.12/GB | $540 |
| S3 Standard (90日〜1年分) | 13.75TB | $0.025/GB | $344 |
| S3 Glacier (1年超、5年運用時) | 73TB | $0.002/GB | $146 |
| 合計(5年運用時) | 91.25TB | - | $1,030/月 |
年間コスト(5年運用時): 約 $12,360/年(ストレージのみ)
コスト比較サマリー
┌─────────────────────────────────────────────────────────────────────────┐
│ 5年間の累積コスト比較 │
│ │
│ パターンA (全てAurora) │
│ ████████████████████████████████████████████████████ $657,000 │
│ │
│ パターンB (90日+S3) │
│ █████ $61,800 │
│ │
│ 削減効果: 約90%削減 ($595,200の節約) │
│ │
└─────────────────────────────────────────────────────────────────────────┘
| 指標 | パターンA (全てAurora) | パターンB (90日+S3) | 削減率 |
|---|---|---|---|
| 1年目 月額 | $1,095〜$2,190 | $540〜$884 | 60% |
| 5年目 月額 | $10,950 | $1,030 | 91% |
| 5年間累積 | $657,000 | $61,800 | 91% |
| Auroraストレージ上限 | 128TBで限界 | 4.5TB固定 | - |