【发布时间】:2020-01-02 09:37:38
【问题描述】:
我们正在构建一个应用程序,允许用户在 Azure 存储中上传自己的文件(例如图像)。
我们正在使用 Azure 存储,并计划使用容器来分离每个用户的内容。
我有点迷失在关于安全的部分。保护每个用户的容器的最佳方法是什么?例如,每个容器会有不同的键吗?
如果我想显示图像,是直接将其指向 Azure 存储 URL,还是需要一个中间 API 服务从 Azure 存储获取图像然后返回?
【问题讨论】:
我们正在构建一个应用程序,允许用户在 Azure 存储中上传自己的文件(例如图像)。
我们正在使用 Azure 存储,并计划使用容器来分离每个用户的内容。
我有点迷失在关于安全的部分。保护每个用户的容器的最佳方法是什么?例如,每个容器会有不同的键吗?
如果我想显示图像,是直接将其指向 Azure 存储 URL,还是需要一个中间 API 服务从 Azure 存储获取图像然后返回?
【问题讨论】:
每个存储帐户都有一个密钥,而不是每个容器。您基本上有两个选择 - 每个需要一个中间件:
1:上传文件通过您的中间件。客户端会将文件发送到您的中间件,该中间件知道存储帐户凭据以将文件存储在所需的容器中。
2:直接上传到 Azure 存储。第二种选择是直接将文件上传到存储帐户。由于您不想向客户端公开存储帐户凭据,因此您需要某种中间件,为您的应用程序提供一个临时 SAS 令牌,允许其上传请求的文件(称为Valet Key pattern)。更多信息:(File upload in Cloud Applications: The Options)
如果要显示图像,可以将其直接指向 Azure 存储 URL(如果您希望它们是公共可读的),或者您可以再次为每个授权用户返回带有临时 SAS 令牌的 URL...。
【讨论】:
在您的情况下,我认为最好的方法是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,您可以直接在浏览器中访问它。
【讨论】: