9

I am developing a site that stores text in Azure Blob Storage. The text may be sensitive (not necessarily passwords, but personal information). I am trying to decide whether or not I should encrypt the text before I store it in Azure Blob Storage. My understanding is that this could mitigate a risk of exposing the data should the Azure key and account name get out and a malicious user download the blob. My questions are:

  • Are Azure Blobs already being encrypted when they land on disk at Microsoft? Is the account key used as an encryption key, or just an access token?
  • IF I were to do this in Azure Websites by using the .NET AES algorithm, where should I store the encryption key(s) or passphrase/salt used to generate a key? (ie is web.config an ok place for this?)
4

2 回答 2

15

Blob 内容未加密;这一步完全取决于你。Blob 访问由访问键严格控制(并且有两个键:主键和辅助键,两者工作相同)。以下是我对此的看法:

  • 如果存储访问是您的应用程序层独有的(即,密钥永远不会暴露在您的应用程序之外),风险相当低(与将密钥嵌入桌面或移动应用程序,或将其与在线存储浏览器服务一起使用) . 有人需要以某种方式从您那里窃取密钥(例如窃取源/配置文件)。您提到使用不提供 RDP 访问的网站,进一步保护您正在运行的代码。
  • 如果不知何故,您的密钥被泄露,您可以通过生成一个新密钥来使该密钥失效。这会立即切断任何持有旧密钥的人的访问权限。作为一般模式,当我使用外部工具(例如 Cerebrata 工具)时,我总是使用我的辅助键,为我的应用程序保留我的键。这样,我可以随时使我的辅助密钥失效,防止这些工具访问我的存储,但不会干扰我正在运行的应用程序。
  • 如果您需要向您的客户公开特定的 blob,您有两种方法可以做到这一点。首先,您可以将 blob 下载到您的 Web 服务器,然后将内容流式传输下来。第二:您可以为特定的 blob 生成一个共享访问签名 (SAS),然后将该生成的 URI 提供给用户(例如,作为标签href的 of )。<a>通过使用 SAS,您可以在给定的时间内(例如 10-20 分钟)允许访问私有 blob。即使有人获取了 SAS URL 并将其发布在 Internet 上,它也只会在您指定的时间窗口内有效(它是经过哈希处理的,防止修改)。
  • 考虑多个应用程序(甚至每个应用程序)的多个存储帐户。这样,如果存在安全漏洞,损害仅限于特定的受损存储帐户

编辑 2016 年 4 月

刚刚宣布的用于静态数据的 Azure 存储服务加密现在处于预览阶段,可用于通过 Azure 资源管理器 (ARM) 创建的任何存储帐户。它不适用于“经典”存储帐户(我上面的其余答案仍然适用)。您可以通过门户为您的存储帐户启用/禁用加密:

门户中的存储加密

该服务适用于标准和高级存储帐户中的 blob。更多细节在这篇文章中。

于 2013-06-18T13:43:32.880 回答
6

David 的回答很准确,但对于那些希望实际实施发帖人询问的加密的人,我在Azure Encryption Extensions上整理了一些示例和库。

于 2014-07-30T15:55:37.960 回答