使用数据库级别客户管理的密钥进行 TDE 标识和密钥管理

适用于:Azure SQL 数据库

注意

  • 数据库级别 TDE CMK 可用于 Azure SQL 数据库(所有 SQL 数据库版本)。 它不适用于 Azure SQL 托管实例、本地 SQL Server、Azure VM 和 Azure Synapse Analytics(专用 SQL 池 [以前称为 SQL DW])。
  • 通过排除联合客户端 ID 参数,可以应用相同的指南在同一租户中配置数据库级别客户管理的密钥。 有关数据库级别客户管理的密钥的详细信息,请参阅在数据库级别使用客户管理的密钥进行透明数据加密 (TDE)

在本指南中,我们将介绍有关在数据库级别使用透明数据加密 (TDE) 和客户管理的密钥 (CMK) 创建、更新和检索 Azure SQL 数据库的步骤,并利用用户分配的托管标识来访问 Azure Key Vault。 Azure Key Vault 与 Azure SQL 数据库位于不同的 Microsoft Entra 租户中。 有关详细信息,请参阅使用透明数据加密的跨租户客户管理的密钥

注意

Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。

先决条件

  • 本指南假定你有两个 Microsoft Entra 租户。
    • 第一个租户包括 Azure SQL 数据库资源、多租户 Microsoft Entra 应用程序和用户分配的托管标识组成。
    • 第二个租户包含 Azure Key Vault。
  • 有关设置跨租户 CMK 以及配置 Microsoft Entra 应用程序和 Azure Key Vault 所需的 RBAC 权限的全面说明,请参阅以下指南之一:
  • Azure CLI 2.52.0 或更高版本。
  • Az PowerShell 模块 10.3.0 或更高版本。
  • 数据库级别 CMK 所需的 RBAC 权限与服务器级别 CMK 所需的权限相同。 具体来说,在服务器级别使用 Azure Key Vault托管身份和 TDE 的跨租户 CMK 时适用的相同 RBAC 权限也适用于数据库级别。 有关密钥管理和访问策略的详细信息,请参阅密钥管理

第一个租户上的必需资源

考虑到本教程的教学目标,我们假设第一个租户属于独立软件供应商 (ISV),第二个租户来自其客户端。 有关此场景的详细信息,请参阅使用透明数据加密的跨租户客户管理的密钥

在使用跨租户 CMK 为 Azure SQL 数据库配置 TDE 之前,需要有一个多租户 Microsoft Entra 应用程序,该应用程序配置了用户分配的托管标识,作为应用程序的联合标识凭据进行分配。 按照先决条件中的指南之一操作。

  1. 在要创建 Azure SQL 数据库的第一个租户上,创建并配置多租户 Microsoft Entra 应用程序

  2. 创建用户分配的托管标识

  3. 用户分配的托管标识配置为多租户应用程序的联合标识凭据

  4. 记录应用程序名称和应用程序 ID。 这可以在 Azure 门户>Microsoft Entra ID>企业应用程序中找到,然后搜索创建的应用程序。

第二个租户上所需的资源

注意

自 2024 年 3 月 30 日起,Azure AD 和 MSOnline PowerShell 模块已弃用。 若要了解详细信息,请阅读有关弃用的更新。 在此日期之后,对这些模块的支持仅限于到 Microsoft Graph PowerShell SDK 的迁移帮助和安全性修复。 弃用的模块将持续运行至 2025 年 3 月 30 日。

