Lambda 関数を呼び出す Amazon S3 イベント通知を作成するときに「Unable to validate the following destination configurations (以下の送信先設定を検証できません)」というエラーが表示されるのはなぜですか?

最終更新日: 2021 年 12 月 9 日

Amazon Simple Storage Service (Amazon S3) イベント通知を作成して AWS Lambda 関数を呼び出そうとすると、「Unable to validate the following destination configurations.Not authorized to invoke function (以下の送信先設定を検証できません。関数を呼び出す権限がありません」というエラーが発生するのはなぜですか?このエラーが表示されるのはなぜですか? また、問題を解決するにはどうすればよいですか?

簡単な説明

Amazon S3 バケットに Lambda 関数の呼び出しに必要なアクセス許可がない場合、Lambda は次のエラーを返します。

「Unable to validate the following destination configurations.Not authorized to invoke function (以下の送信先設定を検証できません。関数を呼び出す権限がありません」。

注: 次のいずれかを実行すると、必要なアクセス許可が関数のリソースベースのポリシーに自動的に追加されます。

このエラーが発生する一般的な理由

  • Lambda 関数のリソースベースのポリシーが削除または移動されると、変更はその関数の Amazon S3 イベント通知に保存されます。
  • S3 バケットには、必要なアクセス許可がない Lambda 関数のイベント通知があり、別のイベント通知がバケットに保存されます。
  • 次のいずれかから新しい Amazon S3 イベント通知が追加され、関数のリソースベースのポリシーには必要なアクセス許可がありません。
    AWS SDK
    AWS コマンドラインリファレンス (AWS CLI)
    AWS CloudFormation スタック

注: アクセス許可を更新しても関数が呼び出されない場合は、「Amazon S3 イベント通知が Lambda 関数を呼び出さないのはなぜですか?」を参照してください。

解決方法

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

次に、以下のいずれかを行います。

イベント通知を再作成する

Amazon S3 コンソールからイベント通知を削除します。次に、通知をもう一度追加します

注: Amazon S3 コンソールでイベント通知を再作成すると、Lambda 関数のリソースベースのポリシーに適切なアクセス許可が追加されます。

AWS CLI を使用して、Lambda 関数のリソースベースのポリシーに必要なアクセス許可を追加します。

Lambda AddPermission API を使用して、Lambda 関数のリソースベースのポリシーに必要な呼び出しアクセス許可を追加します。変更をコミットするには、次の AWS CLI コマンドを実行します。

重要: myLambdaFunction を Lambda 関数の名前に置き換えてください。S3StatementId は、ステートメントを同じポリシー内の他のステートメントと区別できるように、一意の値に置き換えます。arn:aws:s3::myS3Bucket はS3 バケットの Amazon リソースネーム (ARN) に置き換えます。accountIdAWS アカウント ID に置き換えます。

$ aws lambda add-permission --function-name myLambdaFunction --principal s3.amazonaws.com \
--statement-id S3StatementId --action "lambda:InvokeFunction" \
--source-arn arn:aws:s3:::myS3Bucket \
--source-account accountId