SQL Server 大数据群集 中的密钥版本

适用于: SQL Server 2019 (15.x)

重要

Microsoft SQL Server 2019 大数据群集附加产品将停用。 对 SQL Server 2019 大数据群集的支持将于 2025 年 2 月 28 日结束。 具有软件保障的 SQL Server 2019 的所有现有用户都将在平台上获得完全支持,在此之前,该软件将继续通过 SQL Server 累积更新进行维护。 有关详细信息,请参阅公告博客文章Microsoft SQL Server 平台上的大数据选项

本文详细介绍了密钥版本如何在 SQL Server 大数据群集 中用于密钥管理以及 HDFS 和 SQL Server 密钥的密钥轮换。 本文包含版本如何并入客户密钥的详细信息。

有关保护 SQL Server 大数据群集 安全性的一般信息,请参阅 SQL Server 大数据群集 的安全性概念

有关配置和使用静态加密功能的信息,请参阅以下指南:

HDFS 密钥

对于在 HDFS 中使用静态加密,涉及到以下概念:

  • 加密区域 (EZ):加密区域是 HDFS 中与密钥关联的文件夹。 此文件夹中的所有文件都进行了加密。 SQL Server 大数据群集 中默认预配的 EZ 名为“securelake”。
  • 加密区域密钥(EZ 密钥):命名的对称密钥。 SQL Server 大数据群集 中默认预配的系统托管的 EZ 密钥名为“securelakekey”。 加密区域密钥是使用在 SQL Server 大数据群集 的名称节点 Pod 中运行的 Hadoop KMS(密钥管理服务器)来管理的。 controldb 中存储的主要加密密钥进一步为 EZ 密钥提供了保护(以下部分对此进行了介绍)。 EZ 密钥是在 Hadoop KMS 中通过提取主要加密密钥的公共部分进行加密的,解密请求将发送到控制平面。
  • 加密数据加密密钥:加密区域中的每个文件是由针对该文件生成的数据加密密钥 (DEK) 加密的。 DEK 创建后,它将随数据一起保留。 为了保留 DEK,首先会使用加密区域密钥对它进行加密,然后再随数据一起保留。 DEK 是按文件随机生成的,对称 DEK 的强度与 EZ 密钥的强度相同。

下图展现了 DEK 是如何保护文件的以及 EZ 密钥 securelakekey 是如何保护 DEK 的。

展现了 DEK 是如何保护文件的以及 EZ 密钥 securelakekey 是如何保护 DEK 的

SQL Server 密钥

系统托管的主要加密密钥和 HDFS EZ 密钥存储在 controldb 中,命名约定为 controldb-<#>,例如 controldb-0。 有关详细信息,请参阅使用大数据群集部署的资源

SQL Server 数据库是由对称密钥(也称为数据库加密密钥 (DEK))加密的。 DEK 以加密的格式随数据库一起保留。 DEK 保护程序可以是证书或非对称密钥 。 若要更改 DEK 保护程序,请使用 ALTER DATABASE ENCRYPTION KEY 语句。 SQL Server 中的非对称密钥具有包含指向控制平面内的密钥的 URL 链接的元数据。 因此,所有数据库加密密钥 (DEK) 的加密和解密操作都是在控制器内完成的。 尽管 SQL Server 存储公钥,但仅用于标识非对称密钥,并不会使用公钥进行加密。

SQL Server 密钥

SQL Server 大数据群集 主要加密密钥

在 SQL Server 大数据群集 控制平面中,为了保护加密区域密钥以及在 SQL Server 中预配非对称密钥,引入了主要加密密钥的概念。 主要加密密钥有两个,一个用于 SQL Server,另一个用于 HDFS。 此概念让 SQL Server 大数据群集 控制平面能够使主要加密密钥也驻留在群集外部。 主要加密密钥的属性包括:

  1. 主要加密密钥是非对称 RSA 密钥。
  2. 将针对 SQL Server 主实例创建一个主要加密密钥,还将针对 HDFS 创建另一个主要加密密钥。
  3. 与主要加密密钥对应的公钥始终存储在控制器数据库或 controldb 中。 私钥存储在系统托管的主要加密密钥的控制器数据库中。 对于来自硬件安全模块 (HSM) 或任何其他外部提供程序的加密密钥,私钥不会存储在控制器数据库中(除非外部密钥的应用程序随附有私钥)。 然而,controldb 中不需要私钥,并且 SQL Server 大数据群集 不需要私钥材料。
  4. 使用主要加密密钥的公钥实现的加密操作可以在控制器自身内执行,或者,控制器可以将公钥分发到 Hadoop KMS,使 Hadoop KMS 可以本地执行加密。 解密操作预期由 HSM 等外部密钥提供程序处理。 此设计使我们能够将非对称密钥的敏感部分保留在群集外部,并使这部分受到客户的保护。 这可确保用于解密所有数据的加密根永远不可在 SQL Server 大数据群集 生态系统中用于客户配置的密钥。

