我为什么在创建 Amazon S3 事件通知以触发我的 Lambda 函数时收到错误“无法验证以下目标配置”?

上次更新时间:2019 年 9 月 27 日

我尝试创建 Amazon Simple Storage Service (Amazon S3) 事件通知以触发我的 AWS Lambda 函数。为什么我收到错误“无法验证以下目标配置。未获得调用函数的授权”?

简短描述

通常,此错误表示您的 S3 存储桶不具有调用 Lambda 函数的权限。当您使用 Amazon S3 控制台为 Lambda 配置事件通知时,所需的权限会自动添加到您函数的基于资源的策略中。

当发生以下情况下,可能会发生此错误:

  • Lambda 函数的基于资源的策略被删除或移除,并且您尝试保存对该函数的 Amazon S3 事件通知的更改。
  • S3 存储桶具有一个针对 Lambda 函数的现有事件通知,但该函数基于资源的策略中没有所需的权限,您尝试在该 S3 存储桶中保存新的事件通知。

注意:如果您修复了权限且 Amazon S3 事件通知仍然无法触发您的 Lambda 函数,请参阅为什么我的 Amazon S3 事件通知无法触发我的 Lambda 函数?

解决方法

执行以下任意一项操作:

重新创建事件通知

Amazon S3 控制台中删除事件通知,然后再次添加通知。此操作为您的 Lambda 函数的基于资源的策略增加了适当的权限。

使用 AWS CLI 添加权限

使用 Lambda AddPermission API 为您的 Lambda 函数的基于资源的策略添加适当的调用权限。从 AWS 命令行界面中运行此命令:

$ 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)。将 accountId 替换为您的 AWS 账户 ID

有关更多信息,请参阅配置 Amazon S3 以发布事件授予对 AWS 服务的函数访问权