共用方式為


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)。

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 中位於路徑 bdc-encryption-secret 的 KV 存放區,而祕密的名稱可以是 rsa2048。

在巨量資料叢集上自訂和部署整合應用程式

  1. 在本機電腦上,瀏覽至包含 kms_plugin_app 的資料夾,也就是巨量資料叢集 AppDeploy 範本應用程式。

  2. 選擇其中一個範本並將其調整為您的案例以自訂應用程式:

    • 檔案 custom_softhsm.py 包含使用 SoftHSM 的參考實作
    • 檔案 custom_akv.py 包含 Azure Key Vault 範例
    • 檔案 custom_akv.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
    

下一步