SQL Server 大数据群集中的外部密钥提供程序
重要
Microsoft SQL Server 2019 大数据群集附加产品将停用。 对 SQL Server 2019 大数据群集的支持将于 2025 年 2 月 28 日结束。 具有软件保障的 SQL Server 2019 的所有现有用户都将在平台上获得完全支持,在此之前,该软件将继续通过 SQL Server 累积更新进行维护。 有关详细信息,请参阅公告博客文章和 Microsoft SQL Server 平台上的大数据选项。
本文提供了有关如何在 SQL Server 大数据群集中配置外部密钥提供程序以进行密钥管理的详细信息。
若要详细了解如何在 SQL Server 大数据群集上使用密钥版本,请参阅:SQL Server 大数据群集中的密钥版本。
若要了解如何配置和使用静态加密,请参阅以下指南:
先决条件
- SQL Server 2019 大数据群集发行说明。 必须使用 CU11+。
- 大数据工具(包含 azdata 20.3.5+)。
- 具有 Kubernetes 管理权限的 SQL Server 大数据群集用户,即 clusterAdmins 角色的成员。 有关详细信息,请参阅在 Active Directory 模式下管理大数据群集访问权限。
- 外部提供程序模板应用程序。 请参阅 SQL Server BDC 静态加密。
使用外部提供程序进行根密钥加密
借助在 SQL Server 大数据群集 中引入外部密钥的功能,主加密密钥使用客户部署的应用程序提取公钥。 轮换和使用 HDFS 密钥时,对 HDFS 密钥进行解密的调用将发送到控制平面,然后使用客户所提供的密钥标识符重定向到应用程序。 对于 SQL Server,由控制平面发送和处理加密请求,因为它具有公钥。 用于从 SQL Server 解密数据加密密钥 (DEK) 的请求也发送到控制平面,然后重定向到与外部提供程序(例如硬件安全模块 (HSM))进行交互的应用程序。
下图展示了在控制平面中配置外部密钥时的交互:
安装密钥后,不同有效负载的加密和解密会受到主要加密密钥的保护。 此保护与系统托管的密钥类似,只是路由到控制平面的解密调用随后会路由到密钥管理服务 (KMS) 插件应用。 KMS 插件应用将请求路由到适当的位置,例如 HSM、Hashicorp Vault 或其他产品。
配置
提供的模板应用程序是用于与外部密钥提供程序进行交互的插件。 需要对此应用程序进行自定义并将其部署到大数据群集,用作与所选外部密钥提供程序的集成点。
在模板应用程序中,有示例介绍如何通过 SoftHSM 使用标准 PKCS11 协议与外部提供程序实现进行集成。 还有示例展示如何使用 Azure Key Vault 和 Hashicorp Vault。 模板应用程序按原样提供,用作参考实现。
以下各部分提供必要步骤,介绍如何配置外部密钥提供程序来充当 SQL Server 数据库和 HDFS 加密区域的加密根密钥。
在外部密钥提供程序中创建一个 RSA 2048 密钥
创建一个包含 2048 位 RSA 密钥的 PEM 文件,并将其上传到外部密钥提供程序中的密钥值存储中。
例如,密钥文件可能会添加到 Hashicorp Vault 中的 KV 存储中(路径为 bdc-encryption-secret),并且机密名称可以是 rsa2048。
自定义集成应用程序并将其部署到大数据群集上
在本地计算机上,导航到包含 kms_plugin_app(大数据群集 AppDeploy 模板应用程序)的文件夹。
选择其中一个模板并将根据你的场景对其进行调整,来定制应用程序:
- 文件 custom_softhsm.py 包含使用 SoftHSM 的参考实现
- 文件 custom_akv.py 包含 Azure Key Vault 示例
- 文件 custom_hcv.py 包含 HashiCorp Vault 示例
注意
请勿更改函数协定或签名,这些是集成点。 如果需要,请仅更改函数实现。
对根据上述模板创建的文件进行相应命名。 例如,将 custom_softhsm.py 另存为 my_custom_integration_v1.py,然后执行自定义。 此方法对下一步来说非常重要。
app.py 函数是加载应用程序的入口点。 在此文件中,需要将第 11 行更改为指向上一步中的自定义文件名(不带 .py 扩展名)。 对于上面的示例,请将:
... import utils from json_objects import EncryptDecryptRequest import custom_softhsm as custom def handler(operation, payload, pin, key_attributes, version): ...
更改为以下值:
... import utils from json_objects import EncryptDecryptRequest import my_custom_integration_v1 as custom def handler(operation, payload, pin, key_attributes, version): ...
在具有 spec.yaml 的文件夹中,使用以下命令将应用程序部署到大数据群集:
azdata app create -s
等待应用程序部署完成,可使用以下命令检查就绪状态:
azdata app list
配置大数据群集以使用外部密钥提供程序
设置
AZDATA_EXTERNAL_KEY_PIN
环境变量以提供允许访问外部密钥提供程序的令牌:export AZDATA_EXTERNAL_KEY_PIN=<your PIN/token here>
注意
集成应用程序部署过程使用令牌访问外部密钥提供程序。 但是,
AZDATA_EXTERNAL_KEY_PIN
变量以加密方式保存在大数据群集控制平面中,以便应用程序可以解释该变量。 还可使用不同的身份验证机制,但需要更改应用程序。 检查 custom*.py python 应用程序以了解正在使用的完整集成逻辑。使用以下
azdata
命令结构在大数据群集中配置密钥。 将所需参数更改为特定实现。 以下示例使用 custom2.py 提供的 HashiCorp Vault 结构。azdata bdc kms update --app-name <YOUR-APP-NAME> --app-version <YOUR-APP-VERSION> \ --key-attributes keypath=<YOUR-KEY-PATH>,vaulturl=http://<YOUR-IP>:<YOUR-PORT>,keyname=<YOUR-KEY-NAME> \ --provider External
--provider External
参数值将大数据群集 KMS 配置为使用集成应用程序作为密钥操作的终结点。使用以下命令验证根加密密钥是否用作外部托管的密钥。
azdata bdc kms show
使用新密钥加密数据库和加密区域
配置后,SQL Server 数据库和 HDFS 加密区域仍然由上一密钥层次结构进行加密。 你需要使用外部管理的密钥进行显式加密。
在 SQL Server 中,安装基于外部管理的密钥的新的非对称密钥。 使用该密钥来加密数据库。
可使用以下 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;
运行以下命令来检查当前加密密钥:
azdata bdc hdfs key describe
获取保护加密区域密钥的密钥版本的相关信息:
azdata bdc hdfs key describe --name <key name>
将密钥滚动到新的外部管理的密钥:
azdata bdc hdfs key roll --name <new key name>
使用以下命令开始加密:
azdata bdc hdfs encryption-zone reencrypt –-path <your EZ path> --action start
使用以下命令验证密钥层次结构:
azdata bdc kms show azdata bdc hdfs key describe