脆弱性診断基準ガイドライン
目的
本ドキュメントは、FastDoctorのAWSインフラストラクチャに対する脆弱性診断を実施する際の基準と手順を定義します。定期的な脆弱性診断により、システムのセキュリティを継続的に改善し、患者情報やヘルスケアデータの保護を徹底します。
適用範囲
- AWSクラウドインフラストラクチャ(fastdoctor-manager/、fastdoctor-template/)
- Terraformで管理されるインフラストラクチャコード
- Datadogモニタリングシステム
- マルチ環境アーキテクチャ(infra-dev、develop、staging、production、integration、amazon-connect)
脆弱性診断の分類
1. 緊急度分類(Priority)
Critical(緊急)
- 定義: 即座に攻撃に悪用される可能性があり、重要なデータ漏洩やシステム停止を引き起こす脆弱性
- 対応時間: 24時間以内
- 例:
- パブリックに公開されたS3バケット内の患者データ
- RDSインスタンスへの認証なしアクセス
- セキュリティグループの0.0.0.0/0への全ポート開放
High(高)
- 定義: 攻撃者が悪用した場合、重要なシステムへの不正アクセスを可能にする脆弱性
- 対応時間: 1週間以内
- 例:
- 期限切れのSSL証明書
- 古いAMIの使用(パッチ未適用)
- IAMユーザーの過剰な権限付与
Medium(中)
- 定義: セキュリティベストプラクティスに反しており、将来的なリスクを伴う脆弱性
- 対応時間: 1ヶ月以内
- 例:
- CloudTrailログの暗号化未設定
- リソースタグの不備
- 不要なAWSサービスの有効化
Low(低)
- 定義: セキュリティ上の軽微な問題や改善推奨事項
- 対応時間: 次回メンテナンス時
- 例:
- リソース命名規則の不統一
- 古いTerraformプロバイダーバージョン
- ドキュメントの更新不備
AWS/Terraform 脆弱性診断チェックリスト
アクセス制御・認証
IAM(Identity and Access Management)
[ ] ルートアカウントの使用状況確認
- ルートアカウントでの日常作業禁止
- MFA有効化確認
- アクセスキー削除確認
[ ] IAMユーザー・ロールの権限監査
- 最小権限の原則遵守
- 未使用ユーザー・ロールの削除
- 定期的な権限見直し(四半期ごと)
[ ] アクセスキー管理
- アクセスキーの定期ローテーション(90日以内)
- 埋め込まれたハードコードキーの有無
- 使用していないキーの削除
bash
# 診断コマンド例
aws iam list-access-keys
aws iam get-access-key-last-used --access-key-id <key-id>Assume Role設定
- [ ] AssumeRoleポリシーの適切性
- 信頼関係の最小化
- ExternalIdの使用確認
- 条件付きアクセスの実装
ネットワークセキュリティ
VPC設定
[ ] VPCフローログ有効化
- すべてのVPCでフローログ取得
- CloudWatch Logsへの出力設定
- ログ保持期間の適切設定
[ ] サブネット構成
- パブリック/プライベートサブネットの適切な分離
- NATゲートウェイの冗長性確認
- 不要なInternet Gatewayの有無
セキュリティグループ
- [ ] インバウンドルール監査
hcl
# 危険な設定例(禁止)
resource "aws_security_group_rule" "bad_example" {
type = "ingress"
from_port = 0
to_port = 65535
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"] # 全開放は禁止
security_group_id = aws_security_group.example.id
}- [ ] アウトバウンドルール監査
- 不要な外部通信の制限
- 特定サービスのみへの通信許可
Network ACL
- [ ] デフォルトNACLの確認
- デフォルトルールの見直し
- 明示的な拒否ルールの設定
データ保護・暗号化
S3バケット
- [ ] バケットポリシー監査のセキュア設定例
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}バケットポリシーの説明
- HTTPS通信の強制:
aws:SecureTransport条件を使用して、非暗号化通信を拒否 - 特定のIAMロール/ユーザーのみアクセス許可:
Principal要素で制限 - アクション制限: 必要最小限のS3アクションのみを許可
- バケットとオブジェクトレベルの保護: バケット自体とその中のオブジェクトの両方を保護
- 条件付きアクセス: IP制限、VPCエンドポイント制限などの追加条件を設定可能
- HTTPS通信の強制:
[ ] 暗号化設定確認
- サーバーサイド暗号化の有効化(SSE-S3またはSSE-KMS)
- バケット暗号化のデフォルト設定
- 転送中暗号化の強制
[ ] パブリックアクセス設定
- Block Public Accessの有効化
- バケットACLの監査
- パブリック読み取り/書き込み権限の無効化
RDS/Aurora
[ ] データベース暗号化
- 保存時暗号化の有効化
- バックアップ暗号化の確認
- スナップショット暗号化の確認
[ ] ネットワーク設定
- パブリックアクセス無効化
- 適切なセキュリティグループ設定
KMS(Key Management Service)
- [ ] キー管理監査
- キーローテーションの有効化
- キーポリシーの最小権限設定
- 未使用キーの削除
ログ・モニタリング
CloudTrail
[ ] 設定確認
- 全リージョンでの有効化
- 管理イベント・データイベントの記録
- ログファイル整合性検証の有効化
[ ] ログ保護
- S3バケットの暗号化設定
- ログファイルのMFA Delete設定
- 適切なアクセス権限設定
CloudWatch
- [ ] アラーム設定
- 異常なAPI呼び出しの検知
- ルートアカウント使用の検知
- 重要リソースの変更検知
コンプライアンス・ガバナンス
Terraformコード監査
[ ] 機密情報の確認
- ハードコードされたパスワード・APIキーの有無
- terraform.tfvarsファイルの暗号化確認
- Secrets Managerの適切な使用
[ ] リソースタグ
- 必須タグの付与確認(Environment、Project、Owner等)
- コスト配分タグの設定
- データ分類タグの設定
バックアップ・復旧
- [ ] バックアップ戦略
- 定期バックアップの設定確認
- クロスリージョンバックアップの実装
- リストア手順の文書化・テスト
Datadog監視における脆弱性診断
セキュリティモニタリング
[ ] ログ分析設定
- セキュリティイベントの検知ルール設定
- 異常なアクセスパターンの監視
- インシデント対応アラートの設定
[ ] メトリクス監視
- 認証失敗の急増検知
- 異常なネットワークトラフィック監視
- リソース使用率の異常検知
コンプライアンス監視
- [ ] 設定ドリフト検知
- セキュリティグループ変更の監視
- IAMポリシー変更の追跡
- 暗号化設定変更の検知
脆弱性対応プロセス
1. 発見・報告フェーズ
脆弱性スキャンの実施
- 月次での自動スキャン実行
- 新サービス開始時の診断実施
- インシデント後の緊急診断
結果の評価・分類
- 緊急度分類に基づくトリアージ
- 影響範囲の特定
- ビジネス影響の評価
2. 対応・修正フェーズ
- 緊急対応(Critical/High)
bash
# 緊急時の一時的なアクセス制限例
aws ec2 revoke-security-group-ingress \
--group-id sg-xxxxxxxx \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0- 計画的対応(Medium/Low)
- 修正計画の策定
- テスト環境での修正検証
- 本番環境への段階的適用
3. 検証・完了フェーズ
修正確認
- 脆弱性の解消確認
- 副次的影響の確認
- システム動作確認
文書化
- 対応記録の作成
- 再発防止策の策定
- ナレッジベースへの反映
診断スケジュール
定期診断
- 月次: 自動化スキャンによる基本診断
- 四半期: 手動による詳細診断
- 年次: 外部ベンダーによる包括診断
特別診断
- 新サービス開始時: サービス固有の脆弱性診断
- 重大インシデント後: 関連システムの緊急診断
- 重要アップデート後: 影響範囲の診断
診断ツール・リソース
AWSネイティブツール
- AWS Security Hub
- AWS GuardDuty
- AWS Inspector
- AWS Trusted Advisor
- AWS Config Rules
外部ツール
- Prowler(AWS設定監査)
- ScoutSuite(マルチクラウド監査)
- terraform-compliance(Terraformコンプライアンス)
診断実行コマンド例
bash
# Prowlerを使用したAWS監査
prowler -g healthcare -M json
# terraform-complianceでのポリシーチェック
terraform-compliance -f security-policy -p terraform-plan.json報告・エスカレーション
報告書構成
エグゼクティブサマリー
- 全体的なセキュリティ状況
- 重要な発見事項
- 推奨アクション
詳細な発見事項
- 脆弱性の詳細説明
- 技術的な修正方法
- 実装タイムライン
トレンド分析
- 前回からの改善状況
- 新たなリスク傾向
- 長期的な改善提案
エスカレーション基準
- Critical: CTOおよびセキュリティチームへ即座に報告
- High: 部門長への24時間以内報告
- Medium/Low: 月次セキュリティレビューでの報告
改善・継続的監視
プロセス改善
- 診断プロセスの定期見直し(半年ごと)
- 新たな脅威情報の取り込み
- 業界ベストプラクティスの反映
自動化推進
- 診断スクリプトの自動実行
- 結果分析の自動化
- レポート生成の自動化
関連ドキュメント
更新履歴
- 2025-08-15: 初版作成
- 定期見直し: 四半期ごと
承認者: SREチーム、セキュリティチーム 次回見直し予定: 20xx-xx-xx