如何使用s3存储桶URL安全地访问应用程序中的文件

时间:2018-04-05 16:12:33

标签: amazon-web-services amazon-s3

在我的应用程序中,我们必须使用直接pdf存储区s3点击图标,在新标签页中打开一些url个文件,如下所示:

http://MyBucket.s3.amazonaws.com/Certificates/1.pdf?AWSAccessKeyId=XXXXXXXXXXXXX&Expires=1522947975&Signature=XXXXXXXXXXXXXXXXX

我觉得这样做并不安全,因为用户可以看到广告管理名称AWSAccessKeyIdExpirationSignature。这仍然被认为是安全的吗?或者有更好的方法来解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

允许用户查看这些参数不是问题,因为;

  1. AWSAccessKeyId可以公开(不要与 SecretAccessKey 混淆)
  2. 您的 SecretAccessKey 会签署过期和签名,因此没有人可以操纵它(aws会针对您的SecretKey验证它)
  3. 由于您没有公共对象且您的存储桶本身不公开,因此用户可以知道您的存储桶名称 - 您始终需要有效的签名才能访问这些对象。
  4. 但我有两个建议给你; 1.使用您自己的域,因此存储桶不可见(如果您使用CloudFornt,则可以使用AWS提供的免费SSL),2。使用HTTPS而不是普通HTTP。

    如果由于任何原因您绝对不希望您的用户看到AWS参数,那么我建议您通过自己的API代理对S3的访问。 (虽然我认为没必要)

答案 1 :(得分:1)

我看到您使用http访问(没有SSL)。您可以使用S3为多个域执行虚拟主机托管。

https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html

并根据您的域名创建签名网址,您就可以开始使用了。

如果您使用的是SSL,则可以使用Cloudfront

并将cloudfront origin配置为指向您的S3存储桶。

希望它有所帮助。