关于Amazon S3中的已签名URL

时间:2011-10-14 17:14:25

标签: amazon-s3 ruby-on-rails-3.1

所以我一直在阅读签名网址及其一些好处。特别是关于热连接的部分。我们的应用不允许用户从我们的网站嵌入媒体(照片,视频,音频)。所以签名的URL看起来是正确的方向。主要是为了防止热链接。

所以现在我知道我的要求了。我有几个问题。

  1. 这是否意味着我必须向我的存储桶添加策略,拒绝对存储桶中的任何文件或文件夹进行读写访问?
  2. 我是否必须为每次页面访问创建签名URL?因此,假设100个用户访问可以播放歌曲的同一页面。这是否意味着我必须创建100个签名的URL?
  3. 创建S3签名的URL是免费的吗?
  4. 触及第2点。 Amazon S3创建多个签名URL是正常的做法吗?我的意思是如果有1,000个用户最终进入同一个歌曲页面会发生什么......

    你的想法?

    参考:

    对于任何对我如何能够生成签名网址感兴趣的人。基于https://github.com/appoxy/aws gem和http://rubydoc.info/gems/aws/2.4.5/frames处的文档:

    s3 = Aws::S3.new(APP_CONFIG['amazon_access_key_id'], APP_CONFIG['amazon_secret_access_key'])
    bucket_gen = Aws::S3Generator::Bucket.create(s3, 'bucket_name')
    signed_url = bucket_gen.get(URI.unescape(URI.parse(URI.escape('http://bucket_name.s3.amazonaws.com/uploads/foobar.mp3')).path[1..-1]), 1.hour)
    

1 个答案:

答案 0 :(得分:3)

  1. 默认情况下,您的存储分区将设置为私有。当您将文件上传到S3时,您可以设置ACL(权限) - 在您的情况下,您需要确保文件是私有的。

  2. 最简单的解决方案是为每个访问者创建新的签名网址。你可以做一些事情,比如每天生成新的url,将它们存储在某个地方,然后使用它们,但这会增加复杂性,但收效甚微。您可能需要这个的地方也是启用客户端缓存。每次创建新网址时,浏览器都会将其视为不同的文件并下载新的副本。如果这不是您想要的行为,则需要生成将来会过期的URL并重用这些URL - 但这会降低阻止热链接的效果。

  3. 是的,生成网址是免费的。它们是在客户端生成的,不要触摸S3。我想有时间/处理成本,但我创建的网页包含每次访问时生成的数百个网址,并且没有发现任何性能问题。