在 Electron 应用程序中安全地使用 Azure 存储

问题描述 投票:0回答:1

我正在构建一个视频共享应用程序,用于录制和共享游戏剪辑。我最近添加了云存储作为一项功能,我使用 Azure SDK for Node 与上传视频和元数据的存储帐户进行交互。到目前为止一切都运行良好。我的目标是以每月少量订阅的价格出售云托管功能。

电子客户端获取存储帐户名称和访问密钥。它可以自由管理存储帐户,并且可以无限上传任意数量的内容。这让我很害怕,因为我不想收到一大笔 Azure 账单。

我假设 Azure 中会有控件来创建权限较少的存储帐户和/或施加大小限制的容器。然而,这些似乎都不存在。

所以我的问题;如何安全地将凭据分发给我的用户,以限制对 Azure 存储帐户的读取和写入?

我似乎可以使用 Azure 中的签名机制设置一个身份验证服务器,充当对我的 Azure 存储帐户的每个请求的代理,但感觉这似乎使基本用例变得过于复杂?如果没有简洁的解决方案,其他云提供商是否提供合适的解决方案?

azure electron azure-blob-storage azure-storage
1个回答
0
投票

电子客户端获取存储帐户名称和访问密钥。它 可以自由管理存储帐户并可以上传尽可能多的内容 喜欢没有限制。这让我害怕,因为我不想被击中 大额 Azure 账单。

您的理解是正确的。帐户密钥不仅可以完全控制存储帐户,如果您因某种原因更换帐户密钥,它也会带来巨大的挑战(所有用户都需要下载应用程序的新版本。

我假设 Azure 中会有控件来创建更少的权限 施加大小限制的存储帐户和/或容器。然而, 这些似乎都不存在。

是的。无法创建特权较低的帐户或对开箱即用的容器施加大小限制。这是您需要自己处理的事情。

所以我的问题;如何安全地将凭据分发给我的用户 允许限制对 Azure 存储的读取和写入 帐号?

请查看 Azure 存储的

Shared Access Signature
功能。它允许您创建 SAS URL,为用户提供对您的存储帐户的有时限且权限受限的访问。

您仍然需要实现代理。该代理的职责是生成 SAS 令牌。根据您想要的控制和安全性,您可以通过两种方式实现此代理:

  1. 通过此代理控制上传:基本上,您的用户始终必须通过此代理。当他们尝试上传某些内容时,他们会首先将内容发送到您的代理。内容将得到验证,并从那里写入 Azure 存储。

这种方法的缺点是,所有内容都通过此代理进行路由,您可能需要一个非常强大的基础设施来处理用户的请求,但它非常安全,并为您提供了很多控制权。

  1. 使用代理生成 SAS 令牌:您可以使用此代理仅生成 SAS 令牌。它的工作方式是,当用户尝试在您的应用程序中上传某些内容时,您将发送该数据的元数据(例如文件名、文件类型、大小等),并且您将进行一些验证(例如大小不超过规定)限制或文件类型是受支持的类型等)。验证成功后,您将生成 SAS URL 并将其发送回您的应用程序。然后,您的应用程序代码将使用此 SAS URL 直接上传 Azure 存储中的内容。

但是,请记住,SAS URL 可能会被滥用。您可能会发现此链接对使用 SAS 时的最佳实践很有帮助:https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview#best-practices-when-using-sas .

© www.soinside.com 2019 - 2024. All rights reserved.