使用 PowerShell 移除透明資料加密 (TDE) 保護程式

適用於:Azure SQL 資料庫Azure SQL 受控執行個體Azure Synapse Analytics (僅限專用 SQL 集區)

此文章描述如何使用支援攜帶您自己的金鑰 (BYOK) 的 TDE 與 Azure Key Vault 中的客戶自控金鑰,回應 Azure SQL 資料庫或 Azure Synapse Analytics 的潛在遭入侵 TDE 保護裝置。 若要深入了解 TDE 的 BYOK 支援,請參閱概觀頁面

警告

本文件中概述的程序只能在極端案例或測試環境中完成。 請仔細檢閱這些步驟,因為從 Azure Key Vault 刪除主動使用的 TDE 保護裝置會導致資料庫無法使用

如果懷疑金鑰遭到入侵,例如服務或使用者未經授權存取金鑰,則最好刪除金鑰。

請記住,一旦在金鑰保存庫中刪除 TDE 保護裝置,則最多 10 分鐘,所有加密的資料庫都會開始拒絕所有具有對應錯誤訊息的連線,並將其狀態變更為無法存取

本操作指南會逐步說明在遭入侵事件回應之後呈現資料庫資料庫的方法。

注意

本文適用於 Azure SQL Database、Azure SQL 受控執行個體和 Azure Synapse Analytics (原為 SQL DW 的專用 SQL 集區)。 如需 Synapse 工作區中專用 SQL 集區的透明資料加密文件,請參閱 Azure Synapse Analytics 加密

必要條件

  • 您必須具有 Azure 訂用帳戶,並且是該訂用帳戶的系統管理員。
  • 您必須安裝並執行 Azure PowerShell。
  • 本操作指南假設您已使用 Azure Key Vault 中的金鑰作為 Azure SQL 資料庫或 Azure Synapse 的 TDE 保護裝置。 若要深入了解,請參閱具有 BYOK 支援的透明資料加密

如需 Az 模組安裝指示,請參閱安裝 Azure PowerShell。 針對特定的 Cmdlet,請參閱 AzureRM.Sql。 使用新的 Azure PowerShell Az 模組

檢查 TDE 保護裝置指紋

下列步驟概述如何檢查指定的資料庫虛擬記錄檔 (VLF) 仍在使用的 TDE 保護裝置指紋。 執行下列命令,即可找到資料庫目前 TDE 保護裝置的指紋和資料庫識別碼:

SELECT [database_id],
       [encryption_state],
       [encryptor_type], /*asymmetric key means AKV, certificate means service-managed keys*/
       [encryptor_thumbprint]
 FROM [sys].[dm_database_encryption_keys]

下列查詢會傳回使用中的 VDF 和 TDE 保護裝置各自的指紋。 每個不同的指紋指的是 Azure Key Vault (AKV) 中的不同金鑰:

SELECT * FROM sys.dm_db_log_info (database_id)

或者,您可以使用 PowerShell 或 Azure CLI:

PowerShell 命令 Get-AzureRmSqlServerKeyVaultKey 提供查詢中使用的 TDE 保護裝置指紋,讓您可以看到要保留哪些金鑰,以及 AKV 中要刪除的金鑰。 只有資料庫不再使用的金鑰可以從 Azure Key Vault 安全地刪除。

保持加密資源可存取

  1. Key Vault 中建立新的金鑰。 請確定此新金鑰是在與可能遭入侵的 TDE 保護裝置不同的金鑰保存庫中建立,因為存取控制是在保存庫層級上佈建的。

  2. 使用 Add-AzSqlServerKeyVaultKeySet-AzSqlServerTransparentDataEncryptionProtector Cmdlet 將新金鑰新增至伺服器,並將其更新為伺服器的新 TDE 保護裝置。

    # add the key from Key Vault to the server  
    Add-AzSqlServerKeyVaultKey -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> -KeyId <KeyVaultKeyId>
    
    # set the key as the TDE protector for all resources under the server
    Set-AzSqlServerTransparentDataEncryptionProtector -ResourceGroupName <SQLDatabaseResourceGroupName> `
        -ServerName <LogicalServerName> -Type AzureKeyVault -KeyId <KeyVaultKeyId>
    
  3. 請確定伺服器和任意複本皆已使用 Get-AzSqlServerTransparentDataEncryptionProtector Cmdlet 更新為新 TDE 保護裝置

    注意

    新的 TDE 保護裝置可能需要幾分鐘的時間,才能傳播到伺服器下的所有資料庫和次要資料庫。

    Get-AzSqlServerTransparentDataEncryptionProtector -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
    
  4. 在金鑰保存庫中備份新的金鑰

    # -OutputFile parameter is optional; if removed, a file name is automatically generated.
    Backup-AzKeyVaultKey -VaultName <KeyVaultName> -Name <KeyVaultKeyName> -OutputFile <DesiredBackupFilePath>
    
  5. 使用 Remove-AzKeyVaultKey Cmdlet,從金鑰保存庫刪除遭到洩露的金鑰。

    Remove-AzKeyVaultKey -VaultName <KeyVaultName> -Name <KeyVaultKeyName>
    
  6. 若要使用 Restore-AzKeyVaultKey Cmdlet 將金鑰還原至未來的金鑰保存庫。

    Restore-AzKeyVaultKey -VaultName <KeyVaultName> -InputFile <BackupFilePath>
    

保持加密資源無法存取

  1. 卸除使用可能遭入侵的金鑰加密的資料庫。

    資料庫和記錄檔會自動備份,因此可以隨時執行資料庫的時間點還原 (只要您提供金鑰)。 刪除使用中 TDE 保護裝置之前,必須先卸除資料庫,以防止最近交易中長達 10 分鐘的潛在資料遺失。

  2. 在金鑰保存庫中備份 TDE 保護裝置的金鑰資料。

  3. 從金鑰保存庫移除可能遭入侵的金鑰。

注意

任何權限變更可能需要大約 10 分鐘的時間,才會對金鑰保存庫生效。 這包括撤銷 AKV 中 TDE 保護裝置的存取權限,而此時間範圍內的使用者可能仍有存取權限。