我正在开发一个在 Azure Blob 存储中存储文本的网站。文本可能很敏感(不一定是密码,而是个人信息)。我正在尝试决定是否应该在将文本存储到 Azure Blob 存储之前对其进行加密。我的理解是,如果 Azure key 和帐户名泄露并且恶意用户下载了 blob,这可以降低数据泄露的风险。我的问题是:
- 当 Azure Blob 存储在 Microsoft 的磁盘上时,它们是否已被加密?帐户 key 是用作加密 key ,还是仅用作访问 token ?
- 如果我要使用 .NET AES 算法在 Azure 网站中执行此操作,我应该在哪里存储用于生成 key 的加密 key 或密码/盐? (即 web.config 是一个合适的地方吗?)
最佳答案
Blob 内容未加密;这一步完全取决于你。 Blob 访问由访问键严格控制(有两个键:主键和辅助键,两者作用相同)。以下是我对此的看法:
- 如果存储访问是您的应用层独有的(即 key 永远不会暴露在您的应用之外),则风险相当低(与将 key 嵌入到桌面或移动应用中,或将其与在线存储一起使用)浏览器服务)。有人需要以某种方式窃取您的 key (例如窃取源/配置文件)。您提到使用不提供 RDP 访问权限的网站,可以进一步保护您正在运行的代码。
- 如果您的 key 因某种原因被泄露,您可以通过生成新 key 来使该 key 失效。这会立即切断任何持有旧 key 的人的访问权限。作为一般模式,当我使用外部工具(例如 Cerebrata 工具)时,我总是使用我的辅助 key ,为我的应用程序保留我的主 key 。这样,我就可以随时使我的辅助 key 失效,从而防止这些工具访问我的存储空间,但不会干扰我正在运行的应用程序。
- 如果您需要向客户公开特定的 blob,有两种方法可以实现。首先,您可以将 blob 下载到 Web 服务器,然后向下传输内容。第二:您可以为特定 blob 生成共享访问签名 (SAS),然后将生成的 URI 提供给用户(例如,作为
href
标记的<a>
)。通过使用 SAS,您可以允许在给定的时间内(例如 10-20 分钟)访问私有(private) blob。即使有人获取 SAS URL 并将其发布到 Internet,它也仅在您指定的时间窗口内有效(它经过哈希处理,防止修改)。 - 考虑为多个应用(甚至每个应用)使用多个存储帐户。这样,如果存在安全漏洞,损害仅限于特定的受损存储帐户。
编辑 2016 年 4 月
刚刚宣布的静态数据 Azure 存储服务加密现已推出预览版,可用于通过 Azure 资源管理器 (ARM) 创建的任何存储帐户。它不适用于“经典”存储帐户(上面我的答案的其余部分仍然适用)。您可以通过门户为您的存储帐户启用/禁用加密:
该服务适用于标准和高级存储帐户中的 blob。更多详情见this post .
关于security - Azure Blob 存储在 Microsoft 中时是否已加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17069691/