Tal*_*etz 3 python django amazon-s3 amazon-web-services django-storage
在 django-storages 第三方应用程序的帮助下,我的 Web 应用程序使用 Amazon S3 将所有媒体文件存储在我的 djagno Web 应用程序中。
我的数据库处理文件夹和文件层次结构,每个用户只看到属于他的组的链接。
但!S3 上的其他文件夹没有权限。
例如: 用户 1:组是 group1 用户 2:组是 group2 s3 链接:https: //s3.amazonaws.com/ /media/group1/folder1/1.png
用户 1 将在应用程序内的他的页面上看到此内容。用户 2 将看不到此链接,但如果他尝试访问此链接,则该文件没有权限,并且可以轻松下载。
我的目标是限制每个组的文件夹权限。
有基于我的 aws 密钥的自动解决方案吗?我迷路了...
编辑新解决方案:
Amazon SDK 提供预签名 Url 功能。有了这个,您可以仅为您的用户生成一个特定文件的临时 url。
所以用例场景是这样的。S3 图像仍然是私有的。当用户请求他的图像时,您首先将所有链接传递给生成临时链接的签名处理程序。(这些设置为过期并具有大量加密和保护,因此有人不可能劫持这样的链接)。
最终用户可以直接从亚马逊加载和查看他的浏览器中的文件,就像什么也没发生一样。
旧解决方案
好吧,另一种解决方法可能是将所有文件存储在 s3 中而无需公共访问。然后为您的应用程序创建一个 IAM 角色并授予该角色访问存储桶的权限。然后创建一个方法,该方法将读取您的应用程序中的 S3 文件,并在用户拥有权限时将其提供给用户。
简单的例子。
S3 文件路径
//media/group1/folder1/1.png
请求 = MyWebMethod/GetFile?internalPath="folder1/1.png"
{
int userId = customAuthentication.getUserId();
String CompletePath = "media/group"+userId+"/"+internalPath
var image = AwdSdkClient.getFileFromS3(CompletePath);
返回图像;
}
所以默认情况下,每个用户只能在他的组内请求文件。
更高级的方法不是将文件实际提取到您的服务器,而是创建某种到文件的中间数据流管道。(我不是 Django 开发人员,所以我不知道这是否可行)
| 归档时间: |
|
| 查看次数: |
950 次 |
| 最近记录: |