Azure共享访问签名是一种安全的方式来授予您对数据的访问权限,还是仅仅是偏执狂?

时间:2018-03-21 15:22:36

标签: azure cloud

根据MSFT的this。令牌包含在URL的明文中!!!! 这对我来说感觉非常不安全,任何人都可以在网络中嗅探URL并重用该令牌......

我知道有办法限制访问某些IP范围和时间限制,但使用共享密钥仍然是非常不安全的方式恕我直言......

1 个答案:

答案 0 :(得分:3)

首先:共享访问签名不是共享密钥。它是一个访问密钥,完全不同。

直接从您关联的文章中获取 Using shared access signatures (SAS)

  

共享访问签名提供对存储帐户中资源的委派访问权限。使用SAS,您可以授予客户访问存储帐户中资源的权限,而无需共享您的帐户密钥。这是在您的应用程序中使用共享访问签名的关键点 - SAS是一种在不影响您的帐户密钥的情况下共享存储资源的安全方式。

     

SAS可让您精确控制您授予拥有SAS的客户的访问类型,包括:

     
      
  • SAS有效的时间间隔,包括开始时间和到期时间。
  •   
  • SAS授予的权限。例如,blob的SAS可能会授予对该Blob的读写权限,但不授予删除权限。
  •   
  • Azure存储将接受SAS的可选IP地址或IP地址范围。例如,您可以指定属于您组织的IP地址范围。
  •   
  • Azure存储将接受SAS的协议。您可以使用此可选参数来限制使用HTTPS访问客户端。
  •   

同一篇文章Best practices when using SAS

中也提到了您的确切问题
  
      
  1. 始终使用HTTPS 来创建或分发SAS。如果SAS通过HTTP传递并被截获,则执行中间人攻击的攻击者能够读取SAS,然后就像预期用户可能使用它一样,可能会损害敏感数据或允许数据损坏恶意用户。
  2.   
  3. 尽可能参考存储的访问策略。存储的访问策略使您可以选择撤消权限,而无需重新生成存储帐户密钥。设定未来(或无限)这些目的地的到期日期,并确保定期更新,以便将其进一步推向未来。
  4.   
  5. 在ad hoc SAS上使用近期到期时间。这样,即使SAS遭到入侵,它也只能在短时间内有效。如果您无法引用存储的访问策略,则此做法尤为重要。通过限制上传到blob的时间,近期到期时间也限制了可写入Blob的数据量。
  6.   
  7. 让客户端在必要时自动续订SAS。客户端应在到期前更新SAS,以便在提供SAS的服务不可用时留出时间进行重试。如果您的SAS旨在用于预期在到期期限内完成的少量即时,短期操作,那么这可能是不必要的,因为预计SAS不会续订。但是,如果您的客户端经常通过SAS发出请求,那么到期的可能性就会发挥作用。关键考虑因素是平衡SAS短暂存在(如前所述)的需求与确保客户要求尽早更新(以避免因SAS在成功续订之前到期而导致的中断)的需求。 / LI>   
  8. 小心SAS启动时间。如果您将SAS的启动时间设置为现在,那么由于时钟偏差(根据不同机器的当前时间差异),可能会间歇性地观察到故障前几分钟。通常,将开始时间设置为过去至少15分钟。或者,根本不设置它,这将使其在所有情况下立即生效。同样通常也适用于到期时间 - 请记住,在任何请求中,您可能会在任一方向上观察到长达15分钟的时钟偏差。对于使用2012-02-12之前的REST版本的客户端,未引用存储的访问策略的SAS的最长持续时间为1小时,任何指定长期的策略都将失败。
  9.   
  10. 特定于要访问的资源。安全性最佳做法是为用户提供所需的最低权限。如果用户只需要对单个实体的读访问权限,则授予他们对该单个实体的读访问权限,而不授予对所有实体的读/写/删除权限。如果SAS受到攻击,这也有助于减轻损坏,因为SAS的攻击者手中的能力较低。
  11.   
  12. 了解您的帐户将被用于任何使用情况,包括使用SAS完成的帐户。如果您提供对blob的写入权限,则用户可以选择上传200GB blob。如果你也给他们读取权限,他们可能会选择下载10次,为你带来2 TB的出口费用。同样,提供有限的权限以帮助缓解恶意用户的潜在行为。 8. 使用短命的SAS来减少这种威胁(但要注意结束时的时钟偏差)。   验证使用SAS编写的数据。当客户端应用程序将数据写入存储帐户时,请记住该数据可能存在问题。如果您的应用程序要求在数据准备好之前对其进行验证或授权,则应在数据写入后以及应用程序使用之前执行此验证。此做法还可以防止正确获取SAS的用户或利用泄露的SAS的用户将错误或恶意数据写入您的帐户。
  13.   
  14. 不要总是使用SAS。有时,针对您的存储帐户的特定操作相关的风险超过了SAS的优势。对于此类操作,请创建在执行业务规则验证,身份验证和审核后写入存储帐户的中间层服务。此外,有时以其他方式管理访问更简单。例如,如果要使容器中的所有blob都可公开读取,则可以将容器设置为Public,而不是为每个客户端提供SAS以进行访问。
  15.   
  16. 使用Storage Analytics监控您的应用程序。您可以使用日志记录和指标来观察由于SAS提供商服务中断或无意中删除存储的访问策略而导致的身份验证失败的任何峰值。有关其他信息,请参阅Azure Storage Team Blog
  17.   

总而言之,我 认为SAS是访问存储帐户资源的好方法。关于SAS的一个好处是它还可以限制对资源的访问是只读的,时间限制的等等。这意味着,虽然有人可能能够通过查看您的请求或制作自己的数据来阅读数据(如果他们通过嗅探他们可能会这样做),您可以限制访问是只读的,无论如何都不是太糟糕。

仔细阅读文章和本答案中的所有内容后,是否还有其他问题需要解决?

希望这有帮助。