轮换透明数据加密 (TDE) 保护器

适用于: Azure SQL 数据库 Azure Synapse Analytics

本文介绍使用 Azure Key Vault 中的 TDE 保护器对服务器进行的密钥轮换。 为服务器轮换逻辑 TDE 保护器意味着切换到新的非对称密钥,该密钥可以保护服务器上的数据库。 密钥轮换是一种联机操作,应该只需数秒即可完成,因为此操作只在解密数据库的数据加密密钥后重新将其加密,而不是对整个数据库进行操作。

轮换 TDE 保护程序时的重要注意事项

  • 更改/轮换 TDE 保护程序后,数据库的旧备份包括已备份的日志文件不会更新为使用最新的 TDE 保护程序。 若要还原使用 Key Vault 中的 TDE 保护器加密的备份,请确保密钥材料可供目标服务器使用。 因此,我们建议在 Azure 密钥保管库 (AKV) 中保留所有旧版 TDE 保护程序,以便可以还原数据库备份。
  • 即使是从客户托管密钥 (CMK) 切换到服务托管密钥,也要在 AKV 中保留以前使用的所有密钥。 这可以确保能够使用 Azure 密钥保管库中存储的 TDE 保护程序还原数据库备份,包括已备份的日志文件。
  • 除了旧备份以外,事务日志文件可能还需要访问较旧的 TDE 保护程序。 若要确定是否有任何剩余的日志仍需要旧密钥,请在执行密钥轮换后,使用 (DMV) sys.dm_db_log_info 动态管理视图 (DMV)。 此 DMV 返回事务日志的虚拟日志文件 (VLF) 信息以及该 VLF 的加密密钥指纹。
  • 旧密钥需要保留在 AKV 中,并可根据数据库上配置作为支撑备份保留策略的备份保留期,用于服务器。 这有助于确保仍可使用旧密钥还原服务器上的任何长期保留 (LTR) 备份。

注意

需要在密钥轮换之前先恢复 Azure Synapse Analytics 中已暂停的专用 SQL 池。

重要

在滚动更新之后,请勿删除旧版密钥。 轮换更新密钥时,某些数据仍使用以前的密钥进行加密,例如旧版数据库备份、备份的日志文件和事务日志文件。

注意

本文适用于 Azure SQL 数据库、Azure SQL 托管实例和 Azure Synapse Analytics(专用 SQL 池(以前称为 SQL DW))。

先决条件

  • 本操作方法指南假设已使用 Azure Key Vault 中的密钥作为 Azure SQL 数据库或 Azure Synapse Analytics 的 TDE 保护器。 请参阅提供 BYOK 支持的透明数据加密
  • 必须安装并运行 Azure PowerShell。

有关 Az 模块安装说明,请参阅安装 Azure PowerShell。 若要了解具体的 cmdlet,请参阅 AzureRM.Sql

重要

仍然支持 PowerShell Azure 资源管理器 (RM) 模块,但是所有未来的开发都是针对 Az.Sql 模块。 AzureRM 模块至少在 2020 年 12 月之前将继续接收 bug 修补程序。 Az 模块和 AzureRm 模块中的命令参数大体上是相同的。 若要详细了解其兼容性,请参阅新 Azure PowerShell Az 模块简介

手动密钥轮换

手动密钥轮换使用以下命令来添加全新的密钥,该密钥可能使用新的密钥名称,甚至使用另一密钥保管库。 使用此方法时支持将同一密钥添加到不同的密钥保管库来支持高可用性和异地灾难恢复方案。

注意

Key Vault 名称和密钥名称的总长度不能超过 94 个字符。

使用 Add-AzKeyVaultKeyAdd-AzSqlServerKeyVaultKeySet-AzSqlServerTransparentDataEncryptionProtector cmdlet。

# add a new key to Key Vault
Add-AzKeyVaultKey -VaultName <keyVaultName> -Name <keyVaultKeyName> -Destination <hardwareOrSoftware>

# add the new key from 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>

切换 TDE 保护器模式

  • 若要将 TDE 保护器从 Microsoft 托管模式切换到 BYOK 模式,请使用 Set-AzSqlServerTransparentDataEncryptionProtector cmdlet。

    Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault `
         -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
    
  • 若要将 TDE 保护器从 BYOK 模式切换到 Microsoft 托管模式,请使用 Set-AzSqlServerTransparentDataEncryptionProtector cmdlet。

    Set-AzSqlServerTransparentDataEncryptionProtector -Type ServiceManaged `
         -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
    

后续步骤