Azure blob存储和安全最佳做法

Azure blob存储和安全最佳做法,azure,azure-storage,azure-storage-blobs,Azure,Azure Storage,Azure Storage Blobs,在探索Azure存储时,我注意到对存储容器的访问是通过共享密钥完成的。我工作的地方有一个问题,即如果开发人员正在为他们正在构建的应用程序使用此密钥,然后离开公司,他们仍然可以登录到存储帐户并删除他们想要的任何内容。解决方法是为帐户重新生成辅助密钥,但是我们必须更改每个使用这些密钥的应用程序中的所有密钥 每个应用程序、每个环境(开发、测试、登台、生产)都有一个完整的存储帐户是否是最佳做法? 是否可以在虚拟网络后面保护存储帐户? 我们是否应该在每个应用程序的容器上使用签名 有没有人有过类似的经历并找

在探索Azure存储时,我注意到对存储容器的访问是通过共享密钥完成的。我工作的地方有一个问题,即如果开发人员正在为他们正在构建的应用程序使用此密钥,然后离开公司,他们仍然可以登录到存储帐户并删除他们想要的任何内容。解决方法是为帐户重新生成辅助密钥,但是我们必须更改每个使用这些密钥的应用程序中的所有密钥

每个应用程序、每个环境(开发、测试、登台、生产)都有一个完整的存储帐户是否是最佳做法? 是否可以在虚拟网络后面保护存储帐户? 我们是否应该在每个应用程序的容器上使用签名


有没有人有过类似的经历并找到了一个很好的模式来处理这个问题?

我有一个稍微不同的场景-外部应用程序,但问题是相同的-数据访问安全

我使用共享访问签名(SA)来授予对容器的访问权

在您的场景中,您可以在容器上为每个应用程序创建共享访问策略,并使用此存储的访问策略生成SA(过期时间较长),您可以通过从容器中删除共享访问策略来随时撤销它。所以在您的场景中,您可以撤销当前SA,并在开发人员离开时生成新的SA。您不能为多个容器生成单个SA,所以如果应用程序使用多个容器,则必须生成多个SA

从开发人员的角度来看,用法保持不变: 您可以使用SAS令牌来创建,或者说它几乎像一个常规的访问密钥

从长远来看,我可能会考虑创建一个内部服务(内部API),负责生成SA并更新它们。通过这种方式,您可以拥有完全自动化的系统,并且访问密钥仅公开给此主服务。然后,您可以使用虚拟网络、证书、身份验证等限制对此服务的访问。如果出现问题(编写该服务的开发人员离开:-),您可以重新生成访问密钥并对其进行更改,但这一次只能在一个地方进行

几件事:

  • 每个应用程序(和/或环境)的存储帐户是一个很好的策略,但您必须注意限制–每个订阅最多100个存储帐户
  • 没有选项限制对虚拟网络存储帐户的访问
  • 单个容器上最多可以有5个共享访问策略

我将不讨论主观/观点的答案,但从客观的角度来看:如果开发人员拥有存储帐户密钥,则他们可以完全访问存储帐户。如果他们离开公司并保留了钥匙的副本?阻止它们的唯一方法是重新生成密钥

您可能会认为,将具有不同存储帐户的应用程序分开会有所帮助。但是,请记住:如果开发人员可以访问订阅,则他们可以访问该订阅中每个存储帐户的密钥


在考虑密钥再生时,请考虑了解密钥本身的应用程序的总表面积。如果存储操作仅仅是服务器端操作,那么更改密钥的影响很小(每次部署中都会有一个小的应用程序更改,同时更新您使用的任何存储浏览工具)。如果将密钥嵌入桌面/移动应用程序以直接访问存储,则必须推出更新的客户端会有更大的问题,但无论如何,您已经存在安全问题。

如果开发人员拥有存储帐户密钥,则使用SAS没有帮助。使用所述密钥,无论是否存在SAS,每个存储帐户对象都可以直接访问。是的,请同意,如果开发人员拥有存储帐户密钥,则除了重新生成它之外,您别无选择。当使用SAS代替帐户密钥时,它会有所帮助,因此它不是一种治疗方法,而是一种预防措施。您这里有不止一个问题。关于存储帐户是否可以限制为vnet的问题应该分开讨论,因为可以简洁地回答。最佳实践?这是征求意见,有几种方法是可行的/实用的。谢谢你的回复。开发人员既然已经实现了RBAC,就不能完全访问门户。。他们只能阅读他们需要查看的信息。仔细看看RBAC现在提供了什么。它控制资源(如存储帐户)的创建/管理/删除。开发人员需要密钥才能在项目上工作,而RBAC目前与存储帐户中对象的访问控制无关。注意我今天说的——这可能会改变。更多信息请参见。我也注意到了这一点。。然而,今天的开发者甚至无法在测试、登台和生产中启动虚拟机和网站。我们只会让读者访问他们只需要的特定机器。。。。