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

适用于: Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics(仅限专用 SQL 池)

本文介绍使用 Azure Key Vault 中的 TDE 保护器对服务器进行的密钥轮换。 为服务器轮换逻辑 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)。 有关 Synapse 工作区内专用 SQL 池的透明数据加密的文档,请参阅 Azure Synapse Analytics 加密

重要

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

先决条件

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

转到 Azure 门户

自动密钥轮换

为服务器或数据库配置 TDE 保护程序时,可以从 Azure 门户或使用以下 PowerShell 或 Azure CLI 命令启用 TDE 保护程序的自动轮换。 启用后,服务器或数据库将持续检查密钥保管库,获取用作 TDE 保护程序的任何新版本的密钥。 如果检测到新版密钥,服务器或数据库上的 TDE 保护程序将在24 小时内自动轮换到最新密钥版本。

服务器、数据库或托管实例中的自动轮换可用于 Azure 密钥保管库中的自动密钥轮换,以启用 TDE 密钥的端到端零触摸轮换。

注意

如果服务器或托管实例配置了异地复制,在启用自动轮换之前,还需要遵循此处所述的其他准则。

使用 Azure 门户

  1. 浏览到现有服务器或托管实例的“透明数据加密”部分。
  2. 选择“客户管理的密钥”选项,并选择要用作 TDE 保护器的密钥保管库和密钥。
  3. 选中“自动轮换密钥”复选框。
  4. 选择“保存”。

透明数据加密的自动轮换密钥配置的屏幕截图。

数据库级别的自动密钥轮换

也可以在 Azure SQL 数据库的数据库级别启用自动密钥轮换。 如果只想为服务器上的一个数据库或数据库子集启用自动密钥轮换,这非常有用。 有关详细信息,请参阅使用数据库级别客户管理的密钥进行 TDE 标识和密钥管理

有关在数据库级别设置自动密钥轮换的 Azure 门户信息,请参阅使用数据库级别客户管理的密钥更新现有的 Azure SQL 数据库

异地复制配置的自动密钥轮换

在将主服务器设置为将 TDE 与 CMK 配合使用的 Azure SQL 数据库异地复制配置中,还需要将辅助服务器配置为使用 CMK 启用 TDE,并使用与主服务器相同的密钥。

使用 Azure 门户

  1. 浏览到主服务器的“透明数据加密”部分。

  2. 选择“客户管理的密钥”选项,并选择要用作 TDE 保护器的密钥保管库和密钥。

  3. 选中“自动轮换密钥”复选框。

  4. 选择“保存”。

    主服务器上异地复制方案中透明数据加密的自动轮换密钥配置的屏幕截图。

  5. 浏览到辅助服务器的“透明数据加密”部分。

  6. 选择“客户管理的密钥”选项,并选择要用作 TDE 保护器的密钥保管库和密钥。 使用与主服务器相同的密钥。

  7. 取消选中“将此密钥设置为默认的 TDE 保护程序”。

  8. 选择“保存”。

    辅助服务器上异地复制方案中透明数据加密的自动轮换密钥配置的屏幕截图。

当密钥在主服务器上轮换时,它会自动传输到辅助服务器。

为每个服务器使用不同的密钥

在 Azure 门户中使用 CMK 配置 TDE 时,可以使用不同的密钥保管库密钥配置主服务器和辅助服务器。 在 Azure 门户中,用于保护主服务器的密钥也与保护已复制到辅助服务器的主数据库的密钥相同,这并不明显。 但是,可以使用 PowerShell、Azure CLI 或 REST API 来获取有关在服务器上使用的密钥的详细信息。 这表明自动轮换密钥已从主服务器传输到辅助服务器。

下面是使用 PowerShell 命令检查密钥轮换后从主服务器传输到辅助服务器的密钥的示例。

  1. 在主服务器上执行以下命令,以显示某台服务器的密钥详细信息:

    Get-AzSqlServerKeyVaultKey -ServerName <logicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName> 
    
  2. 应看到类似于以下内容的结果:

    ResourceGroupName : <SQLDatabaseResourceGroupName> 
    ServerName        : <logicalServerName> 
    ServerKeyName     : <keyVaultKeyName> 
    Type              : AzureKeyVault 
    Uri               : https://<keyvaultname>.vault.azure.cn/keys/<keyName>/<GUID> 
    Thumbprint        : <thumbprint> 
    CreationDate      : 12/13/2022 8:56:32 PM
    
  3. 在辅助服务器上执行相同的 Get-AzSqlServerKeyVaultKey 命令:

    Get-AzSqlServerKeyVaultKey -ServerName <logicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName> 
    
  4. 如果辅助服务器的默认 TDE 保护程序使用的密钥与主服务器不同,应会显示两个(或多个)密钥。 第一个密钥是默认的 TDE 保护程序,第二个密钥是用于保护复制数据库的主服务器中使用的密钥。

  5. 当密钥在主服务器上轮换时,它会自动传输到辅助服务器。 如果在主服务器上再次运行 Get-AzSqlServerKeyVaultKey,应会显示两个密钥。 第一个密钥是原始密钥,第二个密钥是作为密钥轮换的一部分生成的当前密钥。

  6. 在辅助服务器上运行 Get-AzSqlServerKeyVaultKey 命令,也应显示与主服务器中相同的密钥。 这将确认主服务器上的轮换密钥会自动传输到辅助服务器,并用于保护数据库副本。

手动密钥轮换

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

如果使用手动密钥轮换,当密钥保管库中生成新的密钥版本时(在密钥保管库中手动操作或通过自动密钥轮换策略),必须将同一版本手动设置为服务器上的 TDE 保护器。

注意

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

使用 Azure 门户:

  1. 浏览到现有服务器或托管实例的“透明数据加密”菜单。
  2. 选择“客户管理的密钥”选项,并选择要用作新的 TDE 保护器的密钥保管库和密钥。
  3. 选择“保存”。

透明数据加密的手动轮换密钥配置的屏幕截图。

切换 TDE 保护器模式

使用 Azure 门户将 TDE 保护器从“Microsoft 托管”切换到“BYOK”模式:

  1. 浏览到现有服务器或托管实例的“透明数据加密”菜单。
  2. 选择“客户管理的密钥”选项。
  3. 选择要用作 TDE 保护器的密钥保管库和密钥。
  4. 选择“保存”。