Amazon web services 在预签名URL过期时触发事件
下面是创建对象时的事件通知示例:Amazon web services 在预签名URL过期时触发事件,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,下面是创建对象时的事件通知示例: s3EventObjectCreated: handler: src/handlers/postProcess events: - s3: bucket: 'bucketName' event: s3:ObjectCreated:* rules: - prefix: 'files/' existing: true 如何在预签名UR
s3EventObjectCreated:
handler: src/handlers/postProcess
events:
- s3:
bucket: 'bucketName'
event: s3:ObjectCreated:*
rules:
- prefix: 'files/'
existing: true
如何在预签名URL过期时创建事件通知
因此,如果预签名URL过期,它将触发一个事件并调用my lambda函数。预签名URL在客户端生成,不涉及Amazon S3。生成预签名URL时,将使用提供的凭据创建在一定时间内有效的签名。此签名可用于以后提出请求。在发出实际请求时,AWS检查签名是否使用授权凭据进行,以及签名是否仍然有效 因为签名是在客户端生成的,所以一旦签名过期,就不能让AWS触发任何东西
要在预签名URL过期时触发操作,您需要一些额外的逻辑。例如,您可以确保在DynamoDB中为每个预签名的URL存储一个项,并在预签名的URL过期后,根据从DynamoDB中删除该项所导致的DynamoDB流事件,使用该项触发Lambda函数。您不能。根据,AWS S3仅发布以下事件的通知:
- 事件创建的新对象
- 对象删除事件
- 还原对象事件
- 减少冗余存储(RRS)对象丢失事件
expiration\u time
,当消息在延迟时间后在SQS中可见时,它就会触发lambda如果您希望在预签名url过期时触发事件,例如,如果有人试图使用过期的已签名url从S3 bucket获取对象,则有两种方法 反应方式:(首选) 当使用过期URL时,AWS S3将生成一个4XX或5XX错误。您可以使用cloudtrail/服务器访问日志来确定错误是由过期的SifnedURL引起的,并且您可以配置一个Lambda函数,该函数可以在使用过期SignedURL时触发 主动方式: 正如其他答案中提到的,您需要配置机制来跟踪SignedURL生成和过期之间的时间。但是,如果生成数以百万计的SIgnedURL,那么主动式方法将存在可伸缩性问题 希望这有帮助,
谢谢虽然我理解你的意思,但实际上触发Lambda函数的并不是DynamoDB的TTL功能。每当某个项过期时,它都会向DynamoDB流发送一个类型为
REMOVE
的事件,然后该事件可能会被Lambda函数使用。我知道你知道这一点,但我只是指出这一点,因为这可能会让不理解这个概念的用户感到困惑。谢谢,编辑。现在我想起来了,这可能不是最好的解决方案,因为AWS不能保证及时删除DynamoDB中TTL过期的项目。是的,但我自己想不出其他任何东西。最初我会采用相同的解决方案。延迟队列也可以用于短期预签名URL(最多15分钟)。无论如何,我怀疑它是否需要是一个实时的东西,OP可能只是想看到一个仪表板/未使用的URL列表。我还是会同意你的解决方案。我能问一下。。。您为什么希望收到此通知?也许有一种更好的方法可以设计不需要此类通知的应用程序。例如,您可以在需要时准确地生成预签名的URL,而不是保留它以供以后使用。如果您能告诉我们更多关于您的情况,我们将能够提供更好的建议。因此,工作流程应该是,在dynamoDB
中生成预签名的URL并创建一个文档。客户端将使用预先签名的URL上传文档,如果成功,我需要在dynamo DB中更新文档。如果客户端未能在过期时间内上传文档(预签名URL已过期),我需要从dynamo DB中删除文档。定期删除处于“未执行”状态且超过某个时间段的所有文档可能是最简单的方法。或者,将过期时间添加到文档中,并使用该时间确定是否删除。@JohnRotenstein提出了一个很好的观点。此外,请记住,涉及预签名URL的请求只需要在URL过期之前启动,而不需要在。。。因此,如果上载在到期前立即开始,但在到期后完成,则需要注意一个竞争条件。如果在到期前开始上传,无论需要多长时间才能完成,上传都会成功。仅供参考,我们决定生成一个预签名URL,只有在上传完成后才能在dynamo DB中创建一个文档。因此,在某种程度上,我们不担心未使用的dynamo DB文档。