エンタープライズシステム: セキュリティ・コンプライアンス・可用性の技術選定
はじめに
エンタープライズシステムは、大企業の業務を支える基幹システムです。数百〜数万人のユーザーが日常的に利用し、システム停止は直接的な業務影響や金銭的損失に繋がります。そのため、セキュリティ、コンプライアンス、可用性が最優先の技術選定基準となります。
身近な例えで理解するエンタープライズシステム
エンタープライズシステムは「大病院」のようなものです。
- セキュリティ = 患者の個人情報を守るための厳重な管理体制
- コンプライアンス = 医療法に基づく各種規制への対応
- 可用性 = 24時間365日、救急対応ができる体制
- スケーラビリティ = 患者数が増えても対応できるベッド数と医師の確保
スタートアップとの最大の違い:
- スタートアップ = 「速さ」が最優先。壊れても直せば良い
- エンタープライズ = 「安全性と信頼性」が最優先。壊れてはいけない
全体アーキテクチャ
推奨構成: Java/Spring Boot + Oracle/PostgreSQL + AWS
+-------------------+
| AWS WAF |
| (DDoS防御) |
+--------+----------+
|
+--------v----------+
| CloudFront |
| (CDN) |
+--------+----------+
|
+--------------+--------------+
| |
+-------v-------+ +--------v--------+
|Next.js | |API Gateway |
|(管理画面/ | |(外部API) |
| ダッシュボード)| +--------+--------+
+-------+-------+ |
| +-------v-------+
| |NLB/ALB |
| +-------+-------+
| |
+-------------+---------------+
|
+------------------+------------------+
| | |
+------v------+ +------v------+ +-------v------+
|Spring Boot | |Spring Boot | |Spring Boot |
|API Server | |Batch Server | |Auth Server |
|(ECS/Fargate)| |(ECS/EC2) | |(ECS/Fargate) |
+------+------+ +------+------+ +-------+------+
| | |
+------v------+ +------v------+ +-------v------+
|Aurora | |Aurora | |Cognito / |
|PostgreSQL | |PostgreSQL | |Active |
|(Primary) | |(Read Replica)| |Directory |
+------+------+ +-------------+ +--------------+
|
+------v------+
|Aurora |
|(Standby - |
| Multi-AZ) |
+-------------+
+-------------------------------------------+
| セキュリティ/運用 |
| - AWS Config: 構成管理/コンプライアンス |
| - CloudTrail: API操作の監査ログ |
| - GuardDuty: 脅威検出 |
| - SecurityHub: セキュリティ統合管理 |
| - Systems Manager: パッチ管理 |
| - KMS: 暗号鍵管理 |
| - Secrets Manager: 秘匿情報管理 |
+-------------------------------------------+
技術選定の詳細
バックエンド: Java (Spring Boot)
| 候補 | 評価 | 理由 |
|---|
| Java (Spring Boot) | 採用 | エンタープライズ実績最多、人材豊富、長期サポート |
| C# (.NET) | 次点 | Microsoft環境なら最適 |
| Go | 検討 | 高パフォーマンスだが、エンタープライズ実績がJavaに劣る |
| Node.js | 見送り | エンタープライズの複雑なビジネスロジックには型システムが弱い |
Java/Spring Bootを選ぶ理由:
- 20年以上のエンタープライズ実績
- Spring Securityによる堅牢な認証・認可
- Spring Batchによる大量バッチ処理
- 大量のJavaエンジニアが市場にいる
- LTS(Long Term Support)により長期のサポートが保証される
データベース: PostgreSQL (Aurora) or Oracle
| 項目 | Aurora PostgreSQL | Oracle Database |
|---|
| ライセンスコスト | 無料(OSS) | 非常に高い(数百万〜数千万円/年) |
| パフォーマンス | 高い | 非常に高い |
| 可用性 | Multi-AZ、Global Database | RAC、Data Guard |
| エンタープライズ機能 | 十分 | 最も充実 |
| サポート | AWS Premium Support | Oracle Premium Support |
| 移行の容易さ | SCT/DMSで移行可能 | --- |
| 人材の確保 | 比較的容易 | Oracle DBAが必要 |
推奨: Aurora PostgreSQL
新規開発であれば、コストとスケーラビリティの観点からAurora PostgreSQLを推奨。既存のOracle環境がある場合は、段階的にPostgreSQLに移行するか、Oracle on RDSを利用。
認証: AWS Cognito + Active Directory
| 要件 | 実装 |
|---|
| 社内ユーザー認証 | Active Directory連携(SAML/OIDC) |
| 外部ユーザー認証 | Cognito User Pool |
| SSO | SAML 2.0 / OIDC |
| MFA | TOTP / SMS / ハードウェアトークン |
| パスワードポリシー | 最低12文字、複雑性要件、90日ローテーション |
| セッション管理 | JWT + Redis、最大セッション時間8時間 |
セキュリティ設計
多層防御(Defense in Depth)
[外部ネットワーク]
|
v
[Layer 1: Edge] -- AWS WAF, CloudFront, Shield
|
v
[Layer 2: Network] -- VPC, Security Group, NACL
|
v
[Layer 3: Application] -- ALB, API Gateway (認証/認可)
|
v
[Layer 4: Service] -- Spring Security, RBAC
|
v
[Layer 5: Data] -- 暗号化(KMS), RLS, 監査ログ
AWSセキュリティサービスの活用
| サービス | 機能 | 必須度 |
|---|
| AWS WAF | Webアプリケーションファイアウォール | 必須 |
| AWS Shield | DDoS防御 | 推奨(Advancedは高額) |
| GuardDuty | 脅威検出(不正アクセス等) | 必須 |
| SecurityHub | セキュリティ状況の統合管理 | 推奨 |
| CloudTrail | API操作の監査ログ | 必須 |
| AWS Config | リソース構成の変更追跡 | 必須 |
| KMS | 暗号鍵の管理 | 必須 |
| Secrets Manager | パスワード/APIキーの安全な管理 | 必須 |
| Inspector | 脆弱性スキャン | 推奨 |
| Macie | S3内の個人情報検出 | 推奨 |
データ暗号化
| 対象 | 方法 |
|---|
| 通信中のデータ | TLS 1.2以上(ACM証明書) |
| 保存データ(DB) | Aurora暗号化(KMS) |
| 保存データ(S3) | SSE-KMS |
| バックアップ | 暗号化スナップショット |
| アプリケーション秘匿情報 | Secrets Manager |
| ログデータ | CloudWatch Logs暗号化 |
コンプライアンス対応
主要なコンプライアンス要件
| 規制/基準 | 対象 | 主な要件 |
|---|
| 個人情報保護法 | 全企業 | 個人データの適切な管理 |
| GDPR | EU関連 | データ主体の権利、同意管理 |
| SOC2 | SaaS/クラウド | セキュリティ、可用性、機密性 |
| PCI DSS | 決済関連 | カード情報の保護 |
| HIPAA | 医療関連 | 医療情報の保護 |
| ISMAP | 政府系 | クラウドサービスのセキュリティ評価 |
監査ログの設計
| ログ種別 | 記録内容 | 保存期間 | 保存先 |
|---|
| アクセスログ | 誰が、いつ、何にアクセスしたか | 1年 | CloudWatch + S3 |
| 操作ログ | データの作成/変更/削除 | 3年 | Aurora + S3 |
| 認証ログ | ログイン/ログアウト、失敗試行 | 1年 | CloudWatch + S3 |
| APIログ | API呼び出し(CloudTrail) | 1年 | S3 + Glacier |
| 変更管理ログ | インフラの変更(AWS Config) | 3年 | S3 |
可用性設計
可用性のレベル
| SLA | 年間ダウンタイム | 要件 |
|---|
| 99.0% | 87.6時間 | 一般的なシステム |
| 99.9% | 8.76時間 | ビジネスクリティカル |
| 99.95% | 4.38時間 | 重要業務システム |
| 99.99% | 52.56分 | 金融/医療システム |
| 99.999% | 5.26分 | ミッションクリティカル |
99.99%を実現するアーキテクチャ
[リージョン: ap-northeast-1]
|
+-- [AZ-a]
| ├── ECS Task x 2
| ├── Aurora Primary
| └── ElastiCache Primary
|
+-- [AZ-c]
| ├── ECS Task x 2
| ├── Aurora Replica
| └── ElastiCache Replica
|
+-- [AZ-d]
├── ECS Task x 2
├── Aurora Replica
└── ElastiCache Replica
[DR: ap-northeast-3 (大阪)]
├── Aurora Global Database (非同期レプリケーション)
├── S3 Cross-Region Replication
└── Route 53 Health Check + フェイルオーバー
障害対応
| 障害レベル | 影響 | RTO | RPO | 対策 |
|---|
| 単一インスタンス障害 | なし | 0分 | 0 | Auto Scaling、Multi-AZ |
| 単一AZ障害 | 軽微 | 数分 | 0 | Multi-AZ配置 |
| リージョン障害 | 大 | 1時間 | 数分 | DR(大阪リージョン) |
※ RTO: Recovery Time Objective(復旧目標時間)
※ RPO: Recovery Point Objective(復旧目標地点、データ損失許容量)
バッチ処理設計
バッチ処理の分類
| 種別 | 処理時間 | 実行環境 | 例 |
|---|
| 軽量バッチ | 数秒〜数分 | Lambda | メール送信、通知 |
| 中量バッチ | 数分〜数時間 | ECS Task (Fargate) | レポート生成、データ集計 |
| 重量バッチ | 数時間〜 | ECS Task (EC2) | 月次決算、大量データ移行 |
Spring Batchの活用
[月次バッチ処理の例]
EventBridge (毎月1日 AM 2:00)
|
v
ECS RunTask (Spring Boot + Spring Batch)
|
+-- Step 1: データ抽出(Aurora → CSV)
+-- Step 2: データ加工(集計処理)
+-- Step 3: レポート生成(PDF)
+-- Step 4: 通知(SES/SNS)
|
v
S3(レポート保存)
チーム規模と開発スケジュール
エンタープライズプロジェクト体制
| 役割 | 人数 | 担当 |
|---|
| プロジェクトマネージャー | 1人 | 全体管理 |
| アーキテクト | 1-2人 | 設計、技術判断 |
| バックエンド | 6-10人 | Spring Boot API、バッチ |
| フロントエンド | 3-5人 | 管理画面、ダッシュボード |
| インフラ/SRE | 2-3人 | AWS構築、CI/CD、監視 |
| DBA | 1人 | DB設計、チューニング |
| セキュリティ | 1-2人 | セキュリティレビュー、ペネトレーションテスト |
| QA | 3-5人 | テスト計画、自動テスト |
| 合計 | 20-30人 | 12-18ヶ月 |
開発フェーズ
| フェーズ | 期間 | 成果物 |
|---|
| 要件定義 | 2ヶ月 | 要件定義書 |
| 基本設計 | 2ヶ月 | アーキテクチャ設計書 |
| 詳細設計 | 2ヶ月 | 詳細設計書 |
| 実装 | 4-6ヶ月 | ソースコード |
| 結合テスト | 2ヶ月 | テスト結果 |
| 総合テスト | 1ヶ月 | テスト結果 |
| 移行/リリース | 1ヶ月 | 本番リリース |
コスト見積り
本番環境(99.9% SLA)
| サービス | 構成 | 月額 |
|---|
| ECS/Fargate(APIサーバー) | 6タスク x 2vCPU x 4GB | $500 |
| ECS/Fargate(バッチ) | オンデマンド | $100 |
| Aurora PostgreSQL | db.r6g.xlarge x 2(Multi-AZ) | $1,200 |
| Aurora Read Replica | db.r6g.large x 2 | $600 |
| ElastiCache Redis | cache.r6g.large x 2(Cluster) | $400 |
| ALB | 2台(Internal + External) | $40 |
| S3 | 1TB | $25 |
| CloudFront | 500GB転送 | $50 |
| WAF | 10ルール | $30 |
| GuardDuty | --- | $50 |
| CloudTrail | S3保存 | $10 |
| Secrets Manager | 20シークレット | $10 |
| CloudWatch | ログ/メトリクス | $100 |
| Route 53 | ヘルスチェック | $10 |
| VPN/Direct Connect | --- | $200 |
| 合計 | | 約$3,325/月 |
DR環境(大阪リージョン)追加
| サービス | 構成 | 月額 |
|---|
| Aurora Global Database | Replica | $600 |
| ECS/Fargate(待機系) | 最小構成 | $100 |
| S3 Cross-Region Replication | --- | $50 |
| DR追加合計 | | 約$750/月 |
オンプレミスからの移行
移行方式の比較
| 方式 | 説明 | リスク | 期間 |
|---|
| リフト&シフト | そのままクラウドに移動 | 低い | 短い |
| リプラットフォーム | 一部をクラウドネイティブに変更 | 中 | 中 |
| リファクタリング | クラウドネイティブに作り直し | 高い | 長い |
推奨: リプラットフォーム
既存のJavaアプリケーションをコンテナ化し、ECS/Fargateで実行。データベースはDMS(Database Migration Service)でAuroraに移行。
まとめ
推奨技術スタック
| レイヤー | 技術 | 理由 |
|---|
| バックエンド | Java (Spring Boot) | エンタープライズ実績、人材豊富 |
| フロントエンド | Next.js / React | モダンなUI、コンポーネント設計 |
| データベース | PostgreSQL (Aurora) | 高可用性、コスト効率 |
| キャッシュ | Redis (ElastiCache) | セッション、キャッシュ |
| 認証 | Cognito + AD | SSO、MFA、企業認証 |
| インフラ | AWS (ECS/Fargate) | マネージドサービス活用 |
| IaC | Terraform or CDK | インフラのコード管理 |
| CI/CD | GitHub Actions or GitLab CI | 自動化 |
| 監視 | CloudWatch + Datadog | 統合監視 |
エンタープライズの技術選定で最も重要なこと
- 実績のある技術を選ぶ: 最新の技術より、実績のある技術が安全
- 人材の確保: その技術のエンジニアが市場にいるか
- 長期サポート: 5年以上のサポートが保証されているか
- セキュリティ: 設計段階からセキュリティを組み込む(Security by Design)
- コンプライアンス: 業界の規制要件を満たせるか
参考リンク