【正解】B
【0からの解説】
要件は3つ。「S3 アクセスの制限」「AWS マネージドキーでの暗号化」「Lambda が使う DB 認証情報を管理し自動ローテーション」。
・アクセス制御:IAM ポリシーは、どのプリンシパル(ユーザー/ロール)がどの S3 リソースに何をできるかを集中管理でき、AWS が推奨するアクセス制御の基本です。
・暗号化:SSE-KMS は AWS KMS で管理される鍵を使った暗号化で、「AWS マネージドキー(aws/s3 など)」を利用でき、キーポリシーや CloudTrail での監査も可能です。要件の「AWS マネージドキーでの暗号化」に合致します。
・認証情報の管理と自動ローテーション:AWS Secrets Manager は認証情報(DB のユーザー名/パスワード等)を安全に保管し、組み込みのローテーション機能(Lambda 関数)で自動的にパスワードを更新できます。RDS など多くの DB に対するローテーションがマネージドに行えるため、これがベストプラクティスです。
これらをすべて正しく満たすのは B です。
【誤りの選択肢】
A:認証情報を Lambda の環境変数に平文で保存するのはセキュリティ上のアンチパターンで、自動ローテーションもできません。
C:S3 ACL は現在は非推奨のアクセス制御方式で、バケットポリシー/IAM が推奨されます。Parameter Store でもローテーションは実装可能ですが、組み込みのマネージドなローテーションを持つ Secrets Manager の方が DB 認証情報の自動ローテーションには適し、ACL の使用も含め B に劣ります。
D:SSE-S3 自体は暗号化しますが、本問の最適解 B(IAM + SSE-KMS + Secrets Manager)と比べると、Parameter Store + 自前のスケジュール Lambda によるローテーションは運用負荷が高く、マネージドな自動ローテーションを備えた構成になっていません。
【参考】
AWS Secrets Manager でシークレットを自動ローテーションするAmazon S3 のサーバー側暗号化 (SSE-KMS)