ある企業のアプリケーションは AWS KMS で暗号化された S3 オブジェクトを読み込む Lambda 関数を持っています。Lambda の実行ロールには s3:GetObject 権限があるにもかかわらず、「Access Denied」エラーが発生しています。原因として最も可能性が高いものはどれですか?
- A. Lambda のタイムアウト設定が短く、KMS 呼び出しがタイムアウトしている
- B. S3 バケットが別リージョンにあるためクロスリージョンアクセスが拒否されている
- C. Lambda 関数のメモリが不足してデータを復号できない
- D. Lambda の実行ロールに kms:Decrypt 権限がないか、KMS キーポリシーで Lambda の実行ロールが許可されていない
解答と解説を見る
正解: D
SSE-KMS で暗号化された S3 オブジェクトを取得する際、S3 は自動的に KMS を呼び出してデータキーを復号します。この操作には Lambda 実行ロールに kms:Decrypt 権限が必要です。さらに KMS キーポリシー(リソースベースのポリシー)でも Lambda の実行ロール ARN が明示的に許可されていなければなりません。IAM ポリシー+キーポリシーの両方が必要です。C のメモリ不足は Access Denied ではなく Out of Memory エラーになります。B のクロスリージョン自体は Access Denied の直接原因にはならず別エラーメッセージになります。A のタイムアウトは Task timed out エラーになります。
📚 関連サービスの解説: AWS Lambda ・ AWS KMS