将s3文件限制为Django group us

2024-06-26 19:54:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在django storages第三方应用程序的帮助下,我的web应用程序使用amazons3将所有媒体文件存储在我的djagno web应用程序中。在

MyDB处理文件夹和文件层次结构,每个用户只看到属于其组的链接。在

但是!对S3中的其他文件夹没有权限。在

例如: 用户1:组是group1 用户2:组是组2 s3链接:https://s3.amazonaws.com//media/group1/folder1/1.png

用户1将在应用程序内的页面上看到这一点。 用户2看不到这个链接,但是如果他试图访问这个链接,这个文件就没有权限了,很容易下载。在

我的目标是限制每个组的文件夹权限。在

有没有基于我的aws密钥的自动解决方案? 我迷路了。。。在


Tags: 文件django用户文件夹web应用程序权限s3
2条回答

编辑新解决方案:

amazonsdk提供了预签名的Url特性。 有了这个,你可以为你的用户生成一个特定文件的临时url。在

所以用例场景是这样的。 S3图像仍然是私有的。 当用户请求其图像时,您首先将所有链接传递给生成临时链接的签名处理程序。(这些都将过期,并且有足够的加密和保护,所以不可能有人劫持这样的链接)。在

用户可以直接从亚马逊浏览器中加载文件。在

旧解决方案

另一个解决方法可能是将所有文件存储在s3中,而不进行公共访问。 然后为应用程序创建一个IAM角色,并授予该角色访问bucket的权限。 然后创建一个方法来读取应用程序中的S3文件,并在用户有权限的情况下将它们提供给用户。在

简单的例子。在

S3文件路径

//媒体/group1/folder1/1.png

请求=MyWebMethod/GetFile?internalPath=“folder1/1.png”

{

Int用户标识=customAuthentication.getUserId()

String CompletePath=“媒体/组”+userId+“/”+内部路径

变量图像=AwdSdkClient.getFileFromS3(完整路径)

返回图像

}

因此默认情况下,每个用户只能在其组内请求文件。在

一种更高级的方法,不是将文件实际提取到服务器,而是创建某种中间数据流管道到文件。(我不是Django开发者,所以我不知道这是否可行)

您希望有效地为您的web认证用户提供单点登录。一种方法,也许唯一的方法是使用SAML provider。这样,您将把第三方身份验证的用户/组映射到AWS IAM个用户/组。在

它可以工作,但它将需要更多的鼠标点击。在

相关问题 更多 >