【问题标题】:Multi-User application and Azure Storage?多用户应用程序和 Azure 存储?
【发布时间】:2020-01-02 09:37:38
【问题描述】:

我们正在构建一个应用程序,允许用户在 Azure 存储中上传自己的文件(例如图像)。

我们正在使用 Azure 存储,并计划使用容器来分离每个用户的内容。

我有点迷失在关于安全的部分。保护每个用户的容器的最佳方法是什么?例如,每个容器会有不同的键吗?

如果我想显示图像,是直接将其指向 Azure 存储 URL,还是需要一个中间 API 服务从 Azure 存储获取图像然后返回?

【问题讨论】:

    标签: security azure-storage


    【解决方案1】:

    每个存储帐户都有一个密钥,而不是每个容器。您基本上有两个选择 - 每个需要一个中间件

    1:上传文件通过您的中间件。客户端会将文件发送到您的中间件,该中间件知道存储帐户凭据以将文件存储在所需的容器中。

    2:直接上传到 Azure 存储。第二种选择是直接将文件上传到存储帐户。由于您不想向客户端公开存储帐户凭据,因此您需要某种中间件,为您的应用程序提供一个临时 SAS 令牌,允许其上传请求的文件(称为Valet Key pattern)。更多信息:(File upload in Cloud Applications: The Options)

    如果要显示图像,可以将其直接指向 Azure 存储 URL(如果您希望它们是公共可读的),或者您可以再次为每个授权用户返回带有临时 SAS 令牌的 URL...。

    【讨论】:

    • 谢谢马丁。公共选项不是我们想要去的路线,因为存在一些安全问题。中间件方法看起来不错。我们可以重用我们正在使用的 Web API。对于图像的显示,使用这种方法,Web API 将处理图像的每个 URL 并为每个 URL 生成 SAS 令牌然后将其发送回来?这是一个好方法吗?
    • 我认为您还可以为整个用户容器生成一个只读的临时 SAS 令牌并将其发回 - 取决于您将拥有多少图像...
    【解决方案2】:

    在您的情况下,我认为最好的方法是Authorize the storage with Azure AD,在容器级别为不同用户分配 RBAC 角色。然后他们将能够访问自己的容器,请参阅link

    要让用户通过 Azure AD Auth 从应用上传文件,您可以参考此文档 - Authorize access to blobs and queues with Azure Active Directory from a client application

    要显示图像,只需在门户中单击图像(blob)的... -> Generate SAS -> Generate blob SAS token and URL -> 复制Blob SAS URL,您可以直接在浏览器中访问它。

    【讨论】:

    • 谢谢乔伊。不幸的是,不可能为每个用户配置 AD。他们的登录数据在 Azure 之外。
    • @Water 嗯,可惜了。否则它应该是一个很好的解决方案。
    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    相关资源
    最近更新 更多