Django Boto S3 访问
我搞不清楚这个事情。
我想要实现的是……
我有一个应用,用户可以通过这个应用把文件上传到S3,使用的是boto和django。我希望这些文件是私密的,只有通过我的应用和我的API凭证才能访问。
也就是说,如果用户通过我的应用上传了一张照片,只有他自己或者其他人通过他的账户才能下载这张照片。这样做可能吗?如果可以的话,我该如何使用boto的acl规则来设置?我不需要具体的代码(希望如此),我只是想知道怎么做。
这样说清楚了吗?我知道我表达得不是很好,提前道歉。同时,也谢谢你的帮助。
3 个回答
2
django-storages 这个库已经提供了解决这个问题的方法,并且有一个叫做boto的后端。除非你想学习,否则不要自己去写代码。
5
我觉得你可能在寻找解决方案时方向不太对。ACL接口可以让你设置权限,但这些权限是依赖于用户有亚马逊S3账户的。@Alex Martelli建议使用private
这种预设策略,我也同意——这样可以防止除了你自己以外的任何账户访问你的存储桶和密钥。
如果你想确保用户只能通过你的应用程序下载文件,只需在生成链接时给expires_in
参数传一个小值。这样,用户只能通过你的应用程序获得有效的下载链接,而且这个链接在他们下载后就会失效。
7
boto的访问控制列表(ACL)的文档可以在这里找到。我建议你直接使用private
这个“预设策略”——因为你的用户根本没有S3账户,这样做是最简单的想法。当然,你的应用需要记录哪个用户“拥有”哪些文件(这应该是一个非常简单的Django模型!)。