applies to:Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
本文介绍了如何识别和解决 Azure Key Vault 密钥访问问题,这些问题导致配置为使用 Azure Key Vault 中客户管理密钥进行透明数据加密 (TDE) 的数据库无法访问。
注意
Microsoft Entra ID以前称为Azure Active Directory(Azure AD)。
简介
将 TDE 配置为在 Azure Key Vault 中使用客户管理的密钥时,数据库需要持续访问 TDE 保护程序才能保持联机状态。 如果逻辑 SQL Server 或托管实例失去对 Azure Key Vault 中客户管理的 TDE 保护程序的访问权限,则数据库将开始拒绝具有相应错误消息的所有连接,并将其状态更改为 不可访问 Azure 门户中。
前 30 分钟,如果 Azure 密钥保管库的访问问题得到解决,数据库会自动修复并上线。 对于所有间歇性和临时网络中断方案,无需采取任何作,数据库会自动联机。 在大多数情况下,需要采取措施来解决基础密钥保管库密钥访问问题。
如果不再需要不可访问的数据库,可以立即将其删除,以停止产生成本。 在还原对Azure密钥保管库密钥的访问权限并且数据库重新联机之前,不能对数据库执行其他作。 在无法访问使用客户管理的密钥加密的数据库时,不能将 TDE 选项从客户管理的密钥更改为服务管理的密钥。 当撤销对 TDE 保护程序的权限时,此限制可保护数据免受未经授权的访问。
在数据库无法访问 30 多分钟后,它不再自动恢复。 如果在该时间段后还原所需的Azure密钥保管库密钥访问,则必须手动重新验证对密钥的访问,使数据库重新联机。 在这种情况下让数据库恢复联机可能需要相当长的时间(具体视数据库大小而定)。 数据库重新联机后,以前配置的设置(如 故障转移组、PITR 历史记录和任何标记 )都将丢失。 因此,使用 操作组 实现通知系统,以便在发现密钥保管库密钥访问问题时尽快发出警报。
导致数据库无法访问的常见错误
将 TDE 与Key Vault一起使用时发生的大多数问题都由以下错误配置之一引起:
密钥保管库不可用或不存在
- 密钥保管库遭意外删除。
- 防火墙已配置为Azure Key Vault,但不允许访问Microsoft服务。
- 间歇性网络错误导致密钥保管库不可用。
无权访问密钥保管库或密钥不存在
- 密钥被意外删除、禁用或过期。
- 服务器的托管标识(系统分配或用户分配)被意外删除。
- 服务器已移动到其他订阅。 在将服务器移动到其他订阅时,分配新的托管标识(系统分配或用户分配)。
- 向服务器的托管标识授予的密钥权限不足(即不包括“获取、包装和取消包装”权限)。
- 已从密钥库撤消服务器托管标识的权限。
发现和解决常见错误
本部分介绍最常见错误的故障排除步骤。
缺少服务器标识
错误消息
401 AzureKeyVaultNoServerIdentity - The server identity is not correctly configured on server. Please contact support.
检测
使用以下 cmdlet 或命令确保已向服务器分配标识:
- Azure PowerShell:Get-AzSqlServer
- Azure CLI:az-sql-server-show
减缓措施
使用以下 cmdlet 或命令为服务器配置用户分配的或系统分配的托管标识:
- Azure PowerShell:Set-AzSqlServer 具有
-AssignIdentity选项。 - Azure CLI:az sql server update 通过
--assign_identity选项。
在 Azure 门户中,进入密钥保管库,然后进入 访问策略。 完成以下步骤:
- 使用“新增”按钮,为上一步中创建的服务器添加 AppId。
- 分配以下密钥权限:Get、Wrap 和 Unwrap
若要了解详细信息,请参阅为服务器分配托管标识。
重要
如果 logical server for Azure SQL Database 或 Azure SQL Managed Instance 在初始配置 tDE 与 Key Vault 后移动到新的Microsoft Entra租户,则必须在新租户中重新创建此托管标识配置。
缺少密钥保管库
错误消息
503 AzureKeyVaultConnectionFailed - The operation could not be completed on the server because attempts to connect to Azure Key Vault have failed.
检测
若要标识密钥 URI 和密钥保管库,请执行以下操作:
使用以下 cmdlet 或命令获取特定服务器实例的密钥 URI:
- Azure PowerShell:Get-AzSqlServerKeyVaultKey
- Azure CLI:az-sql-server-tde-key-show
使用密钥 URI 来标识密钥保管库:
- Azure PowerShell:可以检查$MyServerKeyVaultKey变量的属性,以获取有关密钥保管库的详细信息。
- Azure CLI:查看返回的服务器加密保护器,以获取密钥保管库的详细信息。
减缓措施
确认密钥保管库是否可用:
- 确保密钥保管库可用且服务器具有访问权限。
- 如果密钥保管库位于防火墙后,请务必选中允许 Microsoft 服务访问密钥保管库的复选框。
- 如果密钥保管库已遭意外删除,必须从头开始完成配置。
缺少密钥
错误消息
404 ServerKeyNotFound - The requested server key was not found on the current subscription.
409 ServerKeyDoesNotExists - The server key does not exist.
检测
若要标识密钥 URI 和密钥保管库,请执行以下操作:
- 使用 缺失的密钥保管库中的 cmdlet 或命令来识别添加到逻辑 SQL Server 实例的密钥 URI。 运行这些命令会返回密钥列表。
减缓措施
确认 TDE 保护器存在于 Key Vault 中:
- 标识密钥保管库,然后在Azure门户中转到密钥保管库。
- 确保密钥 URI 标识的密钥存在。
过期的密钥
错误消息
The server <server_name> requires the Key Vault Crypto Service Encryption User permission for the RBAC policy or following Azure Key Vault permissions: Get, WrapKey, UnwrapKey. Please grant the missing permissions to the service principal with ID <akv_key>. Ensure the key is active, not expired or disabled, set with the key activation date no later than the current date, and that trusted Microsoft services can bypass the firewall if applicable.
检测
若要识别密钥保管库中的过期密钥,请执行以下操作:
- 使用 Azure 门户,转到 Key vault 服务菜单>Objects>Keys,并检查密钥过期时间。
- 使用 PowerShell 命令 Get-AzKeyVaultKey。
- 使用 Azure CLI 命令,az keyvault key show。
减缓措施
- 检查密钥保管库密钥的期满日,以确认密钥已过期。
- 延长密钥的期满日。
- 选择以下其中一项密钥重新验证选项,使数据库恢复在线状态:
- 重试现有密钥。
- 选择备份密钥。
在 Azure 门户中重新验证密钥
若要使用 Azure 门户重新验证 TDE 保护程序密钥,请执行以下作:
- 在 Azure 门户中,导航到 SQL 服务器或 SQL 托管实例资源。
- 在“ 安全性”下的“资源”菜单上,选择“ 透明数据加密”。
- 如果数据库由于密钥访问问题而处于不可访问状态,门户会在 TDE 页面上显示 密钥重新验证 横幅或选项。
- 选择 “重试现有密钥 ”以尝试使用当前密钥重新建立访问权限,或 选择“选择备份密钥 ”以配置与密钥保管库不同的密钥。
- 重新验证成功后,数据库将转换回可访问状态。 此过程可能需要时间,具体取决于数据库大小。
小窍门
如果未在“透明数据加密”页上看到“密钥重新验证”选项,请首先验证是否已解决基础密钥保管库访问问题。 仅当服务器检测到 TDE 保护程序密钥不可访问时,才会显示重新验证选项。
有关详细信息,请参阅不可访问的 TDE 保护器。
注意
应在密钥到期前指定的天数轮换密钥,以提供足够的时间来应对故障。 有关详细信息,请参阅 Azure Policy Key Vault 的内置定义。
缺少权限
错误消息
401 AzureKeyVaultMissingPermissions - The server is missing required permissions on the Azure Key Vault.
检测
若要标识密钥 URI 和密钥保管库,请执行以下操作:
- 使用 缺失密钥保管库 中的 cmdlet 或命令来标识逻辑 SQL Server 实例所使用的密钥保管库。
减缓措施
确认服务器具有密钥保管库权限以及访问密钥的正确权限:
- 在 Azure 门户中,转到 密钥保管库 >访问策略。 查找服务器的托管标识(系统分配或用户分配)。
- 如果服务器标识存在,请确保它具有以下密钥权限:Get、WrapKey 和 UnwrapKey。
- 如果服务器标识不存在,请使用“新增”按钮进行添加。
从活动日志获取 TDE 状态
为了监控因 Azure Key Vault 密钥访问问题导致的数据库状态,以下事件将记录到基于 Azure Resource Manager URL 的资源 ID 的 Activity Log。
注意
出现密钥保管库访问问题后,可能需要至少 15-30 分钟,事件才会显示在活动日志中。
服务失去对Azure Key Vault密钥访问权限时的事件
Azure SQL Database
事件名称:MakeDatabaseInaccessible
状态: 已启动
说明:服务器 {server_name} 上的数据库 {database_name} 已失去对Azure Key Vault密钥的访问权限,并且现在正在转换为不可访问的状态。
Azure SQL Managed Instance
事件名称:MakeManagedDbInaccessible
状态: 已启动
说明:托管服务器 {server_name} 上的数据库 {database_name} 已失去对Azure Key Vault密钥的访问权限,现在正转换为不可访问的状态。
当问题在 30 分钟内未解决时,并且必须手动验证 Azure Key Vault 密钥访问的事件
Azure SQL Database
事件名称:MakeDatabaseInaccessible
状态:已成功
说明:数据库不可访问,需要用户解决Azure密钥保管库错误,并使用
Azure SQL Managed Instance
事件名称:MakeManagedDbInaccessible
状态:已成功
说明:托管服务器 {server_name} 上的数据库 { database_name} 不可访问,并要求用户重新建立对 Azure Key Vault 密钥的访问权限。
重新验证 Azure Key Vault 密钥访问成功且数据库重新联机时的事件。
Azure SQL Database
事件名称:MakeDatabaseAccessible
状态: 已启动
说明:已重新建立对 Azure Key Vault 密钥的访问权限,已开始操作以使服务器 {server_name} 上的数据库 {database_name} 可访问。
Azure SQL Managed Instance
事件名称:MakeManagedDatabaseAccessible
状态: 已启动
说明:已重新建立访问 Azure Key Vault 密钥的权限,操作已开始,使托管服务器 {server_name} 上的数据库 {database_name} 可访问。
当数据库成功恢复联机时发生的事件
Azure SQL Database
事件名称:MakeDatabaseAccessible
状态:已成功
说明:已重新建立对 Azure Key Vault 密钥的访问权限,服务器 {server_name} 上的数据库 {database_name} 现已联机。
Azure SQL Managed Instance
事件名称:MakeManagedDatabaseAccessible
状态:已成功
说明:已重新建立对 Azure Key Vault 密钥的访问权限,托管服务器 {server_name} 上的数据库 {database_name} 现已联机。
Azure Key Vault密钥访问重新验证失败事件
Azure SQL Database
事件名称:MakeDatabaseAccessible
状态:失败
说明:已重新建立对 Azure Key Vault 密钥的访问权限,但使数据库 {database_name} 在服务器 {server_name} 上可访问的操作失败。
Azure SQL Managed Instance
事件名称:MakeManagedDatabaseAccessible
状态:失败
说明:已重新建立对 Azure Key Vault 密钥的访问,但使数据库 {database_name} 在托管服务器 {server_name} 上可访问的操作失败。