Jay*_*dse 15 ruby acl private heroku amazon-s3
我启动了一个使用Amazon S3进行图像托管的示例应用程序.我设法哄它上班.该应用程序在github.com上托管.该应用程序允许您使用个人资料照片创建用户.上传照片时,Web应用程序将其存储在Amazon S3而不是本地文件系统上.(如果你在heroku.com上主持,这非常重要)
但是,当我在页面的浏览器中执行"查看源"时,我注意到图片的URL是我分配给应用程序的S3存储桶中的Amazon S3 URL.我剪切并粘贴了URL,并且能够在同一浏览器中查看图片,并且在另一个浏览器中,我没有打开会话到我的网络应用程序或亚马逊S3.
有没有什么方法可以限制对该URL(和图像)的访问,以便只有登录到我的应用程序的浏览器才能访问它?
我发现的有关亚马逊ACL的大多数信息仅涉及只有所有者或通过亚马逊或AmazonS3认证的用户组或匿名访问者的访问权限.
编辑----更新2010年7月7日
亚马逊刚刚宣布了更多限制访问S3对象和存储桶的方法.除了其他方法之外,您现在可以通过限定HTTP引用来限制对S3对象的访问.这看起来很有趣......我不能等到他们更新他们的开发者文档.
对于隐私实际上重要的文件,我们按如下方式处理:
http://myapp.com/download/{s3-path},download对应于控制器(在MVC意义上)使用此方法,您最终会使用比您需要的更多带宽,但您仍然可以节省存储空间.对我们来说,这是有效的,因为我们倾向于以比带宽更快的速度耗尽存储空间.
对于隐私只是重要的文件,我们生成一个随机哈希,我们用于URL.这基本上是通过默默无闻的安全性,你必须要小心你的哈希很难猜测.
但是,当我在页面的浏览器中执行"查看源"时,我注意到图片的URL是我分配给应用程序的S3存储桶中的Amazon S3 URL.我剪切并粘贴了URL,并且能够在同一浏览器中查看图片,并且在另一个浏览器中,我没有打开会话到我的网络应用程序或亚马逊S3.
请记住,这与存储在文档根目录中其他位置的任何图像没有什么不同.您可能需要也可能不需要您正在寻找的那种安全性.
小智 6
亚马逊的Ruby SDK(https://github.com/aws/aws-sdk-ruby)提供了有用的方法,可以轻松完成."url_for"可以为其他私有S3对象生成临时可读URL.
以下是如何创建一个在5分钟后过期的可读URL:
object = AWS :: S3.new.buckets ['BUCKET'].objects ['KEY']
object.url_for(:read,:expires => 300).to_s
AWS文档: http ://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html#url_for-instance_method
S3 是一项单独的服务,不知道您的会话。
通用解决方案是认识到为每个资产分配一个单独的、唯一的、非常长且随机的密钥(构成该资产的 URL 的一部分)的好处和安全属性。如果您愿意,您甚至可以分配一个具有 512 个有效随机位的密钥,并且该 URL 将在很长一段时间内保持不可猜测的状态。
t有权访问资产的人可以简单地复制该资产以供将来参考,因此允许该人随时了解 URL 并访问该资产是有意义的。您必须确定这是否足够安全。如果不是,那么 S3 可能不适合您,也许您需要将图像作为二进制列存储在数据库中并将它们缓存在 memcached 中,您可以在 Heroku 上执行此操作。
| 归档时间: |
|
| 查看次数: |
6837 次 |
| 最近记录: |