【问题标题】:Best approach to create logical separation between users in Azure Blob Storage在 Azure Blob 存储中创建用户之间逻辑分离的最佳方法
【发布时间】:2021-10-31 20:26:32
【问题描述】:

我正在尝试了解云存储如何与 Azure Blob 存储配合使用。用例是一个微服务架构,带有一些 API 和一个前端,用户可以在其中上传、下载和删除 Blob。

我有两种类型的 blob,一种是所有用户都可以访问的个人资料图片和资产,另一种是用户拥有所有权并且只有某些用户可以查看/下载的 blob(同一公司的用户,网站管理员...)。

我们有 3 个概念,我正试图弄清楚其目的:

  • 存储账号,就是我,Azure账号持有者。
  • 容器,可为每个实体/用户使用一个。
  • 斑点

只能使用我的微服务架构的前端来上传 blob,因此身份验证将是服务与我要构建的新服务的服务。

下载 blobs 它将暴露一个 URL 并且(这里开始怀疑)当用户单击 URL 时,我将检查 AuthService 是否用户记录了会话(如果没有,则重定向到登录前端)然后我需要询问用户是否有权下载此 blob。

我该怎么做?

我考虑点击 URL,使用 AuthService 检查用户是否已登录,下载服务询问用户信息,然后检查 blob 元数据什么是 blob 所有权。这需要在上传过程中将信息存储到 entity_id、user_id 等元数据中。我不知道...

【问题讨论】:

    标签: azure azure-storage azure-blob-storage


    【解决方案1】:

    您是否考虑在前端实现 API/功能以生成用户应有权访问的特定 blob 的 SAS URL? 这样,此 API 可以根据您的意愿验证用户权限,并且如果用户的请求签出,您可以向他提供 SAS URL,该 URL 将在您选择时过期,并且可以对特定 blob 进行读/写/删除(您选择)。

    此外,我强烈建议将保存完全在系统内部的系统数据的存储帐户与用户可访问的 blob 的存储帐户分开。这变成了 SAS URL 确实包含存储帐户 DNS,这会将其暴露给 DDOS 和其他基于 DNS 的攻击,因此我认为您应该将其范围限制为仅允许用户访问所需的 blob。

    【讨论】:

    • 我正在考虑构建一个内部 API,它支持所有方法,但只有自己的服务可以访问,其他服务只公开检查权限的下载端点。关于存储帐户,您的意思是每个用户一个存储帐户?
    • 不,我的意思是用户可以访问的所有 blob 都不会与您在存储帐户中维护的其余数据共享存储帐户。
    • 关于所有内容的内部 API 和另一个通过权限检查公开下载端点的服务 - 我认为这是一个好主意,原因与存储帐户分离相同 - 将面向客户的端点与内部端点分离 - 有利于安全性、清晰度、测试、向后兼容性考虑、灾难恢复等。
    猜你喜欢
    • 2020-11-30
    • 2022-01-11
    • 2022-01-02
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多