共用方式為


在適用於 PostgreSQL 的 Azure 資料庫彈性伺服器中使用客戶自控金鑰進行資料加密

適用於: 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器

適用於 PostgreSQL 的 Azure 資料庫彈性伺服器會使用 Azure 儲存體加密,以透過使用 Microsoft 管理的金鑰根據預設來加密待用資料。 對於適用於 PostgreSQL 的 Azure 資料庫彈性伺服器的使用者,其類似於 SQL Server 等其他資料庫中的透明資料加密。

許多組織都需要使用客戶自控金鑰資料 (CMK) 的完全控制存取權。 適用於 PostgreSQL 彈性伺服器的 Azure 資料庫會使用 CMK 的資料加密,可讓您攜帶自己的金鑰 (BYOK) 來保護待用資料。 此外也可讓組織在金鑰和資料的管理中實作職責區分。 使用 CMK 加密時,您將負責處理並全權掌控金鑰的生命週期、金鑰使用權限,以及金鑰的作業稽核。

設定於伺服器等級之適用於 PostgreSQL 彈性伺服器的 Azure 資料庫會使用 CMK 來加密資料。 針對特定伺服器,系統會使用一種稱為「金鑰加密金鑰」(KEK) 的 CMK 來加密服務的資料加密金鑰 (DEK)。 KEK 是儲存在客戶擁有及客戶所管理 Azure Key Vault 執行個體中的非對稱金鑰。 本文在稍後將會詳細說明 KEK 和 DEK。

Key Vault 是雲端式外部金鑰管理系統。 其具有高可用性,並為 RSA 密碼編譯金鑰提供可調整且安全的儲存體,並可選擇由 FIPS 140 驗證的硬體安全性模組 (HSM) 加以支援。 其不允許直接存取儲存的金鑰,但會提供加密和解密服務給已授權的實體。 Key Vault 可以產生金鑰、將其匯入,或從內部部署 HSM 裝置進行傳輸。

福利

「適用於 PostgreSQL 彈性伺服器的 Azure 資料庫」的 CMK 資料加密提供下列優點:

  • 您具備資料存取的完全控制權。 您可以移除金鑰,讓資料庫無法供使用者存取。

  • 您完全控制金鑰生命週期,包括輪替金鑰以配合公司原則。

  • 您可以使用在 Key Vault 集中管理和組織金鑰。

  • 無論是否使用 (CMK),開啟加密都不會影響效能,因為 PostgreSQL 在這兩種情況下都需要 Azure 儲存體層進行資料加密。 唯一的差異在於使用 CMK 時,會加密執行實際資料加密的 Azure 儲存體加密金鑰。

  • 您可以在資訊安全人員、資料庫管理員和系統管理員之間實作職責區分。

詞彙

資料加密金鑰 (DEK):用於將分割區或資料區塊加密的對稱 AES 256 金鑰。 使用不同金鑰將每個資料區塊進行加密,會使密碼分析攻擊更加困難。 要將特定區塊加密和解密的資源提供者或應用程式執行個體都需要 DEK 的存取權限。 當新的金鑰取代 DEK 時,只有在相關聯區塊中的資料才需要使用新的金鑰重新加密。

金鑰加密金鑰 (KEK):用來加密 DEK 的加密金鑰。 永遠不會離開 Key Vault 的 KEK 允許加密和控制 DEK 本身。 可存取 KEK 的實體可能不同於需要 DEK 的實體。 因為需要 KEK 才能將 DEK 解密,您實際上可以藉由刪除 KEK 此單一點來刪除 DEK。

以 KEK 加密的 DEK 會個別儲存。 只有具有 KEK 存取權限的實體可以解密這些 DEK。 如需詳細資訊,請參閱靜態加密的安全性

使用 CMK 進行的資料加密如何運作

顯示「攜帶您自己的金鑰」概觀的圖表。

Microsoft Entra 使用者指派的受控識別可用來連線和擷取 CMK。 若要建立身分識別,請遵循本教學課程

針對使用儲存於 Key Vault 中的 CMK 來加密 DEK 的 PostgreSQL 伺服器, Key Vault 系統管理員會授與您所建立的受控識別下列存取權限

  • get:用於在 Key Vault 中擷取金鑰的公開部分和屬性。

  • list:列出並逐一查看 Key Vault 中的金鑰。

  • wrapKey:用於加密 DEK。 加密的 DEK 會儲存在適用於 PostgreSQL 的 Azure 資料庫中。

  • unwrapKey:用於解密 DEK。 適用於 PostgreSQL 的 Azure 資料庫需要解密的 DEK 來加密和解密資料。

