EC2 上で動作する Web アプリケーションが Amazon RDS for MySQL に接続しています。現在、データベース認証情報がアプリケーションの設定ファイルにプレーンテキストで記述されており、セキュリティ監査で重大な指摘を受けました。要件は以下の 3 点です。 ・認証情報を安全に保存し 30 日ごとに自動ローテーションすること ・アプリケーションのダウンタイムをゼロにすること ・コードの変更を最小限にすること 最も適切な方法はどれですか。
AWS Secrets Manager は認証情報の安全な保存と自動ローテーションを提供するマネージドサービスです。Amazon RDS との統合ローテーションを有効化すると、Lambda ローテーション関数が設定した間隔で以下を自動実行します。 ①新しいパスワードを生成してシークレットに保存 ②RDS のユーザーパスワードを新しいパスワードに更新 ③シークレットのステージングラベルを切り替えて新バージョンを有効化 アプリケーション側は Secrets Manager SDK(またはキャッシュライブラリ)を使って最新の認証情報を取得するだけでよく、ダウンタイムなしにローテーションが完了します。コード変更は設定ファイル読み込みから SDK 呼び出しへの置き換えのみです。 選択肢Aの Systems Manager Parameter Store は SecureString で KMS 暗号化を提供しますが、RDS との統合ローテーション機能がなく Lambda 実装を別途作成する必要があり運用負荷が増大する。 選択肢Cの RDS IAM 認証はパスワード管理を排除できる優れた手法ですが、一時トークン(有効期限 15 分)の取得・更新ロジックへの大幅なコード変更が必要で「最小コード変更」要件と相反する。 選択肢Dの KMS + S3 は認証情報保護の標準パターンではなく自動ローテーション機能もなく、環境変数への展開はプロセスリストやログからの漏洩リスクを持つ。