你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用客户管理的密钥实现透明数据加密的托管标识

适用于:Azure SQL 数据库Azure SQL 托管实例

Microsoft Entra ID(以前称为 Azure Active Directory)提供自动托管标识,可对支持 Microsoft Entra 身份验证的任何 Azure 服务(例如 Azure Key Vault)进行身份验证,而无需在代码中公开凭据。 有关详细信息,请参阅 Azure 中的托管标识类型

托管标识可以分为两种类型:

  • 系统分配
  • 用户分配

有关详细信息,请参阅适用于 Azure SQL 的 Microsoft Entra ID 中的托管标识

对于 Azure SQL 中 具有客户管理的密钥(CMK)的 TDE ,服务器上的托管标识用于向密钥保管库或托管 HSM 上的服务器提供访问权限。 例如,在服务器上启用带有 CMK 的 TDE 之前,应向系统分配的服务器托管身份提供 Azure Key Vault 权限

除了已支持用于借助 CMK 实现 TDE 的系统分配托管标识之外,分配给服务器的用户分配托管标识 (UMI) 可用于支持服务器访问密钥保管库或托管 HSM。 启用密钥保管库或托管 HSM 访问的先决条件是确保为用户分配的托管标识提供对密钥保管库或托管 HSM 的 GetwrapKeyunwrapKey 权限。 由于用户分配的托管标识是一个独立的资源,可以创建并授予对密钥保管库或托管 HSM 的访问权限, 因此现在可以在服务器或数据库的创建时启用具有客户管理的密钥的 TDE

注意

要将用户分配的托管标识分配给逻辑服务器或托管实例,用户必须具有 SQL Server 参与者SQL 托管实例参与者 Azure RBAC 角色以及包含 Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action 操作的任何其他 Azure RBAC 角色。

将 UMI 用于客户管理的 TDE 的好处

  • 允许通过创建用户分配的托管标识,并授予它对密钥保管库或托管 HSM 的访问权限,甚至在创建服务器或数据库之前,即可对 Azure SQL 逻辑服务器或 Azure SQL 托管实例的密钥保管库或托管 HSM 进行预授权访问。

  • 允许创建启用了 TDE 和 CMK 的 Azure SQL 逻辑服务器。

  • 使同一用户分配的托管标识能够分配给多个服务器,而无需为每个 Azure SQL 逻辑服务器或 Azure SQL 托管实例单独启用系统分配的托管标识,并为其提供对密钥保管库或托管 HSM 的访问权限。

  • 提供在服务器创建时使用可用内置 Azure 策略强制实施 CMK 的功能。

将 UMI 用于客户管理的 TDE 时的注意事项

  • 默认情况下,Azure SQL 中的 TDE 使用服务器上设置的主要用户分配托管标识进行密钥保管库或托管 HSM 访问。 如果未将用户分配的标识分配给服务器,则服务器系统分配的托管标识用于密钥保管库或托管 HSM 访问。
  • 将用户分配的托管标识用于具有 CMK 的 TDE 时,将标识分配给服务器,并将其设置为服务器的主要标识。
  • 主要用户分配的托管标识需要持续的密钥保管库或托管 HSM 访问权限(get、wrapKey、unwrapKey 权限)。 如果撤销标识对密钥保管库或托管 HSM 的访问权限或未提供足够的权限,则数据库将移动到 不可访问 状态。
  • 如果将主要用户分配的托管标识更新为其他用户分配的托管标识,则必须在更新主数据库之前向密钥保管库或托管 HSM 授予新标识所需的权限。
  • 若要将服务器从用户分配到系统分配的托管标识进行密钥保管库或托管 HSM 访问,请为系统分配的托管标识提供所需的密钥保管库或托管 HSM 权限,然后从服务器中删除所有用户分配的托管标识。

重要

不应从 Azure 中删除用于借助 CMK 实现 TDE 的主要用户分配托管标识。 删除此标识将导致服务器无法访问密钥保管库或托管 HSM 和数据库

限制和已知问题

  • 如果密钥保管库或托管 HSM 位于使用防火墙的虚拟网络后面,则必须在密钥保管库或托管 HSM 的网络菜单中启用“允许受信任的Microsoft服务绕过此防火墙”选项(如果要使用用户分配的托管标识或系统分配的托管标识)。 启用此选项后,无法在 Azure 门户的 SQL Server TDE 菜单中列出可用密钥。 要设置单个 CMK,必须使用密钥标识符。 未启用“允许受信任的 Microsoft 服务绕过此防火墙”选项时,将返回以下错误:
    • Failed to save Transparent Data Encryption settings for SQL resource: <ServerName>. Error message: The managed identity with ID '/subscriptions/subscriptionID/resourcegroups/resource_name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/umi_name' requires the following Azure Key Vault permissions: 'Get, WrapKey, UnwrapKey' to the key 'https://keyvault_name/keys/key_name'. Please grant the missing permissions to the identity. Additionally ensure the key is not expired and is not disabled. For expired key, please extend the key expiry time so that SQL can use it to perform wrap and unwrap operations. If your key vault is behind a virtual network or firewall, ensure you select the 'Allow trusted Microsoft services to bypass this firewall' option. (https://aka.ms/sqltdebyokcreateserver).
    • 如果出现上述错误,请检查密钥保管库或托管 HSM 是否位于虚拟网络或防火墙后面,并确保启用 “允许受信任的Microsoft服务绕过此防火墙 ”选项。
  • 将多个由用户分配的托管标识分配给服务器或托管实例时,如果使用 Azure 门户的“标识”窗格从服务器中删除单个标识,则操作虽然会成功,但不会从服务器中删除标识。 从 Azure 门户将所有用户分配的托管标识一起移除会成功执行。
  • 如果将服务器或托管实例配置为使用客户管理的 TDE 进行配置,并且服务器上同时启用了系统分配的托管标识和用户分配的托管标识,则会从服务器中删除用户分配的托管标识,而无需先向系统分配的托管标识授予对密钥保管库或托管 HSM 的访问权限,导致 出现意外错误 消息。 在从服务器中删除主用户分配的托管标识(以及任何其他用户分配的托管标识)之前,请确保系统分配的托管标识已提供密钥保管库或托管 HSM 访问。

后续步骤