在 Azure Key Vault 中使用客戶受控金鑰進行透明資料加密的常見錯誤
適用於:Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics
此文章說明如何找出並解決造成資料庫 (設定為使用 Azure Key Vault 中的透明資料加密 (TDE) 搭配客戶管理金鑰) 變得無法存取的 Azure Key Vault 金鑰存取問題。
注意
Microsoft Entra ID 先前稱為 Azure Active Directory (Azure AD)。
簡介
當 TDE 設定為在 Azure Key Vault 中使用客戶管理金鑰時,資料庫必須持續存取此 TDE 保護裝置才能保持在線上。 如果邏輯 SQL Server 或受控執行個體無法存取 Azure Key Vault 中的客戶管理 TDE 保護裝置,資料庫將會開始拒絕所有連線,而不會出現相應的錯誤訊息,並在 Azure 入口網站中將其狀態變更為「無法存取」。
在前 30 分鐘,如果基礎 Azure Key vault 金鑰存取問題已解決,資料庫將會自動修復並自動上線。 這表示在所有間歇性和暫時性網路中斷的情況下,使用者不需要採取動作,資料庫就會自動上線。 在大部分情況下,使用者必須採取動作,才能解決基礎金鑰保存庫的金鑰存取問題。
如果無法存取的資料庫已經不再需要,可以立即將它刪除,以停止產生成本。 除非已還原對 Azure Key Vault 金鑰的存取權,且資料庫已重新上線,否則不允許資料庫上的其他所有動作。 當使用客戶管理金鑰加密的資料庫無法存取時,也無法將伺服器上的 TDE 選項從「客戶管理」變更為「服務管理」金鑰。 當 TDE 保護裝置遭撤銷時,這是保護資料免於未經授權存取的必要動作。
在資料庫無法存取超過 30 分鐘之後,就不會再自動修復。 如果已經在該期間之後還原對必要 Azure Key Vault 金鑰的存取權,您必須手動重新驗證該金鑰的存取權,才能讓資料庫重新上線。 在此情況下,讓資料庫重新上線可能需要花很多時間,視資料庫大小而定。 一旦資料庫重新上線,則先前設定的設定,例如,容錯移轉群組、PITR 歷程記錄和所有標籤都會遺失。 因此,建議使用動作群組 \(部分機器翻譯\) 實作通知系統,以便盡快察覺並解決基礎金鑰保存庫的金鑰存取問題。
導致資料庫變得無法存取的常見錯誤
搭配金鑰保存庫使用 TDE 時,出現的大多數問題都是由下列其中一個錯誤設定所造成:
金鑰保存庫無法使用或不存在
- 意外刪除金鑰保存庫。
- 已針對 Azure Key Vault 設定防火牆,但它不允許存取 Microsoft 服務。
- 間歇網路錯誤導致無法使用金鑰保存庫。
沒有存取金鑰保存庫的權限或金鑰不存在
- 意外刪除、停用金鑰或金鑰已過期。
- 不小心刪除了伺服器的受控識別 (系統指派或使用者指派)。
- 伺服器已移至不同的訂用帳戶。 新的受控識別 (系統指派或使用者指派) 必須在伺服器移至不同的訂用帳戶時指派給該伺服器。
- 授與伺服器受控識別的權限不足,無法存取金鑰 (不含 Get、Wrap 和 Unwrap 權限)。
- 已從金鑰保存庫撤銷伺服器受控識別的權限。
識別及解決常見的錯誤
在此節中,我們列出了最常見錯誤的疑難排解步驟。
遺漏伺服器身分識別
錯誤訊息
401 AzureKeyVaultNoServerIdentity - 伺服器上的伺服器身分識別設定不正確。 請連絡支援人員。
偵測
使用下列 Cmdlet 或命令,以確保身分識別已指派給伺服器:
Azure PowerShell:Get-AzSqlServer
Azure CLI:az-sql-server-show \(英文\)
風險降低
使用下列 Cmdlet 或命令,為伺服器設定使用者指派或系統指派的受控識別:
Azure PowerShell:Set-AzSqlServer 搭配使用
-AssignIdentity
選項。Azure CLI:具有
--assign_identity
選項的 az sql server update \(英文\)。
在 Azure 入口網站中,移至金鑰保存庫,然後移至 [存取原則] 。 完成下列步驟:
- 使用 [新增] 按鈕,為上一個步驟中建立的伺服器新增 AppId。
- 指派下列金鑰權限:取得、包裝及解除包裝
若要深入了解,請參閱將受控識別指派給您的伺服器。
重要
如果 Azure SQL 資料庫或 Azure SQL 受控執行個體的邏輯伺服器在初始設定 TDE 金鑰保存庫之後移至新的 Microsoft Entra 租用戶,則必須在新的租用戶中重做此受控識別設定。
遺漏索金鑰保存庫
錯誤訊息
「503 AzureKeyVaultConnectionFailed - 因為嘗試連線至 Azure Key Vault 失敗,所以無法完成伺服器上的作業。」
偵測
識別金鑰 URI 和金鑰保存庫:
使用下列 Cmdlet 或命令來取得特定伺服器執行個體的金鑰 URI:
Azure PowerShell:Get-AzSqlServerKeyVaultKey
Azure CLI:az-sql-server-tde-key-show \(英文\)
使用金鑰 URI 來識別金鑰保存庫:
Azure PowerShell:您可以檢查 $MyServerKeyVaultKey 變數的屬性來取得金鑰保存庫的詳細資料。
Azure CLI:如需金鑰保存庫的詳細資料,請檢查傳回的伺服器加密保護裝置。
風險降低
確認金鑰保存庫可供使用:
- 確定金鑰保存庫可供使用且伺服器擁有存取權。
- 如果金鑰保存庫位於防火牆後方,請確定已核取要允許 Microsoft 服務存取金鑰保存庫的方塊。
- 如果意外刪除金鑰保存庫,您必須從頭完成該設定。
遺漏金鑰
錯誤訊息
「404 ServerKeyNotFound - 目前訂用帳戶上找不到要求的伺服器金鑰。」
「409 ServerKeyDoesNotExists - 伺服器金鑰不存在。」
偵測
識別金鑰 URI 和金鑰保存庫:
- 使用遺漏金鑰保存庫中的 Cmdlet 或命令來識別新增至邏輯 SQL Server 執行個體的金鑰 URI。 執行命令將傳回金鑰的清單。
風險降低
確認 Key Vault 中有 TDE 保護裝置:
- 識別金鑰保存庫,並在 Azure 入口網站中移至該金鑰保存庫。
- 確認有金鑰 URI 所識別的金鑰。
過期的金鑰
錯誤訊息
伺服器 <server_name>
需要 RBAC 原則的 Key Vault 密碼編譯服務加密使用者權限,或遵循 Azure Key Vault 權限:Get、WrapKey、UnwrapKey。 請使用 ID <akv_key>
將遺漏的權限授與服務主體。 請確定金鑰為使用中、未過期或停用,而且設定之金鑰啟用日期不晚於目前日期,且信任的 Microsoft 服務可視需要略過防火牆。
偵測
識別金鑰保存庫中過期的金鑰:
- 使用 Azure 入口網站、移至 [Key Vault] 服務功能表 >[物件] > [金鑰],然後檢查金鑰期間屆滿日。
- 使用 PowerShell 命令 Get-AzKeyVaultKey。
- 使用 Azure CLI 命令 az keyvault key show。
風險降低
- 檢查金鑰保存庫金鑰的期間屆滿日,確認金鑰已過期。
- 延長金鑰期間屆滿日。
- 用下列其中之 1 選取 [金鑰重新驗證] 選項,讓資料庫重新上線:
- 重試現有的金鑰。
- 選取備份金鑰。
如需其他資訊,請參閱無法存取的 TDE 保護裝置。
注意
金鑰應在到期前的指定天數內輪替,以提供足夠的時間來回應失敗。 如需其他資訊,請參閱 Azure 原則金鑰保存庫的內建定義 (部分為機器翻譯)。
遺漏權限
錯誤訊息
「401 AzureKeyVaultMissingPermissions - 伺服器缺少 Azure Key Vault 的必要權限。」
偵測
識別金鑰 URI 和金鑰保存庫:
- 使用遺漏金鑰保存庫中的 Cmdlet 或命令來識別邏輯 SQL Server 執行個體所使用的金鑰保存庫。
風險降低
確認伺服器具有金鑰保存庫的權限,以及存取金鑰的正確權限:
- 在 Azure 入口網站中,移至金鑰保存庫 > [存取原則]。 尋找伺服器的受控識別 (系統指派或使用者指派)。
- 如果有伺服器身分識別,請確定具有下列金鑰權限:Get、WrapKey 和 UnwrapKey。
- 如果沒有伺服器身分識別,請使用 [新增] 按鈕來新增身分識別。
從活動記錄中取得 TDE 狀態
為了允許因 Azure Key Vault 金鑰存取問題而監視資料庫狀態,系統將會根據 Azure Resource Manager URL,將下列事件記錄到資源識別碼的活動記錄 \(部分機器翻譯\) 中。
注意
發生金鑰保存庫存取問題後,事件可能需要至少 15-30 分鐘,才會出現在活動記錄。
當服務失去 Azure Key Vault 金鑰存取權時的事件
Azure SQL Database
EventName:MakeDatabaseInaccessible
狀態:Started
描述:伺服器 {server_name} 上的資料庫 {database_name} 無法存取 Azure Key Vault Key,且現在正轉換成無法存取狀態。
Azure SQL 受控執行個體
EventName:MakeManagedDbInaccessible
狀態:Started
描述:受控伺服器 {server_name} 上的資料庫 {database_name} 無法存取 Azure Key Vault Key,且現在正轉換成無法存取狀態。
當問題未在 30 分鐘內解決,且必須以手動方式驗證 Azure Key Vault 的金鑰存取時所發生的事件
Azure SQL Database
EventName:MakeDatabaseInaccessible
狀態:成功
描述:無法存取資料庫,而且需要使用者解決 Azure Key Vault 錯誤,並使用重新驗證金鑰重新建立 Azure Key Vault 金鑰存取權。
Azure SQL 受控執行個體
EventName:MakeManagedDbInaccessible
狀態:成功
描述:無法存取受控伺服器 {server_name} 上的資料庫 {database_name},而且需要使用者重新建立 Azure Key Vault 的金鑰存取權。
當 Azure Key Vault 金鑰存取權的重新驗證已成功,且資料庫正在上線時的事件
Azure SQL Database
EventName:MakeDatabaseAccessible
狀態:Started
描述:已重新建立 Azure Key Vault 的金鑰存取權,啟動此作業讓使用者可以存取伺服器 {server_name} 上的資料庫 {database_name}。
Azure SQL 受控執行個體
EventName:MakeManagedDatabaseAccessible
狀態:Started
描述:已重新建立 Azure Key Vault 的金鑰存取權,啟動此作業讓使用者可以存取受控伺服器 {server_name} 上的資料庫 {database_name}。
當資料庫成功重新連線時發生的事件
Azure SQL Database
EventName:MakeDatabaseAccessible
狀態:成功
描述:已重新建立 Azure Key Vault 的金鑰存取權,且伺服器 {server_name} 上的資料庫 {database_name} 現在已連線。
Azure SQL 受控執行個體
EventName:MakeManagedDatabaseAccessible
狀態:成功
描述:已重新建立 Azure Key Vault 的金鑰存取權,且受控伺服器 {server_name} 上的資料庫 {database_name} 現在已連線。
當 Azure Key Vault 金鑰存取權的重新驗證失敗時的事件
Azure SQL Database
EventName:MakeDatabaseAccessible
狀態:失敗
描述:已重新建立 Azure Key Vault 的金鑰存取權,讓使用者可以存取伺服器 {server_name} 上的資料庫 {database_name} 的作業失敗
Azure SQL 受控執行個體
EventName:MakeManagedDatabaseAccessible
狀態:失敗
描述:已重新建立 Azure Key Vault 的金鑰存取權,讓使用者可以存取受控伺服器 {server_name} 上的資料庫 {database_name} 的作業失敗
相關內容
- 深入了解Azure 資源健康狀態 \(部分機器翻譯\)。
- 設定動作群組,根據您的喜好設定接收通知和警示,例如,電子郵件/簡訊/推送/語音、邏輯應用程式、Webhook、ITSM 或自動化 Runbook。