Azure Data Lake Storage Gen1 中的数据加密

Azure Data Lake Storage Gen1 中的加密有助于保护数据、实施企业安全策略并满足法规合规性要求。 本文概述了设计,并讨论了实现的一些技术方面。

Data Lake Storage Gen1 支持静态和传输中的数据加密。 对于静态数据,Data Lake Storage Gen1 支持“默认启用”透明加密。 以下是这些术语在一些细节中的含义:

  • 默认启用:创建新的 Data Lake Storage Gen1 帐户时,默认设置将启用加密。 此后,Data Lake Storage Gen1 中存储的数据在存储永久性媒体之前始终加密。 这是所有数据的行为,创建帐户后无法更改该行为。
  • 透明:Data Lake Storage Gen1 在保存之前自动加密数据,并在检索之前解密数据。 加密在 Data Lake Storage Gen1 帐户级别由管理员配置和管理。 不会对数据访问 API 进行更改。 因此,由于加密,与 Data Lake Storage Gen1 交互的应用程序和服务不需要更改。

传输中的数据(也称为动态数据)也始终在 Data Lake Storage Gen1 中加密。 除了在存储到持久性媒体之前加密数据外,数据也始终使用 HTTPS 在传输中受到保护。 HTTPS 是 Data Lake Storage Gen1 REST 接口支持的唯一协议。 下图显示了 Data Lake Storage Gen1 中的数据如何加密:

Data Lake Storage Gen1 中的数据加密示意图

使用 Data Lake Storage Gen1 设置加密

Data Lake Storage Gen1 的加密是在创建帐户期间设置的,默认情况下始终启用。 可以自行管理密钥,也可以允许 Data Lake Storage Gen1 为你管理密钥(这是默认值)。

有关详细信息,请参阅 入门

Data Lake Storage Gen1 中的加密工作原理

以下信息介绍了如何管理主加密密钥,并介绍了可在 Data Lake Storage Gen1 的数据加密中使用的三种不同类型的密钥。

主加密密钥

Data Lake Storage Gen1 提供了两种管理主加密密钥(MEK)的模式。 目前,假设主加密密钥是顶级密钥。 需要访问主加密密钥才能解密 Data Lake Storage Gen1 中存储的任何数据。

管理主加密密钥的两种模式如下所示:

  • 服务管理密钥
  • 客户管理的密钥

在这两种模式下,主加密密钥都通过将其存储在 Azure Key Vault 中来保护。 Key Vault 是 Azure 上的完全托管且高度安全的服务,可用于保护加密密钥。 有关详细信息,请参阅 密钥保管库

下面简要比较了管理 MEK 的两种模式提供的功能。

问题 服务托管密钥 由客户管理的密钥
如何存储数据? 在存储之前始终加密。 在存储之前始终加密。
主加密密钥存储在何处? Key Vault(密钥保管库) Key Vault(密钥保管库)
是否在 Key Vault 之外以明文形式存储任何加密密钥?
Key Vault 是否可以检索 MEK? 不是。 将 MEK 存储在 Key Vault 中后,它只能用于加密和解密。 不是。 将 MEK 存储在 Key Vault 中后,它只能用于加密和解密。
谁拥有 Key Vault 实例和 MEK(主加密密钥)? Data Lake Storage Gen1 服务 你拥有属于自己的 Azure 订阅的 Key Vault 实例。 Key Vault 中的 MEK 可以由软件或硬件管理。
是否可以撤销对 Data Lake Storage Gen1 服务中的主加密密钥 (MEK) 的访问权限? 是的。 可以在 Key Vault 中管理访问控制列表,并删除 Data Lake Storage Gen1 服务的服务标识的访问控制条目。
是否可以永久删除 MEK? 是的。 如果从 Key Vault 中删除 MEK,则 Data Lake Storage Gen1 帐户中的数据不能由任何人解密,包括 Data Lake Storage Gen1 服务。

如果在从 Key Vault 中删除 MEK 之前显式备份了 MEK,则可以还原 MEK,然后可以恢复数据。 但是,如果在从 Key Vault 中删除 MEK 之前尚未备份 MEK,则以后永远无法解密 Data Lake Storage Gen1 帐户中的数据。

