限制Azure存储中特定文件的帐户SAS权限

时间:2016-09-10 23:50:45

标签: azure asp.net-web-api azure-storage-blobs azure-sdk-.net azure-storage-files

我正在开发一个Web应用程序,用户可以上传他们的文件,每个用户都可以设置上传文件的权限,以便访问其他用户。

我想使用Azure文件存储的Azure Blob存储来保存上传的文件。

我需要在保存之前检查并验证上传的文件,但用户应在Web服务器上上传文件,然后Web服务器将验证文件并使用Access Key将其保存到Azure存储。

要使用SAS - Shared Access Signatures, Part 1: Understanding the SAS model中的解释方法访问文件,我想在Web服务器上创建帐户SAS并生成URL,然后用户可以直接从Azure存储下载其可访问文件。

这是访问模型(只是为了读取数据): enter image description here

以下是SAS网址示例:

https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt?sv=2015-04-05&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D

但是,如果用户直接与匿名用户共享URL,他们可以在到期日之前访问该文件,或者他们可以使用URL访问其他文件(或不是?)。

  • 帐号SAS可以限制对特定文件或文件夹的访问吗?
  • 我可以使SAS服务器端到期吗?
  • 这种情况下最好的解决方案是什么?

2 个答案:

答案 0 :(得分:3)

  1. 帐户SAS用于帐户级别,Azure文件存储也支持文件共享级别SAS或文件级别SAS,请改为使用它们。
  2. 要撤消服务器端的SAS,您需要为它们设置共享访问策略。通过删除相应的共享访问策略,可以撤销相关的SAS。但是,服务器最多只能存储5个共享访问策略,这可能无法满足您的要求。此外,共享访问策略目前不支持Account SAS。无论如何,从技术上讲,还有一种方法可以撤销ad hoc SAS,但我认为这不是一个有效的选择:在SAS Provider Service上重新生成相应的存储帐户密钥,用于生成ad hoc SAS。
  3. 在我看来,SAS不适合您的场景,因为SAS旨在以匿名用户之间的纯文本方式共享链接。为了满足您的要求,您需要在您的网站上设置自己的身份验证和授权。所有用户都必须通过您的网站上传/下载文件,而Azure存储只是您网站的存储后端,不应直接向用户公开。

答案 1 :(得分:1)

我们可以使用SAS设置文件权限,使用SAS策略设置启动数据和过期日期。但是,如果您有关于该文件的非常复杂的逻辑。我建议您使用角色权限来执行此操作。