SQL Server 大数据群集中的外部密钥提供程序

重要

Microsoft SQL Server 2019 大数据群集附加产品将停用。 对 SQL Server 2019 大数据群集的支持将于 2025 年 2 月 28 日结束。 有关详细信息,请参阅 Microsoft SQL Server 平台上的大数据选项

本文提供了有关如何在 SQL Server 大数据群集中配置外部密钥提供程序以进行密钥管理的详细信息。

若要详细了解如何在 SQL Server 大数据群集上使用密钥版本,请参阅:SQL Server 大数据群集中的密钥版本

若要了解如何配置和使用静态加密,请参阅以下指南:

先决条件

使用外部提供程序进行根密钥加密

借助在 SQL Server 大数据群集 中引入外部密钥的功能,主加密密钥使用客户部署的应用程序提取公钥。 轮换和使用 HDFS 密钥时,对 HDFS 密钥进行解密的调用将发送到控制平面,然后使用客户所提供的密钥标识符重定向到应用程序。 对于 SQL Server,由控制平面发送和处理加密请求,因为它具有公钥。 用于从 SQL Server 解密数据加密密钥 (DEK) 的请求也发送到控制平面,然后重定向到与外部提供程序(例如硬件安全模块 (HSM))进行交互的应用程序。

Diagram represents the situation after Customer Key is installed.

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

Diagram explains the interactions while configuring external keys in control plane.

安装密钥后,不同有效负载的加密和解密会受到主要加密密钥的保护。 此保护与系统托管的密钥类似,只是路由到控制平面的解密调用随后会路由到密钥管理服务 (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
    

后续步骤