在 Azure VM (資源管理員) 上設定 SQL Server 的 Azure Key Vault 整合

適用於:Azure VM 上的 SQL Server

有多個 SQL Server 加密功能,例如透明資料加密 (TDE)資料行層級加密 (CLE)備份加密。 這些形式的加密需要您管理和儲存用來加密的密碼編譯金鑰。 Azure Key Vault (AKV) 服務旨在改善安全性,以及在安全且高可用性的位置管理這些金鑰。 SQL Server 連接器 讓 SQL Server 可以從 Azure 金鑰保存庫使用這些金鑰。

如果正在執行內部部署的 SQL Server,則可遵循一些步驟來從內部部署 SQL Server 執行個體存取 Azure Key Vault。 但針對 Azure VM 上的 SQL Server,您可使用 Azure Key Vault 整合功能來節省時間。

注意

Azure Key Vault 整合僅適用於 SQL Server 的 Enterprise、Developer 和 Evaluation 版本。 從 SQL Server 2019 開始,也支援 Standard 版本。

啟用這項功能時,它會自動安裝 SQL Server 連接器、設定 EKM 提供者來存取 Azure 金鑰保存庫,並建立認證讓您存取您的保存庫。 如果您看到先前提及的內部部署文件中的步驟,您可以發現這項功能會自動執行步驟 2 和 3。 您唯一仍然需要手動進行的是建立金鑰保存庫和金鑰。 該位置會自動化 SQL VM 的整個設定。 這項功能完成設定後,即可執行 Transact-SQL (T-SQL) 陳述式,以開始如往常一般加密資料庫或備份。

注意

您也可以使用範本來設定 Key Vault 整合。 如需詳細資訊,請參閱 適用於 Azure 金鑰保存庫整合的 Azure 快速入門範本

準備進行 AKV 整合

若要使用 Azure 金鑰保存庫整合以設定 SQL Server VM,有幾項必要條件:

  1. 安裝 Azure PowerShell
  2. 建立 Microsoft Entra 租用戶
  3. 建立金鑰保存庫

下列各節說明這些必要條件和您必須收集以在稍後執行 PowerShell Cmdlet 的資訊。

注意

本文使用 Azure Az PowerShell 模組,這是與 Azure 互動時建議使用的 PowerShell 模組。 若要開始使用 Az PowerShell 模組,請參閱安裝 Azure PowerShell。 若要瞭解如何遷移至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 遷移至 Az。

安裝 Azure PowerShell

確定已安裝最新版本的 Azure PowerShell 模組。 如需詳細資訊,請參閱 如何安裝及設定 Azure PowerShell

在 Microsoft Entra ID 中註冊應用程式

首先,您的訂用帳戶需要具有 Microsoft Entra 租用戶。 在許多優點中,這可讓您將金鑰保存庫的權限授與特定使用者和應用程式。

接下來,使用 Microsoft Entra ID 註冊應用程式。 如此為您提供服務主體帳戶,可存取您 VM 需要的金鑰保存庫。 Azure Key Vault 文章的使用 Microsoft Entra ID 註冊應用程式章節提供了這些步驟,您也可以參閱這篇部落格文章的<取得應用程式的身分識別章節>(部分機器翻譯),以查看相關步驟與螢幕擷取畫面。 完成這些步驟之前,您需要收集此註冊期間的下列資訊,稍後當您在 SQL VM 上啟用 Azure 金鑰保存庫整合時需要該資訊。

  • 新增應用程式之後,請在 [註冊的應用程式] 窗格上尋找 [應用程式 ID] (也稱為 AAD ClientID 或 AppID)。 應用程式識別碼稍後會指派給 PowerShell 指令碼中的 $spName (服務主體名稱) 參數,以啟用 Azure Key Vault 整合。

    Application ID

  • 在建立金鑰的這些步驟中,複製您的金鑰的密碼,如下列螢幕擷取畫面所示。 這個金鑰密碼稍後會指派給 PowerShell 指令碼中的 $spSecret (服務主體密碼) 參數。

    AAD secret

  • 應用程式識別碼和秘密也將用來在 SQL Server 中建立認證。

  • 您必須授權讓這個新的應用程式識別碼 (或用戶端識別碼) 擁有下列存取權限:getwrapKeyunwrapKey。 做法是使用 Set-AzKeyVaultAccessPolicy \(英文\) Cmdlet。 如需詳細資訊,請參閱 Azure Key Vault 概觀

建立金鑰保存庫

若要使用 Azure 金鑰保存庫來儲存您在 VM 中用於加密的金鑰,您需要金鑰保存庫的存取權限。 如果您尚未設定您的金鑰保存庫,請依照開始使用 Azure 金鑰保存庫一文中的步驟建立一個金鑰保存庫。 完成這些步驟之前,有一些您需要在此安裝期間收集的資訊,稍後當您在 SQL VM 上啟用 Azure Key Vault 整合時需要該資訊。

New-AzKeyVault -VaultName 'ContosoKeyVault' -ResourceGroupName 'ContosoResourceGroup' -Location 'East Asia'

當您進行「建立」金鑰保存庫步驟時,請注意傳回的 vaultUri 屬性,它是金鑰保存庫 URL。 在該步驟提供的範例中 (稍後所示),金鑰保存庫名稱是 ContosoKeyVault,因此金鑰保存庫網址會是 https://contosokeyvault.vault.azure.net/

金鑰保存庫 URL 稍後會指派給 PowerShell 指令碼中的 $akvURL 參數,以啟用 Azure 金鑰保存庫整合。

建立金鑰保存庫之後,我們必須將金鑰新增至金鑰保存庫,以便稍後在 SQL Server 中建立非對稱金鑰時參考這個金鑰。