Key Vault 管理員也可以啟用 Key Vault 稽核事件的記錄,以便稍後再進行稽核。

除了存取權限指派之外,如上所述,您可以使用 Key Vault 加密服務加密使用者角色來建立新的 Azure RBAC 角色指派。

重要

未將先前的存取權限或 RBAC 指派提供給受控識別以存取 Key Vault ,可能會導致無法擷取加密金鑰,且無法設定 CMK 功能。

當您設定伺服器以使用儲存在 Key Vault 中的 CMK 時,伺服器會將 DEK 傳送至 Key Vault 以加密。 Key Vault 會傳回加密的 DEK,並將其儲存在使用者資料庫中。 有必要時,伺服器會將受保護的 DEK 傳送至 Key Vault 以進行解密。 如果已啟用記錄,則稽核員可以使用 Azure 監視器檢閱 Key Vault 稽核事件記錄檔。

適用於 PostgreSQL 彈性伺服器之 Azure 資料庫的資料加密設定需求

以下是設定 Key Vault 的需求:

  • Key Vault 和適用於 PostgreSQL 彈性伺服器的 Azure 資料庫必須屬於相同的 Microsoft Entra 租用戶。 目前不支援跨租用戶 Key Vault 與伺服器互動。 之後若移動 Key Vault 資源,則系統會要求您重新設定資料加密。

  • Key Vault 的保留已刪除保存庫天數必須設定為 90 天。 如果您以較低的數字設定現有的 Key Vault 執行個體,您必須建立新的 Key Vault 執行個體,因為您無法在建立後修改執行個體。

  • 建議將 Key Vault 的保留已刪除保存庫天數設定為 90 天。 如果您已使用較低數字設定現有的 Key Vault 執行個體,則目前應該依然有效。 不過,如果您想要修改此設定並增加天數,則必須建立新的 Key Vault 執行個體。 建立執行個體之後,就無法修改其組態。

  • 啟用 Key Vault 中的虛刪除功能,以防止意外刪除金鑰或 Key Vault 執行個體的資料遺失。 除非使用者同時復原或清除虛刪除的資源,否則 Key Vault 將會保留虛刪除的資源 90 天。 復原和清除動作有與 Key Vault 存取原則相關聯的權限。

    虛刪除功能預設為關閉,但可透過 PowerShell 或 Azure CLI 將其啟用。 您無法透過 Azure 入口網站啟用該功能。

  • 啟用清除保護,以對刪除的保存庫及保存庫物件執行強制保留期間。

  • 使用其唯一的受控識別授與適用於 PostgreSQL 彈性伺服器的 Azure 資料庫對 Key Vault 的存取權,使其具有 getlistwrapKeyunwrapKey 權限。 或者,您可以使用 Key Vault 加密服務加密使用者角色來為受控識別建立新的 Azure RBAC 角色指派。

以下是適用於 PostgreSQL 彈性伺服器之 Azure 資料庫中的 CMK 設定需求:

  • 用來加密 DEK 的 CMK 只能是非對稱的 RSA 或 RSA-HSM。 支援 2048、3072 和 4096 的金鑰大小。

  • 金鑰啟用日期和時間 (若已設定) 必須是過去的時間。 到期日期和時間 (若已設定) 必須是未來的時間。

  • 金鑰必須處於*Enabled-已啟用狀態。

  • 如果您要將現有金鑰匯入 Key Vault ,請以支援的檔案格式 (.pfx.byok.backup) 來提供。

建議

當您使用 CMK 進行資料加密時,設定 Key Vault 的建議如下:

  • 在 Key Vault 上設定資源鎖定,藉此控制可刪除這個重要資源的人員,並防止意外或未經授權的刪除發生。

  • 啟用所有加密金鑰的稽核和報告功能。 Key Vault 提供可輕易在其他安全性資訊和事件管理 (SIEM) 工具中插入的記錄。 例如,Azure 監視器記錄即是已整合的服務之一。

  • 選取 [停用公用存取] 和 [允許受信任的 Microsoft 服務旁路此防火牆] 來鎖定 Key Vault。

    停用公用存取且只允許受信任 Microsoft 服務的網路選項螢幕擷取畫面。

注意

選取 [停用公用存取] 和 [允許信任的 Microsoft 服務旁路此防火牆] 後,當您嘗試使用公用存取透過入口網站管理 Key Vault 時,您可能會收到類似下列的錯誤:「您已啟用網路存取控制。 只有允許的網路才能存取此 Key Vault。」此錯誤不排除在 CMK 設定期間提供金鑰的能力,也不會在伺服器作業期間從 Key Vault 擷取金鑰。

