Django Boto S3 访问

7

我无法弄清楚这个问题。

这是我想要发生的事情...

我有一个应用程序,用户使用boto和django上传文件到S3。我希望这些文件是私有的,并且只能通过我的api凭据在我的应用程序中访问。

因此,如果用户通过我的应用程序上传照片,则他或任何其他人下载它的唯一方法是通过他在我的应用程序上的帐户。这是否可行,如果可以,如何使用boto的acl规则进行设置。我不需要代码,(希望)我可以自己解决,只需要一个步骤指南。

这样说是否有意义?我知道我没有很好地表达,提前道歉。还有,感谢您的帮助。


S3服务是您拥有的单个帐户,还是客户通过您的系统访问自己的S3帐户? - Andrew
3个回答

7

boto的ACL文档在这里。建议使用private预设策略,因为你的用户没有S3账户,这是最简单的方法。当然,你的应用程序必须跟踪哪个用户“拥有”哪些文件(这应该是一个非常简单的Django模型!)。


5
我认为你可能在寻找错误的地方来实现你想要的目标。ACL界面允许您授予权限,但这些权限取决于用户是否拥有Amazon S3帐户。@Alex Martelli建议使用“private”预设策略,我也同意-这将防止除您之外的任何帐户能够访问您的存储桶/密钥。
为了强制用户只能通过您自己的应用程序下载,只需在生成URL时将一个小值传递给“expires_in”参数即可。用户将仅通过您的应用程序获得有效的下载链接,并且该链接将在其下载后失效。

2

django-storages已经有了解决此问题的方法,并且有一个boto后端。除了教育目的,不要自己编写。


你能指出django-storages的ACL功能文档吗?我找不到任何相关资料。 - Paul D. Waite
1
我没有找到相关文档,但是S3BotoStorage类本身似乎允许您传递预定义的ACL名称,用于存储桶(bucket_acl)和新键(acl)。 - Dan Fairs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接