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

適用于:Azure SQL資料庫 Azure Synapse分析

本主題描述 Azure SQL Database 或 Azure Synapse Analytics 若是在 Azure Key Vault 中搭配由客戶自控金鑰來使用 TDE (攜帶您自己的金鑰 (BYOK) 支援),在其 TDE 保護裝置可能遭破壞時,應如何因應。 若要深入了解 TDE 的 BYOK 支援,請參閱概觀頁面

警告

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

如果金鑰疑似遭到盜用,而使服務或使用者可在未經授權的情況下存取金鑰,則最好將金鑰刪除。

請記住,在 Key Vault 中刪除 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 Database 或 Azure Synapse 的 TDE 保護裝置。 若要深入了解,請參閱具有 BYOK 支援的透明資料加密

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

重要

PowerShell Azure Resource Manager (RM) 模組仍受支援,但所有未來的開發都是針對 Az.Sql 模組進行的。 AzureRM 模組在至少 2020 年 12 月之前都還會持續收到 Bug 修正。 Az 模組和 AzureRm 模組中命令的引數本質上完全相同。 如需其相容性的詳細資訊,請參閱新的 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]

下列查詢會傳回使用中 VLF 和 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. 在 Key Vault 中建立新金鑰的備份

    # -OutputFile parameter is optional; if removed, a file name is automatically generated.
    Backup-AzKeyVaultKey -VaultName <KeyVaultName> -Name <KeyVaultKeyName> -OutputFile <DesiredBackupFilePath>
    
  5. 使用 Remove-AzKeyVaultKey Cmdlet 從 Key Vault 中刪除遭破壞的金鑰。

    Remove-AzKeyVaultKey -VaultName <KeyVaultName> -Name <KeyVaultKeyName>
    
  6. 日後可使用 Restore-AzKeyVaultKey Cmdlet 將金鑰還原至 Key Vault:

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

使加密資源變得無法存取

  1. 捨棄以可能遭破壞的金鑰加密的資料庫。

    資料庫和記錄檔會自動備份,因此資料庫的時間點還原可以在任何時間點執行 (只要您提供金鑰)。 資料庫必須在作用中的 TDE 保護裝置刪除之前捨棄,否則最多可能會遺失最新交易 10 分鐘內的資料。

  2. 在 Key Vault 中備份 TDE 保護裝置的金鑰內容。

  3. 從 Key Vault 中移除可能遭破壞的金鑰

注意

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

後續步驟