Lambda関数がSSM Parameter Storeのパラメータ「/prod/app/db-password」(SecureString型、カスタムCMKで暗号化)を取得しようとしています。 Lambda実行ロールには以下の権限を付与していますが、実行時に「AccessDeniedException」が発生します。 - ssm:GetParameter - ssm:GetParametersByPath 原因として最も可能性が高いのはどれですか?
SSM Parameter StoreのSecureStringパラメータはKMSキーで暗号化されて保存されます。GetParameter APIでWithDecryption=trueを指定して取得する際、SSMは内部でKMSのDecrypt APIを呼び出します。このとき、呼び出し元(Lambda実行ロール)にKMSキーへのkms:Decrypt権限がないとAccessDeniedExceptionが発生します。ssm:GetParameter権限だけでは不十分で、暗号化に使用したCMKへのDecrypt権限も必要です。 選択肢BのGetParameterHistoryはパラメータの変更履歴を取得するAPIであり、現在の値を取得するにはGetParameterを使用します。SecureStringのGetParameter対応は正常に機能します。 選択肢CのVPCエンドポイントについては、VPC外のLambdaはインターネット経由でSSMパブリックエンドポイントにアクセスできるため、VPCエンドポイントなしでも通常はアクセス可能です。 選択肢DのリソースARN指定については、設問では「ssm:GetParameter権限は付与されている」とされているため、ARNワイルドカードが主因である可能性は低く、kms:Decryptの欠如が最も典型的な原因です。