以下是設定 CMK 的建議:

  • 將 CMK 的金鑰複本置於安全位置,或將其提供給委付服務。

  • 如果 Key Vault 產生金鑰,請在第一次使用該金鑰之前,先建立金鑰備份。 您只能將備份還原到 Key Vault。

從 Key Vault 意外撤銷金鑰存取權限

透過執行以下項目,具有足夠權限可存取 Key Vault 的人員可能會不小心停用伺服器存取金鑰的權限:

  • 從用來擷取 Key Vault 中金鑰的身分識別撤銷 listgetwrapKey 以及 unwrapKey 存取權限。

  • 刪除金鑰。

  • 刪除 Key Vault 執行個體。

  • 變更 Key Vault 防火牆規則。

  • 在 Microsoft Entra ID 中刪除伺服器的受控識別。

監視 Key Vault 中的 CMK

若要監視資料庫狀態,以及啟用透明資料加密保護裝置存取的遺失警示,請設定 Azure 的下列功能:

  • 資源健康狀態:已失去 CMK 的資料庫會在首次連線至資料庫遭拒後顯示為無法存取
  • 活動記錄:當客戶管理的 Key Vault 執行個體中的 CMK 存取失敗時,系統會將這些項目新增至活動記錄中。 如果您為這些事件建立警示,則可以盡快恢復存取。
  • 動作群組:定義這些群組,以根據您的偏好設定收到通知和警示。

使用 Key Vault 中客戶自控金鑰還原

在適用於 PostgreSQL 彈性伺服器的 Azure 資料庫使用儲存於 Key Vault 的客戶自控金鑰加密之後,任何新建立的伺服器複本也會一併加密。 您可以透過時間點還原 (PITR) 還原作業或讀取複本來製作這個新複本。

在還原或讀取複本建立期間設定客戶自控資料加密時,您可以透過遵循下列在主要和還原/複本伺服器上的步驟來避免問題:

  • 從主要適用於 PostgreSQL 彈性伺服器執行個體的 Azure 資料庫中,起始還原流程或建立唯獨複本流程。

  • 在還原或複本伺服器上,您可以變更 CMK 和/或用來存取資料加密設定中 Key Vault 的Microsoft Entra 身分識別。 確保新建立的伺服器對儲存於 Key Vault 的金鑰具有 listwrapunwrap 存取權限。

  • 還原之後請勿撤銷原始金鑰。 此刻,金鑰撤銷在還原已啟用 CMK 的伺服器至另一部伺服器後不會受到支援。

受控 HSM

硬體安全性模組 (HSM) 是防竄改的硬體裝置,可藉由產生、保護和管理用於加密資料、解密資料、建立數位簽名和建立數位證書的金鑰,協助保護加密流程。 HSM 已經過最高安全性標準的測試、驗證和認證,包含 FIPS 140 和通用準則。

Azure Key Vault 受控 HSM 是完全受控、高可用性、單一租用戶和符合標準的雲端服務。 您可以透過其 FIPS 140-3 驗證的 HSM 以保護雲端應用程式的加密金鑰。

當您使用 CMK 功能在 Azure 入口網站中建立新的適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體時,您可以選擇 Azure Key Vault 受控 HSM 作為替代 Azure Key Vault 的金鑰存放區。 使用者定義身分識別和存取權限的必要條件與 Azure Key Vault 相同 (請對照本文稍早列出的條件)。 如需如何建立受控 HSM 執行個體、優點、與共用 Key Vault 型憑證存放區的差異,以及如何將金鑰匯入受控 HSM 的詳細資訊,請參閱什麼是 Azure Key Vault 受控 HSM?

無法存取的 CMK 條件

當您在 Key Vault 中使用 CMK 來設定資料加密時,伺服器必須能夠持續存取此金鑰,才能保持線上狀態。 如果伺服器無法存取 Key Vault 中 CMK,就會在 10 分鐘內開始拒絕所有連線。 伺服器會發出對應的錯誤訊息,並將狀態變更為無法存取

