跳至内容

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

2 分钟阅读
0

我创建了一个 Amazon Simple Storage Service (Amazon S3) 事件通知,以通过 Amazon Simple Notification Service (Amazon SNS) 主题发送消息。但是,我的 Amazon S3 存储桶中的新事件通知并未向 Amazon SNS 主题发布消息。

解决方法

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

在配置 Amazon S3 事件通知时,必须指定支持的 Amazon S3 事件类型,以使 Amazon S3 发送通知。如果 Amazon S3 存储桶中出现了未指定的事件类型,则 Amazon S3 不会发送通知。

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

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

如果您在前缀或后缀中使用特殊字符,则必须以 URL 编码(百分比编码)格式输入这些字符。有关详细信息,请参阅 Object key naming guidelinesWorking with object metadata

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

确认您已向 Amazon S3 授予了向您的主题发布消息所需的权限

您的 Amazon SNS 主题的基于资源的策略必须允许 Amazon S3 存储桶向该主题发布消息。检查您的主题的 AWS Identity and Access Management (IAM) 策略,确认其具有所需的权限,并在必要时授予权限

对于使用 SSE 加密的主题,确认您的主题具有 AWS KMS 权限

如果您在 SNS 主题上激活了服务器端加密 (SSE),则您的主题必须使用客户自主管理型 AWS Key Management (AWS KMS) 密钥。AWS KMS 密钥必须包含一个自定义密钥策略,以向 Amazon S3 授予使用该密钥的权限。

要设置所需的 AWS KMS 权限,请完成以下步骤:

  1. 创建新的客户自主管理型 AWS KMS 密钥和密钥策略

  2. 编辑密钥策略以包含以下语句,以便允许 Amazon S3 向已加密的 SNS 主题发布消息:

    {
        "version": "2012-10-17",
        "statement": [
            {
                "effect": "allow",
                "principal": {
                    "service": "s3.amazonaws.com"
                },
                "action": [
                    "kms:generatedatakey*",
                    "kms:decrypt"
                ],
                "resource": "*"
            }
        ]
    }
  3. 使用 AWS KMS 密钥为 Amazon SNS 主题配置 SSE

使用 CloudWatch 指标进行其他故障排除操作

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

如果 NumberOfMessagePublished 指标存在,请检查 NumberOfNotificationsDeliveredNumberOfNotificationsFailed 指标。这两个指标显示 SNS 主题是否将消息传送到了订阅端点。

为了帮助您进行故障排除,您还可以为 SNS 主题配置传送状态日志记录

相关信息

Allow Amazon S3 event notifications to publish to a topic

AWS 官方已更新 1 年前