ある金融系企業のLambda関数が、外部決済APIのシークレットキーを使用している。コンプライアンス要件として「シークレットを90日ごとに自動ローテーションすること」「シークレットへのアクセスをCloudTrailで監査できること」という2点が義務付けられている。これらの要件を最小限の追加実装で満たすシークレット管理方法として最も適切なものはどれか。
- A. AWS Secrets Managerにシークレットを格納し、自動ローテーション設定とIAMポリシーでアクセスを制御する
- B. AWS Systems Manager Parameter Store の SecureString パラメータにシークレットを格納し、IAMポリシーでアクセスを制御する
- C. Lambda関数の環境変数(KMS暗号化あり)にシークレットを設定し、ローテーション時はコンソールから手動で更新する
- D. シークレットをKMSで暗号化した上でコード内に埋め込み、ローテーションのたびに再デプロイする
解答と解説を見る
正解: A
AWS Secrets Manager(A)は自動ローテーション機能をネイティブに備えており、90日ローテーションをLambdaローテーション関数と組み合わせてコード変更なしで実現できる。またSecrets Managerへのすべての呼び出しはCloudTrailに記録されるため、監査要件も自動的に満たせる。選択肢CのLambda環境変数はKMS暗号化に対応しているが、自動ローテーション機能がなく手動更新が必要なため「自動ローテーション」要件を満たせない。選択肢BのSSM Parameter Store SecureStringは暗号化保存・IAM制御・CloudTrail連携に対応しているが、自動ローテーション機能はなく(Secrets Managerとは異なりローテーションを自前で実装する必要がある)、90日自動ローテーション要件を追加実装なしには満たせない。選択肢DはコードへのシークレットEmbedは最悪の実践であり、ローテーションのたびに再デプロイが必要で運用コストが高く、コードリポジトリにシークレットが混入するリスクもある。
📚 関連サービスの解説: AWS Secrets Manager ・ AWS IAM