Python 将s3文件限制为Django组用户

Python 将s3文件限制为Django组用户,python,django,amazon-web-services,amazon-s3,django-storage,Python,Django,Amazon Web Services,Amazon S3,Django Storage,我的web应用程序使用Amazon S3在django storages第三方应用程序的帮助下存储我的djagno web应用程序中的所有媒体文件 MyDB处理文件夹和文件层次结构,每个用户只看到属于其组的链接 但是!S3上没有其他文件夹的权限 例如: 用户1:组是group1 用户2:组是group2 s3链接:/media/group1/folder1/1.png 用户1将在其应用程序内的页面上看到这一点。 用户2将看不到此链接,但如果他尝试访问此链接,则该文件没有权限,可以轻松下载 我的目

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

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

但是!S3上没有其他文件夹的权限

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

用户1将在其应用程序内的页面上看到这一点。 用户2将看不到此链接,但如果他尝试访问此链接,则该文件没有权限,可以轻松下载

我的目标是将文件夹权限限制为每个组

有基于我的aws密钥的自动解决方案吗?
我迷路了…

您希望有效地为经过web身份验证的用户提供单点登录。一种方法,也许是处理这一问题的唯一方法,是使用。这样,您将把第三方认证的用户/组映射到用户/组


它可以工作,但需要的不仅仅是几次鼠标点击。

编辑新解决方案:

AmazonSDK提供了预签名Url功能。 使用此功能,您可以仅为您的用户生成指向一个特定文件的临时URL

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

最终用户可以直接从amazon加载和查看浏览器中的文件,就像什么都没发生一样

旧解决方案

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

简单的例子

S3文件路径

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

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

{

Int userId=customAuthentication.getUserId()

String CompletePath=“media/group”+userId+“/”+internalPath

var image=AwdSdkClient.getFileFromS3(CompletePath)

返回图像

}

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

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