2010-08-17 46 views
7

我不明白这一点。Django博托S3访问

这里就是我想发生......

我有一个用户使用伯特和Django的文件上传到S3的应用程序。我希望这些文件是私人的,只能通过我的应用程序使用我的API凭证访问。

因此,如果用户通过我的应用上传照片,他或其他人可以下载的唯一方式是通过他的帐户在我的应用上。这是可能的,如果是的话,我如何使用boto的acl规则来设置它。我不需要代码,(希望)我可以弄清楚,只是通过如何做到这一点。

这是否有意义?我知道我没有很好地传达它,因此我提前道歉。另外,感谢您的帮助。

+0

S3服务是您拥有的单一账户,还是客户提供他们自己的通过您的系统访问的S3账户? – Andrew 2010-08-17 01:02:30

+0

我拥有的一个帐户 – imns 2010-08-17 01:19:29

回答

7

博托ACL的文档是here。我建议只使用private“罐装政策” - 因为您的用户无论如何都没有S3帐户,这是迄今为止最简单的想法。您的应用程序当然必须跟踪哪个用户“拥有”哪些文件(这应该是非常非常简单的Django模型!)。

5

我想你可能会在错误的领域寻找你想要完成的事情。 ACL接口允许您授予权限,但它们取决于拥有Amazon S3帐户的用户。 @Alex Martelli建议使用private罐装政策,并且我同意—这会阻止任何帐户,但您无法访问您的存储桶/密钥。

为了强制用户只能通过您自己的应用程序进行下载,只需在generating the URL时将小数值传递给expires_in参数即可。用户只能通过您的应用程序获得有效的下载链接,并且该链接在下载后将失效。

2

django-storages已经有这个问题的方法,并有一个boto后端。除了熏染以外,不要推出自己的产品。

+0

您可以指向django-storage的ACL功能的文档吗?我找不到任何。 – 2012-10-17 17:53:28

+1

我看不到任何文档,但看起来S3BotoStorage类本身允许您为桶('bucket_acl')和新密钥('acl')传入罐头ACL名称。 – 2013-01-08 09:16:40