使用客戶自控金鑰對適用於 MySQL 的 Azure 資料庫 - 彈性伺服器進行資料加密
適用於:適用於 MySQL 的 Azure 資料庫 - 彈性伺服器
使用客戶自控密鑰進行數據加密,適用於 MySQL 的 Azure 資料庫 彈性伺服器,您可以攜帶您自己的密鑰(BYOK)來保護待用數據,並實作管理密鑰和數據的職責區隔。 透過客戶自控金鑰 (CMK),客戶將負責且最終控制金鑰生命週期管理 (金鑰的建立、上傳、輪替、刪除)、金鑰使用權限及對金鑰作業進行稽核。
注意
適用於 MySQL 的 Azure 資料庫彈性伺服器的客戶自控金鑰目前支援 Azure Key Vault 受控 HSM (硬體安全性模組)。
福利
使用客戶自控金鑰進行資料加密,適用於 MySQL 的 Azure 資料庫 彈性伺服器提供下列優點:
- 透過移除金鑰並讓資料庫變得無法存取的能力來完全控制資料存取
- 完全控制金鑰生命週期,包括輪替金鑰以配合公司原則
- 集中管理和組織 Azure Key Vault 或受控 HSM 中的金鑰
- 能夠在安全人員、DBA 和管理員之間實作職責區分
使用客戶自控金鑰加密資料的運作方式?
Microsoft Entra ID 中的受控識別藉由佈建自動指派的身分識別,提供將認證儲存在程式碼中的替代方案,這些識別可用來驗證任何支援 Microsoft Entra 驗證的服務,例如 Azure Key Vault (AKV)。 適用於 MySQL 的 Azure 資料庫 彈性伺服器目前僅支援使用者指派的受控識別(UMI)。 如需詳細資訊,請參閱 Azure 中的受控識別類型。
若要為 適用於 MySQL 的 Azure 資料庫 彈性伺服器設定 CMK,您必須將 UMI 連結至伺服器,並指定要使用的 Azure 金鑰保存庫和金鑰。
UMI 必須具有金鑰保存庫的下列存取權:
- Get:用於在金鑰保存庫中擷取金鑰的公開部分和屬性。
- List:列出 Key Vault 中儲存的金鑰版本。
- Wrap Key:能夠加密 DEK。 加密的 DEK 會儲存在 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例中。
- Unwrap Key:可以解密 DEK。 適用於 MySQL 的 Azure 資料庫 彈性伺服器需要解密的 DEK 來加密/解密數據。
如果已啟用 RBAC,則亦須為 UMI 指派下列角色:
- Key Vault 密碼編譯服務加密使用者或具有下列權限的角色:
- Microsoft.KeyVault/vaults/keys/wrap/action
- Microsoft.KeyVault/vaults/keys/unwrap/action
- Microsoft.KeyVault/vaults/keys/read like “Key Vault Crypto Service Encryption User”
- 針對受控 HSM,指派受控 HSM 密碼編譯服務加密使用者角色
術語和描述
資料加密金鑰 (DEK):用於將分割區或資料區塊加密的對稱 AES256 金鑰。 使用不同金鑰將每個資料區塊進行加密,會使密碼編譯分析攻擊更加困難。 要將特定區塊加密和解密的資源提供者或應用程式執行個體都需要存取 DEK。 當新的金鑰取代 DEK 時,只有在相關聯區塊中的資料才需要使用新的金鑰重新加密。
金鑰加密金鑰 (KEK):用來加密 DEK 的加密金鑰。 永遠不會離開 Key Vault 的 KEK 允許加密和控制 DEK 本身。 可存取 KEK 的實體可能不同於需要 DEK 的實體。 因為需要 KEK 才能將 DEK 解密,KEK 實際上就是單一點,藉以透過刪除 KEK 來有效地刪除 DEK。 以 KEK 加密的 DEK 會個別儲存。 只有具有 KEK 存取權限的實體可以解密這些 DEK。 如需詳細資訊,請參閱待用加密的安全性。
運作方式
使用 CMK 的資料加密是在伺服器層級設定。 針對指定的伺服器,系統會使用 CMK (稱為「金鑰加密金鑰」(KEK)) 來加密服務的資料加密金鑰 (DEK)。 KEK 是儲存在客戶擁有及客戶所管理 Azure Key Vault 執行個體中的非對稱金鑰。 Key Vault 是可調整且安全的高度可用儲存體,其適用於 RSA 密碼編譯金鑰,並可選擇由 FIPS 140 驗證 (部分機器翻譯) 的硬體安全性模組 (HSM) 加以支援。 Key Vault 不允許直接存取儲存的金鑰,而會使用授權實體的金鑰來提供加密和解密服務。 匯入的金鑰保存庫可以產生金鑰,或從內部部署 HSM 裝置轉移到金鑰保存庫。
當您設定彈性伺服器以使用儲存在金鑰保存庫中的 CMK 時,伺服器會將 DEK 傳送至金鑰保存庫以加密。 Key Vault 會傳回加密的 DEK,並將其儲存在使用者資料庫中。 同樣地,在有需要時,彈性伺服器會將受保護的 DEK 傳送至金鑰保存庫以進行解密。
在啟用記錄後,稽核員可以使用 Azure 監視器檢閱 Key Vault 稽核事件記錄檔。 若要啟用 Key Vault 稽核事件的記錄,請參閱使用 Key Vault 深入解析來監視金鑰保存庫服務。
注意
權限變更可能需要最多 10 分鐘的時間,才能反映至金鑰保存庫。 這包括撤銷 AKV 中 TDE 保護裝置的存取權限,而此時間範圍內的使用者可能仍有存取權限。
設定 適用於 MySQL 的 Azure 資料庫 彈性伺服器數據加密的需求
嘗試設定 Key Vault 或受控 HSM 之前,請務必解決下列需求。
- 金鑰保存庫 和 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例必須屬於相同的Microsoft Entra 租使用者。 必須支援跨租用戶 Key Vault 與彈性伺服器的互動。 如果您在執行設定之後移動 Key Vault 資源,則必須重新設定資料加密。
- 金鑰保存庫 和 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例必須位於相同的區域中。
- 在金鑰保存庫上啟用虛刪除功能,並將保留期間設定為 90 天,應可在意外刪除金鑰 (或 Key Vault) 時防止資料遺失。 復原和清除動作在 Key Vault 存取原則中有自己的權限。 虛刪除功能預設為關閉,但可透過 Azure 入口網站或是使用 PowerShell 或 Azure CLI 將其啟用。
- 在金鑰保存庫上啟用清除保護功能,並將保留期限設定為 90 天。 當開啟清除保護時,保存庫或處於已刪除狀態的物件必須等到保留期間過後才能清除。 您可以使用 PowerShell 或 Azure CLI 來啟用此功能,且只有在啟用虛刪除之後才能啟用此功能。
嘗試設定 CMK 之前,請務必解決下列需求。
- 用來加密 DEK 的客戶自控金鑰只能是非對稱的 RSA\RSA-HSM (具有進階 SKU 的保存庫) 2048、3072 或 4096。
- 金鑰啟用日期 (若已設定) 必須是過去的日期和時間。 未設定到期日。
- 金鑰必須處於「已啟用」狀態。
- 金鑰的虛刪除期限必須設定為 90 天。 這會隱含地設定必要的金鑰屬性 recoveryLevel:「Recoverable」。
- 金鑰必須啟用清除保護。
- 如果要將現有金鑰匯入金鑰保存庫,請務必為其提供可支援的檔案格式 (.pfx、.byok 或 .backup)。
注意
如需如何透過 Azure 入口網站 設定 適用於 MySQL 的 Azure 資料庫 彈性伺服器日期加密的詳細逐步指示,請參閱設定 適用於 MySQL 的 Azure 資料庫 彈性伺服器的數據加密。
設定資料加密的建議事項
當您設定 Key Vault 或受控 HSM 使用客戶自控金鑰進行資料加密時,請記住下列建議。
- 在 Key Vault 上設定資源鎖定,藉此控制可刪除這個重要資源的人員,並防止意外或未經授權的刪除發生。
- 啟用所有加密金鑰的稽核和報告功能。 Key Vault 提供可輕易插入其他安全性資訊和事件管理工具中的記錄。 例如,Azure 監視器 Log Analytics 即是已整合的服務之一。
- 將客戶管理的金鑰複本置於安全的位置,或將其提供給委付服務。
- 如果 Key Vault 產生金鑰,請在第一次使用該金鑰之前,先建立金鑰備份。 您只能將備份還原到 Key Vault。 如需備份命令的詳細資訊,請參閱 Backup-AzKeyVaultKey \(英文\)。
注意
- 建議您使用來自相同區域的金鑰保存庫,但如有必要,您也可以藉由指定「輸入金鑰識別碼」資訊,使用來自另一個區域的金鑰保存庫。 金鑰保存庫受控 HSM 必須位於與 MySQL 彈性伺服器相同的區域。
無法存取客戶管理金鑰的狀況
當您在 Key Vault 中使用 CMK 來設定資料加密時,伺服器必須能夠持續存取此金鑰,才能保持線上狀態。 如果彈性伺服器無法存取 Key Vault 中客戶管理的金鑰,就會在 10 分鐘內開始拒絕所有連線。 彈性伺服器會發出對應的錯誤訊息,並將狀態變更為「無法存取」。 伺服器可能會因為各種原因而達到此狀態。
- 如果您刪除金鑰保存庫,適用於 MySQL 的 Azure 資料庫 彈性伺服器實例將無法存取密鑰,而且會移至無法存取的狀態。 復原金鑰保存庫並重新驗證數據加密,讓 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例可供使用。
- 如果您從金鑰保存庫刪除金鑰,適用於 MySQL 的 Azure 資料庫 彈性伺服器實例將無法存取金鑰,且會移至無法存取的狀態。 復原金鑰並重新驗證數據加密,讓 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例可供使用。
- 如果儲存在 Azure 金鑰保存庫 中的金鑰過期,金鑰將會變成無效,且 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例會轉換成無法存取的狀態。 使用 CLI 擴充金鑰到期日,然後重新驗證數據加密,讓 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例可供使用。
從 Key Vault 意外撤銷金鑰存取權限
這種情況可能會因具有足夠權限可存取 Key Vault 的人員,透過以下方式意外停用了彈性伺服器存取金鑰的權限:
- 從伺服器撤銷金鑰保存庫的 get、list、wrap key 和 unwrap key 權限
- 刪除金鑰
- 刪除金鑰保存庫
- 變更金鑰保存庫的防火牆規則
- 在 Microsoft Entra ID 中使用客戶自控金鑰刪除彈性伺服器上用於加密的使用者受控識別
在 Key Vault 中監視客戶管理的金鑰
若要監視資料庫狀態,以及啟用透明資料加密保護裝置存取的遺失警示,請設定 Azure 的下列功能:
- 活動記錄:當客戶管理的 Key Vault 中的客戶金鑰存取失敗時,系統會將這些項目新增至活動記錄中。 如果您為這些事件建立警示,則可以盡快恢復存取。
- 動作群組:定義這些群組,以根據您的偏好設定傳送通知和警示。
Key Vault 中客戶自控金鑰的副本
一旦 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例使用客戶儲存在 金鑰保存庫 中的受控密鑰加密,伺服器的任何新建立復本也會加密。 嘗試使用已擁有複本的客戶受控密鑰來加密 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例時,建議您藉由新增受控識別和密鑰來設定複本。 假設 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例已設定異地備援備份。 在此情況下,就必須使用受控識別以及此識別可存取且位於伺服器異地配對區域的金鑰來設定複本。
使用 Key Vault 中客戶自控金鑰還原
嘗試還原 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例時,您可以選取使用者管理的身分識別和金鑰來加密還原伺服器。 假設 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例已設定異地備援備份。 在此情況下,就必須使用受控識別以及此識別可存取且位於伺服器異地配對區域的金鑰來設定還原伺服器。
若要避免在還原或讀取複本建立期間,設定客戶管理的資料加密時所發生的問題,請務必在來源和還原/複本伺服器上遵循下列步驟:
- 從來源 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例起始還原或讀取複本建立程式。
- 在還原/複本伺服器上,重新驗證資料加密設定中客戶管理的金鑰,以確保使用者受控識別針對 Key Vault 中儲存的金鑰具有 Get、List、Wrap key 和 Unwrap key 的權限。
注意
執行還原時,不需要在來源伺服器上使用相同的身分識別和金鑰。