【问题标题】:Are Azure Blobs encrypted when they are stored in Microsoft?Azure Blob 在 Microsoft 中存储时是否已加密?
【发布时间】:2013-06-08 19:30:32
【问题描述】:

我正在开发一个在 Azure Blob 存储中存储文本的站点。文本可能是敏感的(不一定是密码,而是个人信息)。我正在尝试决定是否应该在将文本存储到 Azure Blob 存储之前对其进行加密。我的理解是,如果 Azure 密钥和帐户名泄露并且恶意用户下载 blob,这可以降低暴露数据的风险。我的问题是:

  • Azure Blob 已经在 Microsoft 的磁盘上被加密了吗?帐户密钥是用作加密密钥,还是仅用作访问令牌?
  • 如果我要在 Azure 网站中使用 .NET AES 算法执行此操作,我应该将用于生成密钥的加密密钥或密码/salt 存储在哪里? (也就是说,web.config 是一个合适的地方吗?)

【问题讨论】:

    标签: security azure azure-blob-storage azure-web-app-service


    【解决方案1】:

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

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

    2016 年 4 月编辑

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

    该服务适用于标准和高级存储帐户中的 blob。更多详情在this post

    【讨论】:

    • 我们可能应该更新这个答案以包括新的 Azure 存储服务加密功能,这些功能在发布时不可用。 azure.microsoft.com/en-us/documentation/articles/…
    • 由于这个答案现在已经非常过时(即使在预览中更新了有关加密的更新),是否应该重写整个答案?这个帖子在谷歌搜索中排名很高,很多人仍然会登陆这里。它应该包括有关默认情况下启用静态加密之类的信息,并且您现在也可以使用自己的密钥(BYOK)
    【解决方案2】:

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

    【讨论】:

    • +1 从 blob 存储上传/下载时动态加密有什么缺点吗?例如。转移时间需要更长的时间?
    猜你喜欢
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 2012-05-24
    • 2018-12-17
    • 2011-02-08
    • 2018-01-01
    • 2019-10-13
    相关资源
    最近更新 更多