在预签名的URL到期时触发事件

时间:2019-11-20 06:32:42

标签: amazon-web-services amazon-s3

下面是有关对象创建的事件通知的示例:

s3EventObjectCreated:
    handler: src/handlers/postProcess
    events:
      - s3:
          bucket: 'bucketName'
          event: s3:ObjectCreated:*
          rules:
            - prefix: 'files/'
          existing: true

如何在预签名URL到期时创建事件通知?

因此,如果预签名URL过期,它将触发一个事件并调用我的lambda函数。

3 个答案:

答案 0 :(得分:3)

预先签名的URL在客户端生成,而不涉及Amazon S3。生成预签名URL时,提供的凭据用于创建在一定时间内有效的签名。此签名可用于稍后发出请求。在发出实际请求时,AWS会检查签名是否使用授权的凭证进行,以及签名是否仍然有效。

由于签名是在客户端生成的,因此一旦过期,您将无法让AWS触发任何事情。

要在预签名URL过期时触发操作,您需要一些其他逻辑。例如,您可以确保将每个预签名URL的项目存储在DynamoDB中,并使用DynamoDB's TTL feature触发基于DynamoDB流事件的Lambda函数,该事件是由于从DynamoDB中删除了该项目而导致的。签名的URL到期。

答案 1 :(得分:1)

不能。根据{{​​3}},AWS S3仅发布以下事件的通知:

  • 新对象创建事件
  • 对象移除事件
  • 还原对象事件
  • 减少冗余存储(RRS)对象丢失事件

似乎您希望您的Lambda在S3预签名的URL到期时执行。有一个解决方法。我敢打赌,您的S3网址必须具有预先配置的到期时间。

  1. 如果到期时间小于或等于15分钟,则可以使用SQS延迟队列。每当您生成S3 URL时,您都将延迟expiry_time将消息推送到SQS,并且当该消息在该延迟时间之后在SQS中可见时,它将触发您的Lambda。

  2. 如果到期时间超过15分钟,则可以查看AWS S3 Notifications Doc的选项。或者,您可以使用running lambda on a schedule编写自己的调度程序,并在作业执行时触发lambda。

答案 2 :(得分:-3)

如果要在预签名的URL过期时触发事件,例如,如果有人尝试使用过期的签名URL来从S3存储桶中获取对象,则有几种方法。

反应方式:(首选)

使用过期的URL时,AWS S3会生成错误4XX或5XX,您可以使用cloudtrail /服务器访问日志来确定错误是由于过期的SifnedURL造成的,您可以配置Lambda函数,只要过期的SignedURL为使用。

主动方式:

如其他答案中所述,您需要配置机制以跟踪SignedURL生成和到期之间的时间。但是,如果您生成数百万个SIgnedURL,那么前摄性方法将具有可伸缩性问题。

希望这会有所帮助, 谢谢