不同密钥的存储保护

用于 HDFS 文件和 SQL Server 的 DEK 与 DEK 保护的数据一起存储。 DEK 分别受到 HDFS EZ 密钥或 SQL Server 中非对称密钥的保护。

SQL Server 中非对称密钥的元数据包括控制平面内密钥的 URL。 SQL Server 仅存储非对称密钥的公钥,用于关联控制平面中的密钥。

controldb 中的密钥存储受到 controldb 中列加密密钥的保护。 controldb 存储有关群集的敏感信息,所有敏感信息受到 controldb 中 SQL Server 列加密密钥的保护,该密钥进一步由 Kubernetes 机密中存储的密码提供保护。 有关详细信息,请参阅 Kubernetes 中的机密文档

下图汇总了所涉及的保护。 首先是 HDFS EZ 密钥的存储保护:

HDFS EZ 密钥的存储保护

主要加密密钥的存储保护:

主要加密密钥的存储保护

密钥轮换

HDFS 加密区域密钥

使用 Active Directory 部署 SQL Server 大数据群集 时,HDFS 是使用名为 securelake 的默认加密区域预配的,此默认加密区域由 securelakekey 提供保护。 我们将使用示例中的默认配置,但是可以使用 azdata 预配新的区域和密钥。 securelakekey 由用于 HDFS 的主要加密密钥提供保护,该密钥存储在控制平面中。 从 SQL 2019 CU9 开始,azdata 可用于轮换用于 HDFS 的 EZ 密钥。 轮换 EZ 密钥会导致生成与“securelakekey”同名的新密钥材料,但指向密钥材料的密钥为新的版本。 对于 HDFS 中任何新的加密操作(例如文件写入),EZ 始终使用与 EZ 关联的密钥的最新版本。 对于 EZ 中受较旧版本的密钥保护的文件,可以使用 azdata bdc hdfs encryption-zone reencrypt 命令,从而让所有文件都受到最新版本的 EZ 密钥的保护。

假设 /securelake 中放置了一个名为 file2 的文件。 下图描绘了保护链。

保护链

可以使用 azdata bdc hdfs key roll -n securelakekey 将 securelakekey 轮换到新版本。 轮换不会导致对保护文件的 DEK 进行重新加密。 轮换 Hadoop 密钥会导致生成新的密钥材料,并受到最新版本的 main-encryption-key 的保护。 下图展现了轮换 securelakekey 后系统的状态。

轮换后的保护链

若要确保加密区域中的文件受到轮换的 securelakekey 的保护,请使用 azdata bdc hdfs encryption-zone -a start -p /securelake

下图描绘了重新加密加密区域后系统的状态。

重新加密后的保护链

SQL Server

保护 SQL 数据库的密钥是 DEK,它可以重新生成。 重新生成的过程会导致整个数据库被重新加密。

主要加密密钥轮换

注意

在 SQL Server 2019 CU10 之前,无法轮换主要加密密钥。 从 SQL Server 2019 CU10 开始,可以使用 azdata 命令来实现主要加密密钥的轮换。

主要加密密钥是 RSA 2048 位密钥。 主要加密密钥的轮换将执行以下操作之一,具体因密钥的源而异:

  1. 如果请求将主要密钥轮换为系统托管的密钥,则创建新密钥。 系统托管的密钥是非对称密钥,生成并存储在控制器内。
  2. 创建对外部提供的密钥的引用,其中非对称密钥的私钥由客户应用程序管理。 尽管客户应用程序不需要私钥,但它应知道如何基于所提供的应用程序的配置来检索私钥。