注意

可延伸金鑰管理 (EKM) 提供者版本 1.0.4.0 已透過 SQL 基礎結構即服務 (IaaS) 延伸模組安裝在 SQL Server VM 上。 升級 SQL IaaS 代理程式延伸模組不會更新提供者版本。 如有需要 (例如,在移轉至 SQL 受控執行個體時),請考慮以手動方式升級 EKM 提供者版本。

啟用和設定 Key Vault 整合

您可在佈建期間啟用 Key Vault 整合,或針對現有的 VM 設定這項整合。

新的 VM

如果您要使用資源管理員佈建新的 SQL Server 虛擬機器,則 Azure 入口網站提供啟用 Azure Key Vault 整合的方式。

SQL Azure Key Vault Integration

如需佈建的詳細逐步解說,請參閱在 Azure 入口網站中佈建 SQL 虛擬機器

現有的 VM

針對現有的 SQL 虛擬機器,請開啟 SQL 虛擬機器資源,然後選取位於 [設定] 下的 [安全性]。 選取 [啟用] 以啟用 Azure Key Vault 整合。

以下螢幕擷取畫面顯示如何在入口網站中為現有 SQL Server VM (此 SQL Server 執行個體會使用非預設連接埠 1401) 啟用 Azure Key Vault:

SQL Key Vault integration for existing VMs

完成後,請選取位於 [安全性] 頁面底部的 [套用] 按鈕來儲存變更。

注意

此處所建立的認證名稱會在稍後對應到 SQL 登入。 這樣能允許 SQL 登入存取金鑰保存庫。

啟用 Azure 金鑰保存庫整合之後,您可以在您的 SQL VM 上啟用 SQL Server 加密。 首先,您必須在金鑰保存庫內建立非對稱金鑰,以及在 VM 上的 SQL Server 內建立對稱金鑰。 然後,您可以執行 T-SQL 陳述式來啟用您的資料庫和備份的加密。

有數種形式的加密可供您利用:

下列 Transact-SQL 指令碼為每個區域提供範例。

範例的必要條件

每個範例都有兩個先決條件:金鑰保存庫的非對稱金鑰 (稱為 CONTOSO_KEY),和 AKV 整合功能所建立的認證 (稱為 Azure_EKM_TDE_cred)。 下列 Transact-SQL 命令會設定這些必要條件,以用於執行範例。

USE master;
GO

--create credential
--The <<SECRET>> here requires the <Application ID> (without hyphens) and <Secret> to be passed together without a space between them.
CREATE CREDENTIAL Azure_EKM_cred
    WITH IDENTITY = 'keytestvault', --keyvault
    SECRET = '<<SECRET>>'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;


--Map the credential to a SQL login that has sysadmin permissions. This allows the SQL login to access the key vault when creating the asymmetric key in the next step.
ALTER LOGIN [SQL_Login]
ADD CREDENTIAL Azure_EKM_cred;


CREATE ASYMMETRIC KEY CONTOSO_KEY
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'KeyName_in_KeyVault',  --The key name here requires the key we created in the key vault
CREATION_DISPOSITION = OPEN_EXISTING;

透明資料加密 (TDE)

  1. 建立 SQL Server 登入,讓資料庫引擎用於 TDE,然後新增認證。

    USE master;
    -- Create a SQL Server login associated with the asymmetric key
    -- for the Database engine to use when it loads a database
    -- encrypted by TDE.
    CREATE LOGIN EKM_Login
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the TDE Login to add the credential for use by the
    -- Database Engine to access the key vault
    ALTER LOGIN EKM_Login
    ADD CREDENTIAL Azure_EKM_cred;
    GO
    
  2. 建立將用於 TDE 的資料庫加密金鑰。

    USE ContosoDatabase;
    GO
    
    CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128 
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE ContosoDatabase
    SET ENCRYPTION ON;
    GO
    

加密的備份

  1. 建立 SQL Server 登入,讓資料庫引擎用於加密備份,然後新增認證。

    USE master;
    -- Create a SQL Server login associated with the asymmetric key
    -- for the Database engine to use when it is encrypting the backup.
    CREATE LOGIN EKM_Login
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the Encrypted Backup Login to add the credential for use by
    -- the Database Engine to access the key vault
    ALTER LOGIN EKM_Login
    ADD CREDENTIAL Azure_EKM_cred ;
    GO
    
  2. 備份資料庫會指定加密,具有儲存在金鑰保存庫中的非對稱金鑰。

    USE master;
    BACKUP DATABASE [DATABASE_TO_BACKUP]
    TO DISK = N'[PATH TO BACKUP FILE]'
    WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,
    ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY]);
    GO
    

資料行層級加密 (CLE)

此指令碼會建立受到金鑰保存庫中非對稱金鑰保護的對稱金鑰,然後使用對稱金鑰來加密資料庫中的資料。

CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

DECLARE @DATA VARBINARY(MAX);

--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY(KEY_GUID('DATA_ENCRYPTION_KEY'), CONVERT(VARBINARY,'Plain text data to encrypt'));

-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));

--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;

其他資源

如需有關如何使用這些加密功能的詳細資訊,請參閱 以 SQL Server 加密功能使用 EKM

請注意,本文中的步驟假設您已在 Azure 虛擬機器上執行 SQL Server。 如果沒有,請參閱在 Azure 中佈建 SQL Server 虛擬機器。 如需在 Azure VM 中執行 SQL Server 的其他指導,請參閱<Azure Windows 虛擬機器上的 SQL Server 概觀>(部分機器翻譯)。

下一步

如需詳細安全性資訊,請參閱 Azure VM 上 SQL Server 的安全性考量 (機器翻譯)