我想解决创建 Amazon Simple Storage Service(Amazon S3)事件通知时出现的以下错误: “创建 Amazon S3 事件通知时无法验证以下目标配置”
简短描述
当不满足以下任何一项条件时,就会出现此错误:
- 创建 Amazon S3 事件通知时,您所指定的目标必须具有基于资源的策略。此策略必须允许 S3 向目标发布通知。
- 目标的区域必须与 S3 桶的区域相同。
- 如果目标采用 AWS Key Management Service(AWS KMS)密钥进行加密,则密钥策略必须允许访问 S3。
当您更新事件通知配置时,Amazon S3 会验证所有事件目标是否存在。S3 还会检查事件目标是否具有所需的基于资源的策略,以允许 S3 根据事件目标类型执行以下操作:
S3 会对新的事件目标以及更新期间未删除的任何现有事件目标执行这些检查。当其中任何一项检查失败时,您可能会收到错误“无法验证以下目标配置”。
解决方法
确保所有事件目标都存在
当桶上的事件目标不存在时,就会出现此错误。
如果您将现有事件通知配置为将事件发送到不再存在的目标,则必须删除这些事件。在更新事件通知配置前,必须删除这些事件。您可能会发现通知当前存在于桶中,而目标已不存在。这可能是因为目标在上次更新事件通知配置时存在,但在上次更新之后被删除。
最佳做法是使用相同的 PutBucketNotificationConfiguration API,删除目标不存在的全部事件。您可以使用 Amazon S3 控制台、AWS 命令行界面(AWS CLI)或 AWS SDK 来运行此操作。
确认这些事件目标具有基于资源的有效策略
请务必向 Amazon S3 授予必要权限,以调用相关 API 向以下对象发布消息:
- Amazon Simple Notification Service(Amazon SNS)主题
- Amazon Simple Queue Service(Amazon SQS)队列
- AWS Lambda 函数
如果您要向桶添加新事件,请确保新事件具有基于资源的有效策略:
有关与 Amazon SNS 主题或 Amazon SQS 队列相关的权限的详细信息,请参阅授予向 SNS 主题或 SQS 队列发布消息的权限。
有关与 AWS Lambda 函数相关的权限的详细信息,请参阅步骤 7.将 Amazon S3 配置为发布事件。
有关更新 Lambda 函数以确保其具有有效策略的信息,请参阅教程: 使用 Amazon S3 触发器调用 Lambda 函数。
**注意:**如果您使用 S3 控制台启用事件通知,则在添加事件之前,S3 会自动尝试为您更新基于资源的策略。
如果对于事件目标,您拥有基于资源的有效策略,但仍然出现相同的错误,请检查所有现有事件目标。确保这些目标也有有效的基于资源的策略。如果在上次更新桶上的事件通知配置后,修改了事件目标的任何基于资源的策略,则会出现错误。在所有权限有效或目标无效的事件被删除前,错误会一直存在。
确保 AWS KMS 密钥策略对 KMS 加密的主题和队列都有效
如果您为 SQS 或 SNS 目标激活 AWS KMS 加密,请更新客户自主管理型密钥策略,以允许 S3 使用该密钥。有关详细信息,请参阅 AWS KMS 密钥策略。
系统不支持 AWS 托管式密钥,例如 aws/sns 和 aws/sqs 密钥。如果您在事件目标使用这些密钥之一,则必须更新目标,才能使用客户自主管理型密钥。然后,更新密钥策略。
相关信息
目标 SNS 主题的 IAM 策略
目标 SQS 队列的 IAM 策略