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 2019 巨量資料叢集版本資訊。 需要 CU11+。
- 包含 azdata 20.3.5+ 的巨量資料工具。
- 具有 Kubernetes 系統管理權限的 SQL Server 巨量資料叢集使用者,也就是 clusterAdmins 角色的成員。 如需詳細資訊,請參閱在 Active Directory 模式中管理巨量資料叢集存取。
- 外部提供者範本應用程式。 請參閱待用 SQL Server BDC 加密。
使用外部提供者的根金鑰加密
透過將外部金鑰帶入 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 中位於路徑 bdc-encryption-secret 的 KV 存放區,而祕密的名稱可以是 rsa2048。
在巨量資料叢集上自訂和部署整合應用程式
在本機電腦上,瀏覽至包含 kms_plugin_app 的資料夾,也就是巨量資料叢集 AppDeploy 範本應用程式。
選擇其中一個範本並將其調整為您的案例以自訂應用程式:
- 檔案 custom_softhsm.py 包含使用 SoftHSM 的參考實作
- 檔案 custom_akv.py 包含 Azure Key Vault 範例
- 檔案 custom_akv.py 包含 HashiCorp Vault 範例
警告
請勿變更函式合約或簽章,也就是整合點。 請視需要僅變更函式實作。
請據以從上述範本命名您所建立的檔案。 例如,將 custom_softhsm.py 儲存為 my_custom_integration_v1.py,然後執行您的自訂。 這個方法對於下一個步驟很重要。
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): ...
從具有 spec.yaml 的資料夾,使用此命令將應用程式部署至巨量資料叢集:
azdata app create -s
等待應用程式部署完成,然後便可以使用此命令檢查就緒狀態:
azdata app list
設定巨量資料叢集以使用外部金鑰提供者
設定
AZDATA_EXTERNAL_KEY_PIN
環境變數以提供權杖,以允許存取外部金鑰提供者:export AZDATA_EXTERNAL_KEY_PIN=<your PIN/token here>
注意
整合應用程式部署程序會使用權杖來存取您的外部金鑰提供者。 不過,變數
AZDATA_EXTERNAL_KEY_PIN
會以加密方式儲存在巨量資料叢集控制平面中,以便由應用程式解譯變數。 您也可以使用不同的驗證機制,但應用程式必須變更。 檢查 custom*.py Python 應用程式,以取得正在使用的完整整合邏輯。使用下列
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,以使用整合應用程式作為金鑰作業的端點。使用下列命令,確認根加密金鑰為外部受控加密金鑰。
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;
執行下列命令來檢查目前的加密金鑰:
azdata bdc hdfs key describe
取得保護加密區域金鑰之金鑰版本的相關資訊:
azdata bdc hdfs key describe --name <key name>
將您的金鑰變更為新的外部受控金鑰:
azdata bdc hdfs key roll --name <new key name>
使用此命令啟動加密:
azdata bdc hdfs encryption-zone reencrypt –-path <your EZ path> --action start
使用下列命令確認金鑰階層:
azdata bdc kms show azdata bdc hdfs key describe