我们建议迁移到 Microsoft Graph PowerShell,以便与 Microsoft Entra ID(以前称为 Azure AD)进行交互。 有关常见迁移问题,请参阅迁移常见问题解答注意:2024 年 6 月 30 日之后,MSOnline 版本 1.0.x 可能会遇到中断。

  1. 在 Azure Key Vault 所在的第二个租户上,使用第一个租户中注册应用程序的应用程序 ID 创建服务主体(应用程序)。 下面是一些有关如何注册多租户应用程序的示例。 分别将 <TenantID><ApplicationID> 替换为 Microsoft Entra ID 中的客户端租户 ID 和多租户应用程序中的应用程序 ID

    • PowerShell:

      Connect-AzureAD -TenantID <TenantID> -Environment AzureChinaCloud
      New-AzADServicePrincipal  -ApplicationId <ApplicationID>
      
    • Azure CLI

      az login --tenant <TenantID>
      az ad sp create --id <ApplicationID>
      
  2. 转到“Azure 门户”>“Microsoft Entra ID”>“企业应用程序”并搜索已创建的应用程序。

  3. 创建 Azure Key Vault(如果还没有),并创建密钥

  4. 创建或设置访问策略

    1. 创建访问策略时,在“密钥权限”下选择“获取、包装密钥和解包密钥”权限。
    2. 创建访问策略时,选择在“主体”选项的第一步中创建的多租户应用程序。

    Azure 门户中密钥保管库的访问策略菜单的屏幕截图。

  5. 创建访问策略和密钥后,从密钥保管库检索密钥并记录密钥标识符。

使用数据库级别客户管理的密钥创建新的 Azure SQL 数据库

以下示例介绍如何使用用户分配的托管标识在 Azure SQL 数据库上创建数据库,以及如何在数据库级别设置跨租户客户管理的密钥。 在数据库创建阶段为透明数据加密设置客户管理的密钥需要用户分配的托管标识。

  1. 浏览到 Azure 门户中的选择 SQL 部署选项页。

  2. 如果你尚未登录到 Azure 门户,请按提示登录。

  3. 在“SQL 数据库”下将“资源类型”设置保留为“单一数据库”,然后选择“创建” 。

  4. 在“创建 SQL 数据库”窗体的“基本信息”选项卡上的“项目详细信息”下,为数据库选择所需的 Azure订阅、资源组和服务器。 然后,使用唯一名称作为数据库名称。 如果尚未为 Azure SQL 数据库创建逻辑服务器,请参阅使用跨租户客户管理的密钥 (CMK) 创建配置了 TDE 的服务器

  5. 转到“安全性”选项卡后,选择“配置透明数据加密”。

    创建 Azure SQL 数据库时的 Azure 门户和“安全性”菜单的屏幕截图。

  6. 在“透明数据加密”菜单上,选择“数据库级客户管理密钥(CMK)”。

    Azure 门户中“透明数据加密”菜单的屏幕截图。

  7. 对于“用户分配的托管身份”,选择“配置”以启用“数据库身份”,并在以下情况下向资源“添加”用户分配的托管身份:所需的身份未在”身份“菜单中列出。 然后,选择应用

    Azure 门户中“标识”菜单的屏幕截图。

    注意

    如果要配置 TDE 的跨租户 CMK,则可以在此处配置“联合客户端标识”。

  8. 在“透明数据加密”菜单上,选择“更改密钥”。 为要用于 TDE 的客户管理的密钥选择所需的“订阅”、“密钥保管库”、“密钥”和“版本”。 选择“选择”按钮 。 选择密钥后,还可以根据需要使用“透明数据加密”菜单中的“Azure Key Vault URI (对象标识符)”添加其他数据库密钥。

    也可以使用“透明数据加密”菜单中的“自动轮换密钥”复选框在数据库级别启用自动密钥轮换

    Azure 门户中用于添加其他密钥的“透明数据加密”菜单的屏幕截图。

  9. 选择“应用”以继续创建数据库。

  10. 在页面底部选择“查看 + 创建”

  11. 在“查看 + 创建”页上,查看后选择“创建”。

注意

如果用户分配的托管标识未在密钥保管库上启用正确的权限,则数据库创建将失败。 用户分配的托管标识将需要密钥保管库上的 Get、wrapKey 和 unwrapKey 权限。 有关详细信息,请参阅使用客户管理的密钥进行透明数据加密的托管标识

使用数据库级别客户管理的密钥更新现有的 Azure SQL 数据库

