適用於:
Azure SQL Database
Azure SQL 受控執行個體
Azure Synapse Analytics (僅限專用的 SQL 集區)
本文說明如何使用 Azure Key Vault 中的 TDE 保護裝置來進行伺服器的金鑰輪替。 將伺服器的邏輯 TDE 保護元件重新旋轉,意即啟用新的非對稱式金鑰來保護伺服器上的資料庫。 金鑰輪替是一項線上作業,應可在幾秒內完成,因為此作業只會解密和重新加密資料庫的資料加密金鑰,而不是整個資料庫。
本文討論輪替伺服器上 TDE 保護裝置的自動和手動方法。
輪替 TDE 保護裝置時的重要考量
- 變更或輪替 TDE 保護程式時,資料庫的既有備份,包括已備份的記錄檔,不會更新並使用最新的 TDE 保護程式。 若要從 Azure Key Vault 或 Azure 受控 HSM 還原使用 TDE 保護裝置加密的備份,請確定目標伺服器可以使用密鑰數據。 因此,建議您保留 Azure Key Vault 或 Azure 受控 HSM 中的所有舊版 TDE 保護裝置,以便還原資料庫備份。
- 即使從客戶管理的金鑰 (CMK) 切換至服務管理的密鑰,仍保留 Azure Key Vault 或 Azure 受控 HSM 中的所有先前使用的金鑰。 這可確保使用儲存在 Azure Key Vault 或 Azure 受控 HSM 中的 TDE 保護裝置還原資料庫備份,包括備份的記錄檔。
- 除了舊的備份之外,交易記錄檔也可能需要存取舊版的 TDE 保護裝置。 若要判斷是否有任何剩餘的記錄仍需要使用舊的金鑰,請在執行金鑰輪替之後,使用 sys.dm_db_log_info 動態管理檢視 (DMV)。 此 DMV 會傳回交易記錄的虛擬記錄檔 (VLF) 相關資訊,以及 VLF 的加密金鑰指紋。
- 較舊的密鑰必須保留在 Azure Key Vault 或 Azure 受控 HSM 中,並根據資料庫上設定為備份保留原則的備份保留期限,供伺服器使用。 這有助於確保伺服器上的任何長期保留 (LTR) 備份仍可使用舊的金鑰還原。
注意
必須先恢復 Azure Synapse Analytics 中已暫停的專用 SQL 集區,才能進行金鑰輪替。
本文適用於 Azure SQL Database、Azure SQL 受控執行個體和 Azure Synapse Analytics 專用 SQL 集區 (原為 SQL DW)。 如需 Synapse 工作區中專用 SQL 集區的透明資料加密 (TDE) 文件,請參閱 Azure Synapse Analytics 加密。
必要條件
- 本操作指南假設您已使用 Azure Key Vault 中的金鑰作為 Azure SQL Database 或 Azure Synapse Analytics 的 TDE 保護裝置。 請參閱具有 BYOK 支援的透明資料加密。
- 您必須安裝並執行 Azure PowerShell。
自動金鑰輪替
設定伺服器或資料庫的 TDE 保護裝置時,可以從 Azure 入口網站或使用下列 PowerShell 或 Azure CLI 命令,來啟用 TDE 保護裝置的自動輪替。 啟用之後,伺服器或資料庫將會持續檢查金鑰保存庫中是否有任何用作 TDE 保護裝置的金鑰新版本。 如果偵測到金鑰的新版本,則伺服器或資料庫上的 TDE 保護裝置將會在 24 小時內自動輪替至最新的金鑰版本。
伺服器、資料庫或受控執行個體中的自動輪替可以與 Azure Key Vault 中的自動金鑰輪替搭配使用,以啟用 TDE 金鑰的端對端零觸控輪替。
注意
如果伺服器或受控執行個體已設定異地複寫,則在啟用自動輪替之前,需要遵循此處所述的其他指導方針。
使用 Azure 入口網站:
- 瀏覽至現有伺服器或受控實例的 [透明資料加密] 區段。
- 選取 [客戶自控金鑰] 選項,然後選取要用作 TDE 保護裝置的金鑰保存庫和金鑰。
- 勾選 [自動旋轉] 核取方塊。
- 選擇 [儲存]。
如需 Az PowerShell 模組安裝指示,請參閱安裝 Azure PowerShell。
若要使用 PowerShell 來啟用 TDE 保護裝置的自動輪替,請參閱下列指令碼。
<keyVaultKeyId>可以從 Azure Key Vault 擷取 。
Azure SQL Database
使用 Set-AzSqlServerTransparentDataEncryptionProtector 命令。
Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName> `
-AutoRotationEnabled <boolean>
Azure SQL 受控執行個體
使用 Set-AzSqlInstanceTransparentDataEncryptionProtector 命令。
Set-AzSqlInstanceTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-InstanceName <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName> `
-AutoRotationEnabled <boolean>
如需如何安裝目前版本的 Azure CLI,請參閱安裝 Azure CLI 一文。
若要使用 Azure CLI 來啟用 TDE 保護裝置的自動輪替,請參閱下列指令碼。
Azure SQL Database
使用 az sql server tde-key set 命令。
az sql server tde-key set --server-key-type AzureKeyVault
--auto-rotation-enabled true
[--kid] <keyVaultKeyId>
[--resource-group] <SQLDatabaseResourceGroupName>
[--server] <logicalServerName>
Azure SQL 受控執行個體
使用 az sql mi tde-key set 命令。
az sql mi tde-key set --server-key-type AzureKeyVault
--auto-rotation-enabled true
[--kid] <keyVaultKeyId>
[--resource-group] <ManagedInstanceGroupName>
[--managed-instance] <ManagedInstanceName>
資料庫層級的自動金鑰輪替
您也可以在 Azure SQL 資料庫的資料庫層級啟用自動金鑰輪替。 當您只想針對伺服器上的一個或某個資料庫子集啟用自動金鑰輪替時,這非常有用。 如需更多資訊,請參閱使用資料庫層級客戶自控金鑰的 TDE 身分識別和金鑰管理。
若要使用 PowerShell 在資料庫層級啟用 TDE 保護裝置的自動輪替,請參閱下列命令。 使用 -EncryptionProtectorAutoRotation 參數,並設定為 $true 以啟用自動金鑰輪替,或設定為 $false 以停用自動金鑰輪替。
Set-AzSqlDatabase -ResourceGroupName <resource_group_name> -ServerName <server_name> -DatabaseName <database_name> -EncryptionProtectorAutoRotation:$true
若要使用 Azure CLI 在資料庫層級啟用 TDE 保護裝置的自動輪替,請參閱下列命令。 使用 --encryption-protector-auto-rotation 參數,並設定為 True 以啟用自動金鑰輪替,或設定為 False 以停用自動金鑰輪替。
az sql db update --resource-group <resource_group_name> --server <server_name> --name <database_name> --encryption-protector-auto-rotation True
異地複寫設定的自動金鑰輪替
在將主要伺服器設定為搭配使用 TDE 與 CMK 的 Azure SQL Database 異地複寫設定中,次要伺服器也需要設定為使用具有主要伺服器上所使用相同金鑰的 CMK 來啟用 TDE。
使用 Azure 入口網站:
瀏覽至「主要」伺服器的 [透明資料加密] 區段。
選取 [客戶自控金鑰] 選項,然後選取要用作 TDE 保護裝置的金鑰保存庫和金鑰。
勾選 [自動旋轉] 核取方塊。
選擇 [儲存]。
瀏覽至「備援伺服器」的 [透明資料加密] 區段。
選取 [客戶自控金鑰] 選項,然後選取要用作 TDE 保護裝置的金鑰保存庫和金鑰。 使用與您用於主要伺服器的相同金鑰。
取消核取 [將此金鑰設為預設 TDE 保護裝置]。
選擇 [儲存]。
金鑰在主要伺服器上進行輪替時,會自動傳輸至次要伺服器。
注意
如果在主要伺服器上使用相同的密鑰保存庫金鑰作為次要伺服器上的預設 TDE 保護器,請確定兩部伺服器都已啟用自動輪替金鑰。 若無法這麼做,可能會導致自動輪替工作流程進入錯誤狀態,並防止進一步手動密鑰輪替作業。
<keyVaultKeyId>可以從 Azure Key Vault 擷取 。
使用 Add-AzSqlServerKeyVaultKey 命令,將新的金鑰新增至「次要」伺服器。
# add the key from Azure Key Vault to the secondary server
Add-AzSqlServerKeyVaultKey -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
將第一個步驟中的相同金鑰新增至「主要」伺服器。
# add the key from Azure Key Vault to the primary server
Add-AzSqlServerKeyVaultKey -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
使用 Set-AzSqlInstanceTransparentDataEncryptionProtector,將金鑰設定為主要伺服器的主要保護裝置,並設置自動金鑰輪替為 true。
Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName> `
-AutoRotationEnabled $true
使用 Get-AzKeyVaultKey 和Set-AzKeyVaultKeyRotationPolicy 命令,輪替 Azure Key Vault 中的 Azure Key Vault 密鑰。
Get-AzKeyVaultKey -VaultName <keyVaultName> -Name <keyVaultKeyName> | Set-AzKeyVaultKeyRotationPolicy -KeyRotationLifetimeAction @{Action = "Rotate"; TimeBeforeExpiry = "P18M"}
檢查 SQL Server (主要和次要) 是否具有新的金鑰或金鑰版本:
注意
金鑰輪替最多可能需要一小時才會套用至伺服器。 執行此命令之前,請至少等候一小時。
Get-AzSqlServerKeyVaultKey -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
針對每個伺服器使用不同的金鑰
在 Azure 入口網站中使用 CMK 來設定 TDE 時,可以使用不同的金鑰保存庫金鑰來設定主要和次要伺服器。 在 Azure 入口網站中,無法證明用來保護主要伺服器的金鑰也是保護已複寫至次要伺服器的主要資料庫的相同金鑰。 不過,您可以使用 PowerShell、Azure CLI 或 REST API 來取得伺服器上所使用金鑰的詳細資料。 這會顯示自動輪替金鑰從主要伺服器傳輸至次要伺服器。
以下範例說明如何使用 PowerShell 命令來檢查金鑰是否可在金鑰輪替之後從主要伺服器傳輸至次要伺服器。
在主要伺服器上,執行下列命令以顯示伺服器的金鑰詳細資料:
Get-AzSqlServerKeyVaultKey -ServerName <logicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
您應該會看見如下所示的結果:
ResourceGroupName : <SQLDatabaseResourceGroupName>
ServerName : <logicalServerName>
ServerKeyName : <keyVaultKeyName>
Type : AzureKeyVault
Uri : https://<keyvaultname>.vault.azure.net/keys/<keyName>/<GUID>
Thumbprint : <thumbprint>
CreationDate : 12/13/2022 8:56:32 PM
在次要伺服器上,執行相同的 Get-AzSqlServerKeyVaultKey 命令:
Get-AzSqlServerKeyVaultKey -ServerName <logicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
如果次要伺服器的預設 TDE 保護裝置使用與主要伺服器不同的金鑰,則您應該會看到兩個 (或更多) 金鑰。 第一個金鑰是預設 TDE 保護裝置,而第二個金鑰是用來保護複寫資料庫之主要伺服器中所使用的金鑰。
金鑰在主要伺服器上進行輪替時,會自動傳輸至次要伺服器。 如果您再次在主要伺服器上運行Get-AzSqlServerKeyVaultKey,那麼您應該會看到兩把金鑰。 第一個金鑰是原始金鑰,而第二個金鑰則是在金鑰輪替期間所產生的目前金鑰。
在次要伺服器上執行 Get-AzSqlServerKeyVaultKey 命令也應該會顯示主要伺服器中所存在的相同金鑰。 這會確認主要伺服器上的已輪替金鑰自動傳輸至次要伺服器,並用來保護資料庫複本。
手動金鑰輪替
手動輪替金鑰會使用下列命令來新增金鑰,而此金鑰可能位於新的金鑰名稱下方,甚至另一個金鑰保存庫。 使用此方法,可支援將相同金鑰新增至不同的金鑰保存庫,以支援高可用性和異地災備。 手動金鑰輪替也可以使用 Azure 入口網站來完成。
使用手動金鑰旋轉時,如果金鑰庫中產生新的金鑰版本(無論是手動還是透過金鑰庫中的自動金鑰旋轉策略),則必須手動將其設定為伺服器上的 TDE 保護器。
注意
金鑰保存庫名稱和金鑰名稱的合併長度不可超過 94 個字元。
使用 Azure 入口網站:
- 瀏覽至現有伺服器或受控執行個體的 [透明資料加密] 功能表。
- 選取 [客戶自控金鑰] 選項,然後選取要用作新 TDE 保護裝置的金鑰保存庫和金鑰。
- 選擇 [儲存]。
使用 Add-AzKeyVaultKey 命令,以將新的金鑰新增至金鑰保存庫。
# add a new key to Azure Key Vault
Add-AzKeyVaultKey -VaultName <keyVaultName> -Name <keyVaultKeyName> -Destination <hardwareOrSoftware>
針對 Azure SQL Database,使用:
# add the new key from Azure Key Vault to the server
Add-AzSqlServerKeyVaultKey -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
# set the key as the TDE protector for all resources under the server
Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
針對 Azure SQL 受控執行個體,使用:
# add the new key from Azure Key Vault to the managed instance
Add-AzSqlInstanceKeyVaultKey -KeyId <keyVaultKeyId> -InstanceName <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName>
# set the key as the TDE protector for all resources under the managed instance
Set-AzSqlInstanceTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-InstanceName <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName>
使用 az keyvault key create 命令,以將新的金鑰新增至金鑰保存庫。
# add a new key to Azure Key Vault
az keyvault key create --name <keyVaultKeyName> --vault-name <keyVaultName> --protection <hsmOrSoftware>
針對 Azure SQL Database,使用:
# add the new key from Azure Key Vault to the server
az sql server key create --kid <keyVaultKeyId> --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
# set the key as the TDE protector for all resources under the server
az sql server tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
針對 Azure SQL 受控執行個體,使用:
# add the new key from Azure Key Vault to the managed instance
az sql mi key create --kid <keyVaultKeyId> --resource-group <Managed InstanceResourceGroupName> --managed-instance <ManagedInstanceName>
# set the key as the TDE protector for all resources under the managed instance
az sql mi tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <ManagedInstanceResourceGroupName> --managed-instance <ManagedInstanceName>
切換 TDE 保護裝置模式
使用 Azure 入口網站,以將 TDE 保護裝置從 Microsoft 受控模式切換為 BYOK 模式:
- 瀏覽至現有伺服器或受控執行個體的 [透明資料加密] 功能表。
- 選取 [客戶自控金鑰] 選項。
- 選取要用作 TDE 保護裝置的金鑰保存庫和金鑰。
- 選擇 [儲存]。
Azure SQL Database
若要將 TDE 保護裝置從 Microsoft 管理模式切換為 BYOK 模式,請使用 Set-AzSqlServerTransparentDataEncryptionProtector 命令。
Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault `
-KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
若要將 TDE 保護裝置從 BYOK 模式切換為 Microsoft 管理模式,請使用 Set-AzSqlServerTransparentDataEncryptionProtector 命令。
Set-AzSqlServerTransparentDataEncryptionProtector -Type ServiceManaged `
-ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
Azure SQL 受控執行個體
若要將 TDE 保護裝置從 Microsoft 管理模式切換為 BYOK 模式,請使用 Set-AzSqlInstanceTransparentDataEncryptionProtector 命令。
Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault `
-KeyId <keyVaultKeyId> <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName>
若要將 TDE 保護裝置從 BYOK 模式切換為 Microsoft 管理模式,請使用 Set-AzSqlInstanceTransparentDataEncryptionProtector 命令。
Set-AzSqlServerTransparentDataEncryptionProtector -Type ServiceManaged `
-InstanceName <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName>e>
Azure SQL Database
下列範例會使用 az sql server tde-key set。
將 TDE 保護裝置從 Microsoft 管理模式切換為 BYOK 模式:
az sql server tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
將 TDE 保護裝置從 BYOK 模式切換為 Microsoft 管理模式:
az sql server tde-key set --server-key-type ServiceManaged --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
Azure SQL 受控執行個體
下列範例會使用 az sql mi tde-key set。
將 TDE 保護裝置從 Microsoft 管理模式切換為 BYOK 模式:
az sql mi tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <ManagedInstanceResourceGroupName> --managed-instance <ManagedInstanceName>
將 TDE 保護裝置從 BYOK 模式切換為 Microsoft 管理模式:
az sql mi tde-key set --server-key-type ServiceManaged --resource-group <ManagedInstanceResourceGroupName> --managed-instance <ManagedInstanceName>
相關內容