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

上次更新日期:2023 年 1 月 13 日

我创建了一条 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 policy 声明示例

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

如果仍未收到有关 SNS 主题的 Amazon S3 事件通知,请检查 Amazon SNS CloudWatch 指标 NumberOfMessagePublished。该指标显示 Amazon S3 是否在发布事件。如果该指标未填充,则 Amazon S3 到 Amazon SNS 的配置存在问题。

如果填充了 NumberOfMessagePublished 指标,则检查 NumberOfNotificationsDeliveredNumberOfNotificationsFailed 指标。这些指标显示消息是否成功传输到您的 Amazon SNS 主题中的订阅端点。

Amazon SNS 支持记录发送到具有 Amazon SNS 端点的主题的通知消息的传输状态。这包括 HTTP、Amazon Kinesis Data Firehose、AWS Lambda、平台应用程序端点、Amazon Simple Queue ServiceAWS SMS。开启 Amazon SNS 主题传输状态日志以进一步解决问题。


这篇文章对您有帮助吗?


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