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

时间:2017-09-20 14:01:47

标签: amazon-web-services security amazon-s3 hash hmac

我一直试图在几个小时内找到这个问题的答案,但还没有想出一个确凿的答案。我希望有人能够对我的问题有所了解。请考虑以下示例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中的用户具有读写权限。该URL也设置为在10分钟后过期。

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

我确实怀疑不同的行为会有不同的签名使这不可能,但鉴于我对AWS auth的理解非常有限,我认为最好还是要求以防万一。

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

谢谢你的时间。 :)

1 个答案:

答案 0 :(得分:2)

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

只是make sure您正在使用只读权限对网址进行签名,我猜你还不错。