主要密钥的轮换不会重新加密任何内容。 然后必须轮换 SQL Server 和 HDFS 密钥:

  • 轮换主要密钥后,SQL Server 数据库 DEK 保护程序需要轮换为所创建的主要密钥的新版本。
  • 类似的概念适用于 HDFS。 轮换 HDFS 密钥时,新材料由最新版本的主要密钥进行加密。 旧版本的 EZ 密钥将保持不变。 轮换 HDFS EZ 密钥后,与 EZ 密钥相关联的加密区域需要重新加密,使它们能够被最新版本的 EZ 密钥重新加密。

HDFS 的主要密钥轮换

下图展现了轮换用于 HDFS 的主要加密密钥的过程。 首先是 HDFS 的初始状态:

HDFS 的初始状态

将使用 azdata bdc kms set –key-provider SystemManaged 对主要加密密钥进行轮换。 (请注意,此命令会导致用于 SQL 和 HDFS 的主要加密密钥都被轮换,即使它们在控制平面内是不同的密钥。)使用 azdata bdc kms 命令后:

使用 azdata bdc kms 命令后

若要使用新版本的 HDFS 主要加密密钥,可以使用 azdata bdc hdfs key roll 命令,这会使系统随后进入以下状态。 轮换 securelakekey 后:

轮换 securelakekey 后

轮换 securelakekey 将导致创建新版本的 securelakekey,并受到主要加密密钥的保护。 若要确保 securelake 中的文件由 securelakekey@2 加密,需要重新对 securelake 加密区域进行加密。 重新加密加密区域后:

重新加密加密区域后

SQL Server 的主要密钥轮换

SQL Server 主要加密密钥安装在 SQL Server 主实例的主数据库中。

下图展示了轮换用于 SQL Server 的主要加密密钥的过程。

新安装 SQL Server 大数据群集 后,SQL Server 中将不会预配非对称密钥。 在 SQL Server 处于初始状态时,数据库可能会使用证书进行加密,但是 SQL Server 主实例管理员可以控制这一方面。

SQL Server 的初始状态

将使用 azdata bdc kms set –key-provider SystemManaged 对主要加密密钥进行轮换。 (请注意,此命令会导致用于 SQL 和 HDFS 的主要加密密钥都被轮换或者在没有密钥的情况下会创建密钥,即使它们在控制平面内是不同的密钥。)

SQL Server 主要加密密钥安装在 SQL Server 主实例的主 DB 中

可使用以下 T-SQL 查询在 sys.asymmetric_keys 系统目录视图中查看非对称密钥。

USE master;
select * from sys.asymmetric_keys;

非对称密钥将采用“tde_asymmetric_key_<version>”的命令约定显示。 然后,SQL Server 管理员可以使用 ALTER DATABASE ENCRYPTION KEY 将 DEK 的保护程序更改为该非对称密钥。 例如,使用以下 T-SQL 命令:

USE db1;
ALTER DATABASE ENCRYPTION KEY ENCRYPTION BY SERVER ASYMMETRIC KEY tde_asymmetric_key_0;

现在,DEK 保护程序已更改为使用非对称密钥:

DEK 保护程序更改为使用非对称密钥后

如果重新执行 azdata bdc kms set 命令,SQL Server 中的非对称密钥将显示 sys.asymmetric_keys 中的另一个条目,格式为“tde_asymmetric_key_<version>”。 此 azdata 命令可用于再次更改 SQL Server 数据库的 DEK 保护程序。

客户提供的密钥

凭借在 SQL Server 大数据群集 中引入外部密钥的功能,主要加密密钥使用客户部署的应用程序来提取公钥。 轮换和使用 HDFS 密钥时,对 HDFS 密钥进行解密的调用将发送到控制平面,然后使用客户所提供的密钥标识符重定向到应用程序。 对于 SQL Server,解密请求由控制平面发送并处理,因为它有公钥。 从 SQL 发起的解密 DEK 的请求也会发送到控制平面,然后会重定向到 KMS 应用程序。

安装客户密钥后

下图展示了在控制平面中配置外部密钥时的交互:

在控制平面中配置外部密钥时的交互

安装密钥后,不同有效负载的加密和解密会受到主要加密密钥的保护。 此保护与系统托管的密钥类似,只是路由到控制平面的解密调用随后会路由到 KMS 插件应用。 KMS 插件应用会将请求路由到合适的位置,例如 HSM 或其他产品。

另请参阅