azure - 用于按用户将文档上传到 Azure 并保持私有的选项
问题描述
我们正在 azure 中创建一个多租户应用程序,该应用程序必须在用户/租户之间隔离数据。
每个租户将上传/保存各种文档(主要是 excel 和 csv 文件),然后能够在应用程序中使用/检索这些文件作为一系列计算的输入文件。
我想像这样的结构:
+ users/
|-+ {uid}/
| | — profile_picture.jpg
| |-+ input_data/
| | | — {input_data_id}.xlsx
在使用 Firebase 安全规则的 Cloud Storage 中,我们可以使用如下规则保护谁可以对存储在不同路径中的对象执行哪些操作。
rules_version = "2";
service firebase.storage {
match /b/{bucket}/o {
match /users/{userId}/input_data/{input_data_id} {
allow get: if request.auth.uid == userId ||
allow list, write: if request.auth.uid == userId;
}
}
}
azure 中是否有类似的资源可以执行诸如 firestore 之类的操作?
- 匹配规则
- 根据 UID 编写对象。
- 根据 UID 列出对象。
- 允许基于 UID 下载对象。
我在 2015 年发现了一个类似问题的问题/答案,我想知道答案是否仍然相关,或者现在是否有更好的选择
解决方案
您找到的文章仍然适用。在 Azure 中,没有针对此类场景的 Firebase 规则等内置安全规则。所以你需要自己实现授权。核心思想是为每个租户创建 Blob Containers,容器名称可以是租户 ID,并构建代理 API 以代表用户获取文件。
考虑到Azure 存储的可扩展性和性能目标,您还可以创建一个存储帐户池,然后将每个租户的数据平均分配到多个存储帐户中。但是通过这种方式,您还需要一个单独的表来存储映射信息,以便 API 知道在哪里可以找到数据。
数据结构可以是:
+ StorageAccount1
+ ContainerTenantID/
|-+ {uid}/
| | — profile_picture.jpg
| |-+ input_data/
| | | — {input_data_id}.xlsx
+ ContainerTenantID/
|-+ {uid}/
| | — profile_picture.jpg
| |-+ input_data/
| | | — {input_data_id}.xlsx
+ StorageAccount2
+ ContainerTenantID/
|-+ {uid}/
| | — profile_picture.jpg
| |-+ input_data/
| | | — {input_data_id}.xlsx
关于代理 API,它决定用户可以访问哪些数据。如果使用 Azure AD,它可以从登录用户的令牌中获取租户 ID 和 UID。然后它有足够的信息来决定将哪些数据返回给用户。
推荐阅读
- python-3.x - 如何使用多选下拉值向 Smartsheet 工作表添加新行?
- swift - 是否可以选择将“终端反馈”放入 macOS 的 Swift 应用程序中?
- javascript - 在数据库中进行异步多次更新
- autodesk-forge - Autodesk Forge ../photo-to-3d/v1/file 错误代码 14
- algorithm - 一种算法,用于用 AppleScript 编写的圣诞灯的唯一随机颜色模式
- html - 从 iframe 重定向?
- python-3.x - 过滤 Django 中最常阅读的 4 篇文章
- docker - 部署 Pod 无法连接 ClusterIP 服务
- ruby-on-rails - 在使用 Shrine 和 Rails 加密之前为图像文件设置 mime 类型
- python - 每次满足条件语句时,如何打印列表的一个(不同)部分?