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

最終更新日: 2020 年 10 月 6 日

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

簡単な説明

通常、このエラーは、S3 バケットに Lambda 関数を呼び出すアクセス許可がないことを意味しています。必要なアクセス許可は、Amazon S3 コンソールを使用して Lambda のイベント通知を設定したり、Lambda コンソールから関数にトリガーを追加したりするときに、関数のリソースベースのポリシーに自動的に追加されます。

このエラーは、次の場合に発生することがあります。

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

注意 : アクセス許可を修正しても、Amazon S3 イベント通知が Lambda 関数をトリガーしない場合は、Amazon S3 イベント通知で Lambda 関数がトリガーされないのはなぜですかを参照してください。

解決方法

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

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

Amazon S3 コンソールからイベント通知を削除し、通知を再度追加します。これにより、Lambda 関数のリソースベースのポリシーに適切なアクセス許可が追加されます。

AWS CLI を使用してアクセス許可を追加する

Lambda AddPermission API を使用して、Lambda 関数のリソースベースのポリシーに適切な呼び出しアクセス許可を追加します。AWS CLI から次のコマンドを実行します。

$ 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

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

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

詳細については、イベントを発行するように Amazon S3 を設定する および AWS のサービスへ関数アクセスを付与するを参照してください。