以下示例介绍如何使用用户分配的托管标识更新 Azure SQL 数据库上的现有数据库,以及如何在数据库级别设置跨租户客户管理的密钥。 在数据库创建阶段为透明数据加密设置客户管理的密钥需要用户分配的托管标识。

  1. Azure 门户中,导航到要使用数据库级别客户管理的密钥更新的 SQL 数据库资源。

  2. 在“安全性”下,选择“标识”。 为此数据库添加“用户分配的托管标识”,然后选择“保存”

  3. 现在,转到数据库的“安全性”下的“数据加密”菜单。 选择“数据库级别客户管理的密钥(CMK)”。 数据库的“数据库标识”应该处于“已启用”状态,因为已在上一步中配置了身份。

  4. 选择“更改密钥”。 为要用于 TDE 的客户管理的密钥选择所需的“订阅”、“密钥保管库”、“密钥”和“版本”。 选择“选择”按钮 。 选择密钥后,还可以根据需要使用“数据加密”菜单中的“Azure Key Vault URI (对象标识符)”添加其他数据库密钥。

    如果要在数据库级别启用自动密钥轮换,请选中“自动轮换密钥”复选框。

    更新现有数据库时 Azure 门户中“透明数据加密”菜单的屏幕截图。

  5. 选择“保存” 。

查看 Azure SQL 数据库上的数据库级别客户管理的密钥设置

以下示例是检索数据库的数据库级别客户管理的密钥。 默认情况下,ARM 资源 Microsoft.Sql/servers/databases 仅显示在数据库上配置的 TDE 保护程序和托管标识。 要展开完整的密钥列表,请使用 -ExpandKeyList 参数。 此外,筛选器(如 -KeysFilter "current")和时间点值(例如 2023-01-01)可用于检索当前使用的密钥和过去在特定时间点使用的密钥。 只有单个数据库查询支持这些筛选器,而服务器级别查询则不支持。

若要在 Azure 门户中查看数据库级别客户管理的密钥,请转到 SQL 数据库资源的“数据加密”菜单。

列出逻辑服务器中的所有密钥

要提取服务器下每个数据库使用的所有密钥(而不仅仅是主保护程序)的列表,必须使用密钥筛选器对其进行单独查询。 下面是一个 PowerShell 查询示例,用于列出逻辑服务器下的每个密钥。

使用 Get-AzSqlDatabase cmdlet。

$dbs = Get-AzSqlDatabase -resourceGroupName <ResourceGroupName> -ServerName <ServerName>
foreach ($db in $dbs)
{
Get-AzSqlDatabase -DatabaseName $db.DatabaseName -ServerName $db.ServerName -ResourceGroupName $db.ResourceGroupName -ExpandKeyList
}

在 Azure SQL 数据库上重新验证数据库级别客户管理的密钥

如果如使用 CMK 进行透明数据加密 (TDE) 中所述无法访问 TDE 保护程序,则在更正密钥访问权限后,就可以使用重新验证密钥操作使数据库可访问。 有关示例,请参阅以下说明或命令。

使用 Azure 门户查找 SQL 数据库资源。 选择 SQL 数据库资源后,转到“安全”设置下的“数据加密”菜单的“透明数据加密”选项卡。 如果数据库无法访问 Azure Key Vault,则将显示“重新验证密钥”按钮,你可以选择“重试现有密钥”来重新验证现有密钥,或者选择“选择备份密钥”来重新验证其他密钥。

还原 Azure SQL 数据库上的数据库级别客户管理的密钥

如果服务器是通过服务管理的密钥配置的,则可以使用以下命令将通过数据库级别 CMK 配置的数据库还原到服务器级别加密。

若要将 Azure 门户中的数据库级别客户管理的密钥设置恢复为服务器级别的加密密钥,请转到“数据加密”菜单的“透明数据加密”选项卡 SQL 数据库资源。 选择“服务器级别加密密钥”,然后选择“保存”以保存设置。

注意

若要对单个数据库使用“服务器级别加密密钥”设置,必须将 Azure SQL 数据库的逻辑服务器配置为使用 TDE 的“服务托管密钥”。

后续步骤

查看以下有关各种数据库级别 CMK 操作的文档: