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 的示例。 模板应用程序作为参考实现提供 as-is。

以下部分提供了配置外部密钥提供程序以充当 SQL Server 数据库和 HDFS 加密区域的根密钥所需的步骤。

在外部密钥提供程序中创建 RSA 2048 密钥

使用 2048 位 RSA 密钥创建 PEM 文件,并将其上传到外部密钥提供程序中的密钥值存储。

例如,密钥文件可能添加到 Hashicorp Vault 中路径 bdc-encryption-secret 的 KV 存储中,机密的名称可以是 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 保存在大数据群集控制平面中加密,以便应用程序可以解释该变量。 也可以使用其他身份验证机制,但需要更改应用程序。 检查 自定义*.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
    

后续步骤