为什么S3文件上传没有触发SNS主题事件?

4

每次上传文件到S3存储桶后,我希望调用某个特定的HTTPS服务。

我已经创建了S3存储桶和一个验证过的订阅了HTTPS服务作为终端节点的SNS主题。 我可以通过AWS UI在SNS主题上发布消息,并且看到HTTPS服务被按预期调用。 在S3存储桶上,我创建了一个事件,它应该连接存储桶和主题。在第一次尝试时,由于存储桶没有写入主题的权限,所以根据文档,我更改了主题访问策略:

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:eu-central-1:TOPIC_ID:OrderUpdates",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "ACCOUNT_ID"
        },
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:s3:*:*:*"
        }
      }
    }
  ]
}

其中,TOPIC_ID是话题所有者ID,可以在AWS UI中查看,而ACCOUNT_ID则是在AWS UI的账户设置下显示的账户ID。对话题访问策略的更改使我能够在桶上创建事件: enter image description here

当我调用API方法getBucketNotificationConfiguration时,会返回以下信息:

{
    "TopicConfigurations": [
        {
            "Id": "OrderFulfilled",
            "TopicArn": "arn:aws:sns:eu-central-1:TOPIC_ID:OrderUpdates",
            "Events": [
                "s3:ObjectCreated:*"
            ]
        }
    ],
    "QueueConfigurations": [],
    "LambdaFunctionConfigurations": []
}

但是HTTPS服务没有被调用。在这个设置中,我缺少什么可以触发SNS主题订阅每次上传文件到S3存储桶时调用HTTPS服务的操作?
谢谢, -路易丝
3个回答

11

遇到同样的问题,S3上传事件不会触发sns消息,即使我们的sns访问策略已经正确设置。事实证明,由于S3事件是通过CloudWatch Alarms触发的,而目前这些报警无法与SNS 加密主题一起使用,因此我们不能使用启用加密选项。

切换回禁用加密选项,一切正常工作。


1
S3事件到SNS没有工作。我关闭了加密,咚,它工作了!不错。我从来没有想过那个。可恶的。 - Thomas
2
如果您的主题需要加密,您可以使用客户管理的密钥进行加密,并根据AWS支持授予CloudWatch服务访问权限:https://aws.amazon.com/premiumsupport/knowledge-center/cloudwatch-receive-sns-for-alarm-trigger/ - Nick
很遗憾,他们针对 S3 触发事件设置典型的“扇形”架构的标准文档没有提到与内置 SNS 加密机制不兼容的问题。我已经提出了请求,要求他们使文档更加清晰易懂。 - Josh Butler

1
为了重现这种情况,我做了以下操作:
  • 创建了一个Amazon SNS主题,并通过短信订阅了我的手机(一种很好的调试订阅方式!)
  • 创建了一个Amazon S3存储桶,其中包含一个指向Amazon SNS主题的事件

我收到了以下错误信息:

无法验证以下目标配置。目标主题上的权限不允许S3从此存储桶发布通知。

  • 然后我添加了您上面显示的策略(根据我的账户和SNS ARN进行了调整)
  • 这使得事件成功保存

测试

  • 然后我通过上传文件到S3存储桶来测试事件。
  • 我非常快地收到了一条短信

因此,您的配置似乎应该成功启用通过Amazon SNS发送消息。这表明问题在于HTTPS订阅,可能是从SNS发送它或在应用程序中接收它。

我建议您添加电子邮件或短信订阅以验证Amazon SNS是否接收主题并将其转发给订阅者。如果成功,那么您需要调试HTTPS应用程序中消息的接收。

你好John。感谢你的回答。我现在已经添加了一个额外的电子邮件订阅,并验证了它是否通过UI上的主题发布消息来触发。但是当我上传新文件时,我也没有收到电子邮件。你是通过UI上传的吗?你知道还有哪些必须启用的设置吗?我是AWS的新手,所以可能会错误地在设置中阻止存储桶发布消息,因为有很多设置。 - Lull
我完全按照上面所述的做了,只在策略中更改了帐户ID和SNS ARN。我不知道有什么可能会阻止它正常工作。我建议您在配置时“携带一位朋友”,以查看是否漏掉了任何明显的步骤。(我通过S3管理控制台上传。) - John Rotenstein
好的,我尝试使用默认设置从头创建主题和存储桶,现在它可以正常工作了 - 谢谢。 - Lull

-1

是的,如果我想通过编程方式设置它,那么似乎是这样,但我也应该能够通过用户界面进行设置,对吧 - 就像我添加的事件截图中的设置一样? - Lull
好的,我刚刚确认通过UI创建事件与通过API创建TopicConfiguration是相同的。 当我调用getBucketNotificationConfiguration时,我会得到以下结果: { "TopicConfigurations": [ { "Id": "OrderFulfilled", "TopicArn": "arn:aws:sns:eu-central-1:ACCOUNT_ID:OrderUpdates", "Events": [ "s3:ObjectCreated:*" ] } ], "QueueConfigurations": [], "LambdaFunctionConfigurations": [] } - Lull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接