适用于:Azure SQL 数据库
Azure SQL 托管实例
Microsoft Entra ID(以前称为 Azure Active Directory)提供自动托管标识,可对支持 Microsoft Entra 身份验证的任何 Azure 服务(例如 Azure Key Vault)进行身份验证,而无需在代码中公开凭据。 有关详细信息,请参阅 Azure 中的托管标识类型。
托管标识可以分为两种类型:
- 系统分配
- 用户分配
有关详细信息,请参阅 Microsoft Entra ID 中用于 Azure SQL 的管理身份。
对于 Azure SQL 中带有客户托管密钥 (CMK) 的 TDE,服务器上的托管标识用于提供对密钥保管库上服务器的访问权限。 例如,在服务器上启用带有 CMK 的 TDE 之前,应向系统分配的服务器托管身份提供密钥保管库权限。
除了系统分配给用于 TDE 和 CMK 的托管标识之外,服务器上分配的用户托管标识 (UMI) 还可以用来允许服务器访问密钥仓库。 启用对密钥保管库访问的先决条件是确保用户分配的托管标识具有密钥保管库上的 Get、wrapKey 和 unwrapKey 权限。 由于用户分配的托管标识是可以创建并可被授予对密钥保管库访问权限的独立资源,因此现在可以在创建服务器或数据库时启用带有客户托管密钥的 TDE。
备注
要将用户分配的托管标识分配给逻辑服务器或托管实例,用户必须具有 SQL Server 参与者或 SQL 托管实例参与者 Azure RBAC 角色以及包含 Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action 操作的任何其他 Azure RBAC 角色。
通过创建用户分配的托管标识,并授予它对密钥保管库的访问权限,甚至在创建服务器或数据库之前,也能为 Azure SQL 逻辑服务器或托管实例预授权密钥保管库访问权限
允许创建启用了 TDE 和 CMK 的 Azure SQL 逻辑服务器
允许将相同的用户分配的托管标识分配给多个服务器,无需为每个 Azure SQL 逻辑服务器或托管实例单独开启系统分配的托管标识,并为其提供对密钥保管库的访问权限
提供了如下功能:使用可用的内置 Azure 策略在创建服务器时强制执行 CMK
- 默认情况下,Azure SQL 中的 TDE 使用服务器上设置的主要用户分配托管标识进行密钥保管库访问。 如果尚未将用户分配的身份分配给服务器,则系统分配的服务器托管标识将用于密钥保管库访问。
- 将用户分配的托管标识用于 TDE 和 CMK 时,请将该标识分配给服务器并将其设置为服务器的主要标识
- 主要用户分配的托管标识需要持续的密钥保管库访问权限(get、wrapKey、unwrapKey 权限)。 如果撤销标识对密钥保管库的访问权限或未提供足够的权限,则数据库将移动到不可访问状态
- 如果将主要用户分配的托管标识更新为其他用户分配的托管标识,则必须在更新主要标识之前向新标识授予对密钥保管库的所需权限
- 若要将服务器从用户分配的托管标识切换到系统分配的托管标识以进行密钥保管库访问,请为系统分配的托管标识提供所需的密钥保管库权限,然后从服务器中删除所有由用户分配的托管标识
重要
不应从 Azure 中删除用于借助 CMK 实现 TDE 的主要用户分配托管标识。 删除此标识将导致服务器失去对密钥库的访问权限,并且数据库变为“无法访问”。
- 如果密钥保管库位于使用防火墙的虚拟网络后面,则必须在密钥保管库的网络菜单中启用“允许受信任的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://docs.azure.cn/azure-sql/database/transparent-data-encryption-byok-create-server).
- 如果收到上述错误,请检查密钥保管库是否位于虚拟网络或防火墙之后,并确保已启用“允许受信任的 Microsoft 服务绕过此防火墙”选项。
- 将多个由用户分配的托管标识分配给服务器或托管实例时,如果使用 Azure 门户的“标识”窗格从服务器中删除单个标识,则操作虽然会成功,但不会从服务器中删除标识。 从 Azure 门户将所有用户分配的托管标识一起移除会成功执行。
- 当服务器或托管实例配置了客户托管的 TDE 并且在服务器上同时启用了系统分配的托管标识和用户分配的托管标识时,如果直接从服务器中删除用户分配的托管标识,但没有首先为系统分配的托管标识授予密钥保管库的访问权限,那么将导致出现“发生意外错误”消息。 在从服务器中删除主要的用户分配的托管标识(和任何其他用户分配的托管标识)之前,请确保已为系统分配的托管标识提供密钥保管库访问权限。