在Web应用程序中暴露AWS S3签名的URL?

问题描述:

我一直在试图找到这个问题的答案现在几个小时,但还没有设法得出一个决定性的答案。我希望这里有人能够阐明我的问题。考虑下面的实施例AWS S3 URL:在Web应用程序中暴露AWS S3签名的URL?

https://some-bucket.s3-eu-west-2.amazonaws.com/uploads/images/some_image.jpg?X-Amz-Expires=600&X-Amz-Date=20170920T124015Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAI6CJYFYSSWMXXXXX/20170920/eu-west-2/s3/aws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=0481296b70633de9efb2fce6e20751df2f55fd79b5ff9570c02ff8f587dce825

以我具体例如,URL是到S3其中我在一个HTML img标记直接暴露观看图像的请求,并且在AMZ用户-Credential具有读取和写入权限。该网址也设置为在10分钟内过期。

是否可以直接通过此URL链接到图像,或者有可能在这10分钟内,来自此URL的签名可用于恶意制作的REST请求中,以删除或修改图像,而不是观看它?

我怀疑不同的动作会有不同的签名,这使得这个不可能,但鉴于我对AWS auth的理解非常有限,我认为最好问一下以防万一。

我知道我可以创建一个只读用户(额外的复杂性)或隐藏S3 URL后面我自己的web应用程序的控制器操作(需要2个总请求加载每个图像,使之成为低效率的),但我会而是要求在采取这些措施之前,先了解我目前的方法是否安全。

谢谢你的时间。 :)

如果您的预签名url具有PUT或DELETE权限,则某人可能会尝试让Signature + AccessKeyId覆盖或删除您的对象。

只是make sure你正在用只读权限对url进行签名,我猜你很好。