除了管理 MEK 及其所在的 Key Vault 实例的这一区别之外,这两种模式的设计其余部分都是相同的。

为主加密密钥选择模式时,请务必记住以下几点:

  • 预配 Data Lake Storage Gen1 帐户时,可以选择使用客户管理的密钥或服务托管密钥。
  • 预配 Data Lake Storage Gen1 帐户后,无法更改模式。

数据加密和解密

数据加密设计中使用了三种类型的密钥。 下表提供摘要:

密钥 缩写 关联到 存储位置 类型 注释
主加密密钥 MEK Data Lake Storage Gen1 帐户 Key Vault(密钥保管库) 非对称 它可以由 Data Lake Storage Gen1 或你管理。
数据加密密钥 DEK Data Lake Storage Gen1 帐户 持久存储,由 Data Lake Storage Gen1 服务管理 对称 DEK 由 MEK 加密。 加密的 DEK 是存储在永久性媒体上的内容。
阻止加密密钥 BEK 数据块 没有 对称 BEK 派生自 DEK 和数据块。

下图说明了这些概念:

数据加密中的密钥

解密文件时的伪算法:

  1. 检查 Data Lake Storage Gen1 帐户的 DEK 是否已缓存并可供使用。
    • 否则,请从永久性存储读取加密的 DEK,并将其发送到 Key Vault 进行解密。 在内存中缓存解密的 DEK。 它现已可供使用。
  2. 对于文件中的每个数据块:
    • 从永久性存储中读取加密的数据块。
    • 从 DEK 和加密的数据块生成 BEK。
    • 使用 BEK 解密数据。

加密数据块时使用的伪算法:

  1. 检查 Data Lake Storage Gen1 帐户的 DEK 是否已缓存并可供使用。
    • 否则,请从永久性存储读取加密的 DEK,并将其发送到 Key Vault 进行解密。 在内存中缓存解密的 DEK。 它现已可供使用。
  2. 为 DEK 中的数据块生成唯一的 BEK。
  3. 使用 BEK,并通过 AES-256 加密加密数据块。
  4. 将加密的数据块存储在永久性存储上。

注释

DEK 始终由 MEK 加密,无论是在永久性媒体上还是缓存在内存中。

密钥轮换

使用客户管理的密钥时,可以轮换 MEK。 若要了解如何使用客户管理的密钥设置 Data Lake Storage Gen1 帐户,请参阅 入门

先决条件

设置 Data Lake Storage Gen1 帐户时,已选择使用自己的密钥。 创建帐户后,无法更改此选项。 以下步骤假定你使用的是客户管理的密钥(也就是说,你已从 Key Vault 中选择了自己的密钥)。

请注意,如果使用默认选项进行加密,则数据始终使用 Data Lake Storage Gen1 管理的密钥进行加密。 在此选项中,无法轮换密钥,因为它们由 Data Lake Storage Gen1 管理。

如何在 Data Lake Storage Gen1 中旋转 MEK

  1. 登录到 Azure 门户

  2. 浏览到存储与 Data Lake Storage Gen1 帐户关联的密钥的 Key Vault 实例。 选择

    Key Vault 的屏幕截图

  3. 选择与 Data Lake Storage Gen1 帐户关联的密钥,并创建此密钥的新版本。 请注意,Data Lake Storage Gen1 目前仅支持将密钥轮换到新版本的密钥。 它不支持切换到其他按键。

    “密钥”窗口的屏幕截图,其中突出显示了“新版本”

  4. 浏览到 Data Lake Storage Gen1 帐户,然后选择 “加密”。

    Data Lake Storage Gen1 帐户窗口的屏幕截图,其中突出显示了“加密”

  5. 消息通知你有新的密钥版本可用。 单击“ 轮换密钥 ”将密钥更新到新版本。

    Data Lake Storage Gen1 窗口的屏幕截图,其中突出显示了消息和轮换密钥

此作需要不到两分钟的时间,由于密钥轮换,预计不会停机。 作完成后,将使用新版本的密钥。

重要

密钥轮换作完成后,旧版密钥不再主动用于加密新数据。 但在某些情况下,访问较旧的数据可能需要旧密钥。 若要允许读取此类旧数据,请不要删除旧密钥