ある企業が、Lambda 関数から Amazon RDS for MySQL へ接続するアーキテクチャを構築している。データベースのパスワードを安全に管理し、定期的に自動ローテーションしたい。Lambda 関数のコード変更を最小限に抑えながら、この要件を実現する最も適切な方法はどれか。
- A. データベースパスワードを Lambda 関数の環境変数に平文で設定し、IAM ポリシーで Lambda 関数のみがアクセスできるように制限する。
- B. Amazon Cognito でデータベースユーザーを管理し、JWT トークンを使って RDS に認証する。
- C. AWS Secrets Manager にデータベース認証情報を保存し、Lambda 関数実行時に Secrets Manager API で認証情報を取得する。自動ローテーション機能を有効化して定期的にパスワードを更新する。
- D. AWS Systems Manager Parameter Store(SecureString)にパスワードを保存し、Lambda 関数から取得する。ローテーションは手動で行う。
解答と解説を見る
正解: C
AWS Secrets Manager は RDS との統合による自動ローテーション機能を内蔵しており、設定するだけでパスワードが定期的に自動更新される。Lambda 関数は実行時に Secrets Manager から認証情報を取得するため、コードへのパスワード埋め込みが不要。自動ローテーション時も Lambda 関数のコード変更は不要である。選択肢Aは環境変数への平文保存であり、コンソールから閲覧可能でセキュリティリスクがある。また自動ローテーション機能もない。選択肢DのParameter Store SecureString は機密情報の安全な保存には適しているが、RDS パスワードの自動ローテーション機能は Secrets Manager に比べて制限されており、追加の Lambda 関数実装が必要になる。選択肢Bは Cognito を使った JWT 認証で RDS には接続できない(RDS は IAM 認証または通常のパスワード認証を使う)。
📚 関連サービスの解説: AWS Secrets Manager ・ AWS Lambda