Q43 — AWS SAA-C03 第17章
第 43/89 問 | ← 第17章
Q1343. ある企業のソリューションアーキテクトが、本番環境向けにAmazon S3にデプロイされる静的ウェブサイトを構築しています。このウェブサイトは、AWS Lambda関数を介してAmazon Aurora PostgreSQLデータベースと統合されます。本番環境にデプロイされるウェブサイトでは、Lambdaエイリアスを使用し、そのエイリアスはLambda関数の特定のバージョンを指します。企業はデータベースの認証情報を2週間ごとにローテーションする必要があります。また、これまでにデプロイされたLambda関数は、最新の認証情報を使用できる必要があります。これらの要件を満たす解決策はどれですか?
- A. データベース認証情報をAWS Secrets Managerに保存し、ローテーションを有効化します。Lambda関数内に、Secrets Managerから認証情報を取得するコードを記述します。 ✓
- B. データベース認証情報をLambda関数のコード内に含めます。定期的に認証情報を更新し、新しいLambda関数をデプロイします。
- C. Lambdaの環境変数を使用します。新しい認証情報が利用可能になったときに、環境変数を更新します。
- D. データベース認証情報をAWS Systems Manager Parameter Storeに保存し、ローテーションを有効化します。Lambda関数内に、Parameter Storeから認証情報を取得するコードを記述します。
正解: A. データベース認証情報をAWS Secrets Managerに保存し、ローテーションを有効化します。Lambda関数内に、Secrets Managerから認証情報を取得するコードを記述します。
解説
このシナリオでは、Lambda関数とデータベース認証情報のローテーションに関する要件を慎重に検討する必要があります。\n\n**主な要件:**\n1. Amazon S3上にホストされる静的ウェブサイトと、Amazon Aurora PostgreSQLデータベースと統合されるLambda関数\n2. LambdaエイリアスがLambda関数の特定のバージョン(不変)を指している\n3. データベース認証情報を2週間ごとに自動ローテーションする必要がある\n4. 以前にデプロイされたLambda関数(古いバージョン)も、常に最新の認証情報を使用できなければならない\n5. 本番環境での運用\n\n**重要な制約:** Lambdaエイリアスは特定のバージョンを指しており、そのバージョンは一度公開されると不変です。つまり、環境変数やコードを更新するには、新しいバージョンを公開し、エイリアスをその新バージョンへ再設定する必要があります。しかし、要件「以前にデプロイされたLambda関数は最新の認証情報を使用しなければならない」は、古いバージョンの関数であっても、実行時に現在の(ローテーション後の)認証情報を取得できることを意味します。\n\n**各選択肢の検討:**\n\n**選択肢A:**\n- 認証情報をAWS Secrets Managerに保存し、自動ローテーション(2週間周期)を有効化\n- Lambda関数は実行時にSecrets Managerから認証情報を取得\n- Secrets Managerはネイティブな自動ローテーション機能を提供\n- 実行時に毎回最新の認証情報を取得するため、古いバージョンのLambda関数でも常に最新の認証情報を使用可能\n- すべての要件を満たす\n\n**選択肢B:**\n- 認証情報をLambda関数のコード内にハードコード\n- 2週間ごとに手動で更新・再デプロイが必要\n- エイリアスが指す古いバージョンの関数は、デプロイ当時の古い認証情報しか持たない\n- 「以前にデプロイされた関数が最新の認証情報を使用できる」という要件に反する\n- セキュリティ上のアンチパターン\n- **不適切**\n\n**選択肢C:**\n- Lambdaの環境変数を使用\n- 環境変数を更新するには、必ず新しいバージョンを公開する必要あり\n- エイリアスが指す既存のバージョンは、環境変数の更新を反映しない(バージョンごとに環境変数は固定)\n- 古いバージョンの関数は、デプロイ時の古い認証情報を使い続けてしまう\n- 「以前にデプロイされた関数が最新の認証情報を使用できる」という要件に反する\n- **不適切**\n\n**選択肢D:**\n- 認証情報をAWS Systems Manager Parameter Storeに保存\n- Parameter Storeには、Secrets Managerのようなネイティブな自動ローテーション機能は存在しない(カスタム実装またはSecrets Managerとの連携が必要)\n- 実行時に認証情報を取得することは可能だが、ローテーション自体の実装が複雑で、信頼性・保守性に劣る\n- Secrets Managerはデータベース認証情報のローテーションに特化したサービスであり、PostgreSQLとのネイティブ連携や自動パスワード生成、シームレスなローテーション機能を備える\n- この選択肢は技術的には動作する可能性はあるが、要件を最も適切・確実に満たす「ベストプラクティス」ではない\n\n**結論:**\n選択肢A(AWS Secrets Manager+自動ローテーション)は、Lambdaの再デプロイ不要で、実行時毎に最新の認証情報を取得できる唯一の標準的かつ目的に特化したソリューションです。特に、Aurora PostgreSQLとの連携や、2週間ごとの自動ローテーション、古いLambdaバージョンへの対応という点で、すべての要件を完全に満たします。\n\n**正解:A**