伺服器狀態變成無法存取的原因如下:

  • 如果您刪除 Key Vault 執行個體,適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體則無法存取該金鑰,並移至無法存取狀態。 若要讓伺服器呈現可供狀態復原 Key Vault 執行個體並重新驗證資料加密。
  • 如果您刪除 Key Vault 的金鑰,適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體則無法存取該金鑰,並移至無法存取狀態。 若要讓伺服器呈現可供狀態復原該金鑰並重新驗證資料加密。
  • 如果您從 Microsoft Entra ID 刪除了用來從 Key Vault 擷取金鑰的受控識別,或刪除了具有 Key Vault 加密服務加密使用者角色的 Azure RBAC 角色指派。 用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體無法存取該金鑰,並移至無法存取狀態。 若要讓伺服器呈現可供狀態復原身分識別並重新驗證資料加密。
  • 如果您從用於擷取 Key Vault 金鑰的受控識別中撤銷 Key Vault listgetwrapKeyunwrapKey 存取原則,適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體則無法存取金鑰,並會移至無法存取的狀態。 新增必要的存取原則至 Key Vault 中的身分識別。
  • 如果您設定了限制過於嚴格的 Key Vault 防火牆規則,適用於 PostgreSQL 的 Azure 資料庫彈性伺服器就無法與 Key Vault 通訊,以擷取金鑰。 當您設定 Key Vault 防火牆時,請確保選取允許受信任的 Microsoft 服務旁路此防火牆的選項。

注意

當金鑰遭停用、刪除、過期或無法連線時,透過該金鑰加密資料的伺服器狀態就會變成無法存取,就如先前所描述。 在您重新啟用金鑰或指派新金鑰之前,伺服器將無法使用。

一般而言,在停用、刪除、過期或無法連線金鑰後 60 分鐘內,伺服器狀態就會變成無法存取。 金鑰可供使用後,伺服器最多可能需要 60 分鐘的時間,才能再次提供存取

從受控識別刪除中復原

在極少數情況下,當 CMK 用來從 Azure Key Vault (AKV) 擷取金鑰的 Entra ID 受控識別在 Microsoft Entra ID 中遭到刪除,則建議依照下列步驟進行復原:

  1. 無論是復原身分識別或建立新的受控 Entra ID 身分識別
  2. 請確保此身分識別具有 Azure Key Vault (AKV) 中金鑰作業的適當存取權限。 根據 Key Vault 的權限模型 (存取原則或 Azure RBAC),您可以藉由在 Key Vault (listgetwrapKeyunwrapKey 存取原則) 上建立存取原則來授與 Key Vault 存取權,或使用角色 Key Vault 密碼編譯服務加密使用者來新建 Azure RBAC 角色指派。
  3. 在適用於 PostgreSQL 的 Azure 資料庫中以新的或已復原身分識別重新驗證 CMK 資料加密 - 彈性伺服器資料加密 Azure 入口網站畫面。

重要

僅建立與已刪除身分識別相同名稱的新 Entra 識別碼身分識別,並不會從受控識別刪除中復原。

透過 CMK 和異地備援商務持續性功能使用資料加密

適用於 PostgreSQL 的 Azure 資料庫彈性伺服器支援進階資料復原功能,例如複本異地備援備份。 以下是使用 CMK 設定資料加密和這些功能的需求,除了使用 CMK 進行資料加密基本需求

  • 異地備援備份加密金鑰必須在儲存異地備援備份區域中的 Key Vault 執行個體中建立。
  • 支援已啟用異地備援備份的 CMK 伺服器 Azure Resource Manager REST API 版本為 2022-11-01-preview。 如果您想要使用 Azure Resource Manager 範本 自動建立使用 CMK 加密和異地備援備份功能的伺服器,請使用此 API 版本。
  • 您無法使用相同的使用者受控識別來驗證主要資料庫的 Key Vault 執行個體和保存異地備援備份加密金鑰的 Key Vault 執行個體。 若要維護區域復原能力,建議您在與異地備援備份相同的區域中建立使用者受控識別。
  • 如果您在建立期間設定讀取複本資料庫以透過 CMK 加密,其加密金鑰必須位於讀取複本資料庫所在區域內的 Key Vault 執行個體中。 必須在同一個區域中建立使用者指派的身分識別,才能針對此 Key Vault 執行個體進行驗證。

限制

以下是適用於 PostgreSQL 彈性伺服器之 Azure 資料庫中 CMK 設定的目前限制:

  • 您只能在建立新伺服器期間設定 CMK 加密,而不是更新現有適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。 您可以改為將 PITR 備份還原至具有 CMK 加密的新伺服器。

  • 設定 CMK 加密之後,您就無法將其移除。 如果您要移除這項功能,唯一的方法是將伺服器還原至非 CMK 伺服器

  • Azure 金鑰保存庫 受控 HSM 實例或您打算儲存加密密鑰的 Azure 金鑰保存庫 實例,必須存在於建立彈性伺服器之 Azure 資料庫實例所在的相同區域中。

下一步