为什么我的 Amazon SNS 主题未收到 Amazon S3 事件通知?

上次更新时间:2021 年 6 月 21 日

创建了一条 Amazon Simple Storage Service (Amazon S3) 事件通知,以便通过我的 Amazon Simple Notification Service (Amazon SNS) 主题发送消息。但是,当 Amazon S3 存储桶中发生新事件时,我的 Amazon SNS 主题不会发布消息。我该如何排查此问题?

解决方法

确认您的 Amazon S3 事件类型配置正确

在配置 Amazon S3 事件通知时,您必须指定哪些受支持的 Amazon S3 事件类型会导致 Amazon S3 发送通知。如果 S3 存储桶中发生了您未指定的事件类型,则 Amazon S3 不会发送通知。

确认您的对象键名称筛选条件采用 URL 编码(百分比编码)格式

如果您的事件通知被配置为使用对象键名称筛选,则仅针对具有特定前缀或后缀的对象发布通知。

如果在前缀或后缀中使用任何特殊字符,您必须以 URL 编码(百分比编码)格式输入它们。如需了解更多信息,请参阅对象键命名指南处理对象元数据

注意:通配符 ("*") 不能在筛选条件中用作前缀或后缀来表示任何字符。

确认您已赋予 Amazon S3 必要权限,以发布消息到您的主题

您的 Amazon SNS 主题的基于资源的策略必须允许 Amazon S3 存储桶向主题发布消息。

检查您的主题的 AWS Identity and Access Management (IAM) 策略,以确认它有必要的权限,并按照需要进行添加。如需了解更多信息,见赋予权限以便向 SNS 主题或 SQS 队列发布消息

(对于激活服务器端加密 (SSE) 的主题)确认您的主题有必要的 AWS Key Management (AWS KMS) 权限

您的 Amazon SNS 主题必须使用客户管理的 AWS KMS 密钥。此 KMS 密钥必须包含自定义密钥策略,此策略授予 Amazon S3 足够的密钥使用权限。

要设置必要的 AWS KMS 权限,请执行以下操作:

1.    创建一个新的由客户管理的 KMS 密钥,并且包含访问 Amazon S3 的必要权限

2.    使用刚创建的自定义 KMS 密钥为您的 Amazon SNS 主题配置 SSE

3.    配置 AWS KMS 权限,允许 Amazon S3 向您的已加密主题发布消息

允许 Amazon S3 向已加密的 Amazon SNS 主题发布消息的 IAM 策略声明示例

{
"version": "2012-10-17",
"statement": [{
    "effect": "allow",
    "principal": {"service": "s3.amazonaws.com"},
    "action": ["kms:generatedatakey*", "kms:decrypt"],
    "resource": "*"
}]
}

这篇文章对您有帮助吗?


您是否需要账单或技术支持?