在Web App中公开AWS S3签名URL?

sil*_*gon 5 security hash amazon-s3 hmac amazon-web-services

我一直试图在几个小时内找到这个问题的答案,但还没有想出一个确凿的答案.我希望有人能够对我的问题有所了解.请考虑以下示例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-凭证= AKIAI6CJYFYSSWMXXXXX/20170920/EU-西-2/S3/aws4_request&X-AMZ-SignedHeaders =宿主&X-AMZ-签名= 0481296b70633de9efb2fce6e20751df2f55fd79b5ff9570c02ff8f587dce825

在我的具体示例中,上面的URL是在S3上查看图像的请求,我直接在HTML img标记中公开,并且Amz-Credential中的用户具有读取和写入权限.该URL也设置为在10分钟后过期.

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

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

我知道我可以创建一个只读用户(额外的复杂性)或隐藏在我自己的Web应用程序上的控制器操作后面的S3 URL(需要2个加载每个图像的请求,使其效率低下),但我宁愿了解我是否在诉诸这些方法之前,目前的做法是否安全.

谢谢你的时间.:)

Tom*_*elo 3

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

只要确保您使用只读权限签署网址,我想您就可以了。