共用方式為


Azure Key Vault 中客戶管理金鑰進行透明資料加密的常見錯誤

適用於:Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

本文說明如何識別並解決Azure Key Vault金鑰存取問題,這些問題導致配置使用具有客戶管理金鑰的Azure Key Vault中透明資料加密(TDE)的資料庫無法存取。

注意

Microsoft Entra ID 過去稱為 Azure Active Directory(Azure AD)。

簡介

當你在 Azure Key Vault 中設定 TDE 使用客戶管理的金鑰時,資料庫需要持續存取 TDE 保護器才能保持在線。 如果邏輯 SQL 伺服器或受管理實例在 Azure Key Vault 中失去對客戶管理的 TDE 保護器的存取權,資料庫會開始拒絕所有帶有錯誤訊息的連線,並在 Azure 入口網站中將其狀態變更為 Inaccessible

前 30 分鐘內,如果底層的 Azure 金鑰庫存取問題解決,資料庫會自動修復並自動上線。 對於所有間歇性或暫時性的網路中斷情境,你不需要採取任何行動,資料庫會自動上線。 在大多數情況下,你需要採取行動來解決根本的金鑰庫存取問題。

如果你不再需要無法存取的資料庫,可以立即刪除它,避免產生成本。 在你恢復對 Azure 金鑰保險庫金鑰的存取權限且資料庫重新上線之前,你無法對資料庫執行其他操作。 你也無法在伺服器上將 TDE 選項從客戶管理的金鑰改為服務管理金鑰,因為用客戶管理的金鑰加密的資料庫無法存取。 此限制可防止資料在 TDE 保護器權限被撤銷時遭到未經授權存取。

當資料庫無法存取超過 30 分鐘後,它就不再自動修復。 如果您在該期間後恢復所需的 Azure 金鑰保險庫金鑰存取權,必須手動重新驗證該金鑰的存取權限,才能讓資料庫重新上線。 在此情況下,讓資料庫重新上線可能需要花很多時間,視資料庫大小而定。 一旦資料庫重新上線,先前設定的 如故障轉移群組、PITR 歷史紀錄及所有標籤 都會遺失。 因此,使用 Action Groups 實作通知系統,以便能夠及時提醒你金鑰庫存取問題。

導致資料庫變得無法存取的常見錯誤

大多數使用 Key Vault 使用 TDE 時發生的問題,都是由以下其中一種錯誤設定引起:

金鑰保存庫無法使用或不存在

  • 意外刪除金鑰保存庫。
  • 防火牆是為 Azure Key Vault 設定的,但它不允許存取 Microsoft 服務。
  • 間歇網路錯誤導致金鑰保管庫不可用。

沒有存取金鑰保存庫的權限或金鑰不存在

  • 該金鑰被誤刪、停用或過期。
  • 意外刪除了伺服器的管理身份(系統指派的或使用者指派的)。
  • 伺服器已移至不同的訂閱方案。 當你將伺服器移到另一個訂閱時,為伺服器指派一個新的管理身份(系統指派或使用者指派)。
  • 授與伺服器受控識別的權限不足,無法存取金鑰 (不含 Get、Wrap 和 Unwrap 權限)。
  • 已從金鑰保存庫撤銷伺服器受控識別的權限。

識別及解決常見的錯誤

本節說明最常見錯誤的故障排除步驟。

缺少伺服器識別

錯誤訊息

401 AzureKeyVaultNoServerIdentity - The server identity is not correctly configured on server. Please contact support.

偵測

使用下列 Cmdlet 或命令,以確保身分識別已指派給伺服器:

風險降低

使用下列 Cmdlet 或命令,為伺服器設定使用者指派或系統指派的受控識別:

在Azure入口網站,前往金鑰保險庫,然後進入 Access policies。 完成下列步驟:

  1. 使用 [新增] 按鈕,為上一個步驟中建立的伺服器新增 AppId。
  2. 指派下列金鑰權限:取得、包裝及解除包裝

若要深入了解,請參閱將受控識別指派給您的伺服器

重要

若在 Azure SQL Database 或 Azure SQL Managed Instance 中的 邏輯伺服器,於啟用具 Key Vault 的透明資料加密(TDE)後被移至新的 Microsoft Entra 租戶,則必須在新租戶中重新設定此受控身分識別。

遺漏金鑰庫

錯誤訊息

503 AzureKeyVaultConnectionFailed - The operation could not be completed on the server because attempts to connect to Azure Key Vault have failed.

偵測

識別金鑰 URI 和金鑰保存庫:

  1. 使用下列 Cmdlet 或命令來取得特定伺服器執行個體的金鑰 URI:

  2. 使用金鑰 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 或 Missing key vault 中的命令,找出新增到邏輯 SQL Server 實例中的金鑰 URI。 執行命令將傳回金鑰的清單。

風險降低

