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 大数据群集 中引入外部密钥的功能,主加密密钥使用客户部署的应用程序提取公钥。 轮换和使用 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。

自定义集成应用程序并将其部署到大数据群集上

  1. 在本地计算机上,导航到包含 kms_plugin_app(大数据群集 AppDeploy 模板应用程序)的文件夹。

  2. 选择其中一个模板并将根据你的场景对其进行调整,来定制应用程序:

    • 文件 custom_softhsm.py 包含使用 SoftHSM 的参考实现
    • 文件 custom_akv.py 包含 Azure Key Vault 示例
    • 文件 custom_hcv.py 包含 HashiCorp Vault 示例

    注意

    请勿更改函数协定或签名,这些是集成点。 如果需要,请仅更改函数实现。

  3. 对根据上述模板创建的文件进行相应命名。 例如,将 custom_softhsm.py 另存为 my_custom_integration_v1.py,然后执行自定义。 此方法对下一步来说非常重要。

  4. 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):
    ...
    
  5. 在具有 spec.yaml 的文件夹中,使用以下命令将应用程序部署到大数据群集:

    azdata app create -s
    
  6. 等待应用程序部署完成,可使用以下命令检查就绪状态:

    azdata app list
    

配置大数据群集以使用外部密钥提供程序

  1. 设置 AZDATA_EXTERNAL_KEY_PIN 环境变量以提供允许访问外部密钥提供程序的令牌:

    export AZDATA_EXTERNAL_KEY_PIN=<your PIN/token here>
    

    注意

    集成应用程序部署过程使用令牌访问外部密钥提供程序。 但是,AZDATA_EXTERNAL_KEY_PIN 变量以加密方式保存在大数据群集控制平面中,以便应用程序可以解释该变量。 还可使用不同的身份验证机制,但需要更改应用程序。 检查 custom*.py python 应用程序以了解正在使用的完整集成逻辑。

  2. 使用以下 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 配置为使用集成应用程序作为密钥操作的终结点。

  3. 使用以下命令验证根加密密钥是否用作外部托管的密钥。

    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;
  1. 运行以下命令来检查当前加密密钥:

    azdata bdc hdfs key describe
    
  2. 获取保护加密区域密钥的密钥版本的相关信息:

    azdata bdc hdfs key describe --name <key name>
    
  3. 将密钥滚动到新的外部管理的密钥:

    azdata bdc hdfs key roll --name <new key name>
    
  4. 使用以下命令开始加密:

    azdata bdc hdfs encryption-zone reencrypt –-path <your EZ path> --action start
    
  5. 使用以下命令验证密钥层次结构:

    azdata bdc kms show
    azdata bdc hdfs key describe
    

后续步骤