共用方式為


SQL Server 巨量數據叢集中的外部金鑰提供者

Important

MICROSOFT SQL Server 2019 巨量數據叢集已淘汰。 SQL Server 2019 巨量數據叢集的支援已於 2025 年 2 月 28 日結束。 如需詳細資訊,請參閱 Microsoft SQL Server 平臺上的公告部落格文章和巨量數據選項。

本文提供如何在 SQL Server 巨量數據叢集中設定外部金鑰提供者以進行金鑰管理的詳細數據。

若要深入瞭解如何在 SQL Server 巨量數據叢集上使用密鑰版本,請參閱: SQL Server 巨量數據叢集中的主要版本

如需設定和使用靜態加密的詳細資訊,請參閱下列指南:

Prerequisites

使用外部提供者的根金鑰加密

透過在 SQL Server 巨量資料叢集中引進外部金鑰的功能,主要加密密鑰會使用客戶部署的應用程式來擷取公鑰。 輪替和使用 HDFS 金鑰時,會將解密 HDFS 金鑰的呼叫傳送至控制平面,然後使用客戶提供的金鑰標識元重新導向至應用程式。 針對 SQL Server,加密的要求會由控制平面傳送並滿足,因為它具有公鑰。 從 SQL Server 解密資料加密金鑰 (DEK) 的要求也會傳送至控制平面,然後重新導向至與外部提供者介面的應用程式,例如硬體安全性模組 (HSM)。

圖表代表安裝客戶金鑰之後的情況。

下圖說明在控制平面中設定外部按鍵時的互動:

圖表說明在控制平面中設定外部索引鍵時的互動。

安裝金鑰之後,不同承載的加密和解密會受到主要加密金鑰的保護。 此保護類似於系統管理的密鑰,不同之處在於路由傳送至控制平面的解密呼叫會接著路由傳送至密鑰管理服務 (KMS) 外掛程式應用程式。 KMS 插件應用程式會將要求引導到適當的目的地,例如 HSM、Hashicorp Vault 或其他產品。

Configuration

提供的範本應用程式是用來與外部密鑰提供者進行介面的外掛程式。 此應用程式必須自定義並部署至巨量數據叢集,以作為與所選外部密鑰提供者的整合點。

在範本應用程式中,有一些範例說明如何使用標準 PKCS11 通訊協定與外部提供者實作整合,並以 SoftHSM 作為範例。 也有使用 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的資料夾,也就是巨量數據叢集應用程式Deploy 範本應用程式。

  2. 選擇其中一個樣板並根據您的情境進行調整來自訂應用程式:

    • 檔案 custom_softhsm.py 包含使用SoftHSM的參考實作
    • 檔案 custom_akv.py 包含 Azure Key Vault 範例
    • 檔案 custom_hcv.py 包含HashiCorp Vault範例

    Caution

    不要變更函數契約或簽名,這些是整合點。 視需要只變更函式實作。

  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>
    

    Note

    整合應用程式部署程式會使用令牌來存取您的外部密鑰提供者。 不過, 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
    

Next steps