確認 Key Vault 裡有 TDE 保護器:

  1. 識別金鑰保存庫,然後在 Azure 入口網站中前往該金鑰保存庫。
  2. 請確認由 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

風險降低

  • 檢查金鑰保存庫中金鑰的到期日,以確認該金鑰已過期。
  • 延長金鑰期間屆滿日。
  • 用下列其中之 1 選取 [金鑰重新驗證]選項,讓資料庫重新上線:
    • 重試現有的金鑰
    • 選取備份金鑰

在 Azure 入口網站中重新驗證密鑰

要使用 Azure 入口網站重新驗證 TDE 保護金鑰:

  1. Azure 入口,移至您的 SQL 伺服器SQL 受管理的實例資源。
  2. 在資源選單中的 安全性選項中,選擇 透明資料加密
  3. 若資料庫因金鑰存取問題而無法存取,入口網站會在 TDE 頁面顯示 金鑰重新驗證 橫幅或選項。
  4. 選擇「 重試現有金鑰 」以嘗試用目前金鑰重新建立存取權,或選擇 「選擇備份金鑰 」以設定從你的金鑰庫中設定另一金鑰。
  5. 重新驗證成功後,資料庫會轉換回可存取狀態。 這個過程可能會花時間,視資料庫大小而定。

小提示

如果你在透明資料加密頁面上看不到金鑰重新驗證選項,請先確認底層的金鑰庫存取問題是否已解決。 重新驗證選項僅在伺服器偵測到 TDE 保護金鑰無法存取時出現。

如需其他資訊,請參閱無法存取的 TDE 保護裝置

注意

金鑰應在到期前的指定天數內輪替,以提供足夠的時間來回應失敗。 欲了解更多資訊,請參閱 Key Vault 的 Azure Policy 內建定義。

缺少權限

錯誤訊息

401 AzureKeyVaultMissingPermissions - The server is missing required permissions on the Azure Key Vault.

偵測

識別金鑰 URI 和金鑰保存庫:

  • 使用Missing key vault中的指令或指令,找出邏輯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

EventName: 使資料庫不可存取

狀態:已啟動

說明:伺服器 {server_name} 上的資料庫 {database_name} 已失去對 Azure Key Vault Key 的存取權,現正轉為無法存取狀態。

Azure SQL Managed Instance

EventName:MakeManagedDbInaccessible

狀態:已啟動

說明:受管理伺服器 {server_name} 上的資料庫 { database_name} 失去對 Azure Key Vault Key 的存取權,現在正轉換為無法存取狀態。

事件,問題在30分鐘內未解決,且Azure Key Vault金鑰存取必須手動驗證時

Azure SQL Database

EventName: 使資料庫不可存取

狀態:成功

說明:資料庫無法存取,使用者需解決Azure金鑰保險庫錯誤,並使用 Revalid key重新建立對Azure金鑰金鑰的存取。

Azure SQL Managed Instance

EventName:MakeManagedDbInaccessible

狀態:成功

說明:管理伺服器 {server_name} 上的資料庫 { database_name} 無法存取,使用者需重新建立對 Azure Key Vault Key 的存取權限。

Event 當Azure Key Vault金鑰存取重新驗證成功且資料庫重新上線時

Azure SQL Database

事件名稱:MakeDatabaseAccessible

狀態:已啟動

說明:已重新建立對Azure Key Vault鑰匙的存取權限,並開始操作使伺服器{server_name}上的資料庫{database_name}可存取。

Azure SQL Managed Instance

EventName: MakeManagedDatabaseAccessible

狀態:已啟動

說明:已重新建立對 Azure Key Vault Key 的存取權限,並開始操作以使受管理伺服器 {server_name} 上的資料庫 {database_name} 可存取。

當資料庫成功重新連線時發生的事件

Azure SQL Database

事件名稱:MakeDatabaseAccessible

狀態:成功

說明:Azure Key Vault Key 的存取已重新建立,伺服器 {server_name} 上的資料庫 {database_name} 現已上線。

Azure SQL Managed Instance

EventName: MakeManagedDatabaseAccessible

狀態:成功

說明:Azure Key Vault Key 的存取權已重新建立,且管理伺服器 {server_name} 上的資料庫 {database_name} 現已上線。

當 Azure Key Vault 金鑰存取重新驗證失敗時的事件

Azure SQL Database

事件名稱:MakeDatabaseAccessible

狀態:失敗

說明:已重新建立對 Azure Key Vault Key 的存取權限,但讓伺服器 {server_name} 上可存取資料庫 {database_name} 的操作失敗

Azure SQL Managed Instance

EventName: MakeManagedDatabaseAccessible

狀態:失敗

說明:已重新建立對 Azure Key Vault Key 的存取權限,但讓資料庫 {database_name} 在受管理伺服器 {server_name} 上可存取的操作失敗