【问题标题】:Restrict s3 file to Django group user将 s3 文件限制为 Django 组用户
【发布时间】:2014-11-27 14:54:08
【问题描述】:

借助 django-storages 3rd 方应用程序,我的网络应用程序使用 Amazon S3 将所有媒体文件存储在我的 djagno 网络应用程序中。

我的数据库处理文件夹和文件层次结构,每个用户只能看到属于他的组的链接。

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

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

用户 1 将在应用内的页面上看到此内容。 用户 2 将看不到此链接,但如果他试图访问此链接,则该文件没有权限,并且可以轻松下载。

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

是否有基于我的 aws 键的自动解决方案? 我迷路了……

【问题讨论】:

    标签: python django amazon-web-services amazon-s3 django-storage


    【解决方案1】:

    编辑新解决方案:

    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 开发人员,所以我不知道这是否可行)

    【讨论】:

      【解决方案2】:

      您希望为您的 Web 身份验证用户有效地提供单点登录。一种方法,也许是唯一的处理方法,是使用SAML provider。这样做,您会将经过第三方身份验证的用户/组映射到 AWS IAM 用户/组。

      它会起作用,但它需要的不仅仅是点击几下鼠标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-02
        • 1970-01-01
        • 2017-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多