適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體所管理的所有資料,一律會進行待用加密。 這些資料包括所有系統和使用者資料庫、伺服器記錄、預先寫入記錄區段和備份。 加密會由基礎儲存體透過 Azure 磁碟儲存體的伺服器端加密 (部分機器翻譯) 來處理。
使用服務管理金鑰 (SMK) 或客戶自控金鑰 (CMK) 的待用加密
適用於 PostgreSQL 的 Azure 資料庫支援兩種待用資料加密模式:服務受控金鑰 (SMK) 和客戶受控金鑰 (CMK)。 使用服務管理的金鑰來進行資料加密是適用於 PostgreSQL 的 Azure 資料庫彈性伺服器的預設模式。 在此模式中,服務會自動管理用來加密數據的加密金鑰。 您不需要採取任何動作,即可在此模式中啟用或管理加密。
在客戶自控金鑰模式中,您可以自備加密金鑰來加密資料。 此模式可讓您對加密流程有更多控制權,但也需要您自行管理加密金鑰。 您必須部署自己的 Azure 金鑰保存庫或 Azure 金鑰保存庫受控硬體安全性模組 (HSM),並將其設定為儲存適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體所使用的加密金鑰。
您只能在建立伺服器時選取此模式。 在伺服器的存留期,您無法將伺服器從某個模式變更為另一個模式。
若要實現資料的加密,適用於 PostgreSQL 的 Azure 資料庫會針對 待用資料使用 Azure 儲存體加密。 使用 CMK 時,客戶要負責提供金鑰來加密和解密 Blob 儲存體與 Azure 檔案儲存體服務中的資料。 這些金鑰必須儲存在 Azure Key Vault 或 Azure Key Vault 受控硬體安全模組 (HSM) 中。 如需詳細資訊,請參閱適用於 Azure 儲存體加密的客戶自控金鑰 (部分機器翻譯)。
每個模式所提供的優點 (SMK 或 CMK)
使用適用於 PostgreSQL 的 Azure 資料庫服務 受控金鑰 進行資料加密提供下列優點:
- 服務會自動且完全地控制資料存取。
- 服務會自動且完全地控制金鑰的生命週期,包括金鑰的輪替。
- 您不需要擔心資料加密金鑰的管理。
- 以服務管理金鑰為基礎的資料加密不會對工作負載的效能造成負面影響。
- 其可簡化加密金鑰的管理 (包括其定期輪替),以及用來存取這些金鑰之身分識別的管理。
使用適用於 PostgreSQL 的 Azure 資料庫客戶 自控金鑰 進行資料加密提供下列優點:
- 您可以完全地控制資料存取。 您可以移除金鑰,讓資料庫無法供使用者存取。
- 您可以完全地控制金鑰的生命週期 (包括金鑰輪替) 以配合公司原則。
- 您可以在自己的 Azure Key Vault 執行個體中集中管理及組織所有加密金鑰。
- 以客戶自控金鑰為基礎的資料加密不會對工作負載的效能造成負面影響。
- 您可以在資訊安全人員、資料庫管理員和系統管理員之間實作職責區分。
CMK 需求
使用客戶自控加密金鑰時,您要自行承擔所有責任。 因此,您必須部署自己的 Azure Key Vault 或 Azure Key Vault HSM。 您必須產生或匯入您自己的金鑰。 您必須授與金鑰保存庫的必要許可權,讓您的適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體可以對金鑰執行必要的動作。 您必須負責設定保留金鑰的 Azure 金鑰保存庫的所有網路層面,讓您的適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體可以存取金鑰。 稽核金鑰的存取權也是您的責任。 最後,您必須負責輪替金鑰,並在需要時更新適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體的設定,使其參考金鑰的輪替版本。
當您為儲存體帳戶設定客戶自控金鑰時,Azure 儲存體會使用相關金鑰保存庫或受控 HSM 中的客戶自控金鑰,來包裝帳戶的根資料加密金鑰 (DEK)。 根加密金鑰的保護會變更,但 Azure 儲存體帳戶中的資料會一直保持加密。 您不需要採取額外動作來確保您的資料會保持加密狀態。 客戶自控金鑰的保護會立即生效。
Azure Key Vault 是雲端式外部金鑰管理系統。 其具有高可用性,並為 RSA 密碼編譯金鑰提供可調整且安全的儲存體,並可選擇由 FIPS 140 驗證的硬體安全模組 (HSM) 加以支援。 其不允許直接存取儲存的金鑰,但會提供加密和解密服務給已授權的實體。 Key Vault 可以產生金鑰、將金鑰匯入,或從內部部署 HSM 裝置進行傳輸來獲得金鑰。
以下是設定適用於 PostgreSQL 的 Azure 資料庫資料加密的需求清單:
- Key Vault 和適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體必須屬於相同的 Microsoft Entra 租用戶。 目前不支援跨租用戶 Key Vault 與伺服器互動。 之後若移動 Key Vault 資源,則系統會要求您重新設定資料加密。
- 建議將 Key Vault 的保留已刪除保存庫的天數設定設為 90 天。 如果您已使用較低天數設定現有的 Key Vault 執行個體,則目前應該依然有效。 不過,如果您想要修改此設定並增加天數,則必須建立新的 Key Vault 執行個體。 執行個體建立好之後,就無法修改此設定。
- 啟用 Key Vault 中的虛刪除功能,以協助防止因金鑰或 Key Vault 執行個體意外遭到刪除而導致資料遺失。 除非使用者同時復原或清除虛刪除的資源,否則 Key Vault 將會保留虛刪除的資源 90 天。 復原和清除動作有與 Key Vault 相關聯的權限、RBAC 角色或存取原則權限。 軟刪除的功能預設為開啟。 如果您有一些很久以前部署的 Key Vault,其可能仍然停用虛刪除。 在此情況下,您可以使用 Azure CLI 加以開啟。
- 啟用清除保護,以對刪除的保存庫及保存庫物件執行強制保留期間。
- 向適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體的使用者指派受控識別授與金鑰存取權,方法是:
- 慣用:應使用 RBAC 權限模型 (部分機器翻譯) 來設定 Azure Key Vault,且應向受控識別指派 Key Vault 密碼編譯服務加密使用者 (部分機器翻譯) 角色。
- 舊版:如果是使用存取原則權限模型來設定 Azure Key Vault 的,則請向受控識別授與下列權限:
- get:以擷取 Key Vault 中金鑰的屬性和公用部分。
- list:以列出並逐一查看儲存在 Key Vault 中的金鑰。
- wrapKey:以加密資料加密金鑰。
- unwrapKey:以解密資料加密金鑰。
- 用於加密資料加密金鑰的金鑰只能是非對稱的、RSA 或 RSA-HSM。 支援 2048、3072 和 4096 的金鑰大小。 建議使用 4096 位元的金鑰來提升安全性。
- 金鑰啟用日期和時間 (若已設定) 必須是過去的時間。 到期日期和時間 (若已設定) 必須是未來的時間。
- 金鑰必須處於 [已啟用] 狀態。
- 如果您要將現有金鑰匯入 Key Vault,請以支援的檔案格式 (
.pfx、.byok或.backup) 來提供該金鑰。
CMK 金鑰版本更新
CMK 可以設定為透過手動方式進行金鑰輪替與更新,也可以設定為在 Key Vault 執行手動或自動金鑰輪替後,自動更新金鑰版本。
如需詳細資料,請參閱在佈建伺服器期間設定使用客戶自控金鑰的資料加密。
這很重要
當您將金鑰輪替至新版本時,您必須讓舊金鑰保持可用,重新加密才能成功。 雖然大部分的重新加密應該會在 30 分鐘內發生,但建議您先至少等候 2 小時,再停用舊金鑰版本的存取權。
手動金鑰輪替和更新
當您為 CMK 設定手動金鑰更新時,您必須在 Key Vault 進行了手動或自動金鑰輪替後,手動更新適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體中的金鑰版本。 在您更新前,伺服器會繼續使用舊的金鑰版本。 若要佈建此模式,請指定金鑰 URI,且該 URI 中必須包含版本 GUID。 例如: https://<keyvault-name>.vault.azure.net/keys/<key-name>/<key-version> 。 直到最近,這是唯一可用的選項。
每當您手動輪替金鑰,或是 AKV 根據其金鑰輪替原則自動輪替金鑰時,您就必須更新 PostgreSQL 執行個體上的 CMK 屬性。 這種方法對操作人員來說容易出錯,或需要自訂指令碼來處理輪替,尤其是在使用 Key Vault 的自動輪替功能時更是如此。
自動金鑰版本更新
若要啟用自動金鑰版本更新,請使用無版本的金鑰 URI。 這樣一來,在金鑰輪替後,就不需要手動更新 PostgreSQL 執行個體中 CMK 的版本屬性。 PostgreSQL 會自動挑選新的金鑰版本,然後重新加密資料加密金鑰。 這會大幅簡化金鑰的生命週期管理,尤其是在搭配了 Key Vault 自動輪替功能時。
若要使用 ARM、Bicep、Terraform、Azure PowerShell 或 Azure CLI 來實作,只需在金鑰 URI 中省略版本 GUID 即可。
在入口網站中選取核取方塊,引導 UI 在互動式選取期間隱藏版本 GUID,以及在驗證 URI 時隱藏版本 GUID。
Recommendations
當您使用客戶自控金鑰來進行資料加密時,請遵循以下建議來設定 Key Vault:
- 若要防止意外或未經授權刪除此重要資源,請在 Key Vault 上設定資源鎖定。
- 啟用所有加密金鑰的稽核和報告功能。 Key Vault 提供可輕易在其他安全性資訊與事件管理 (SIEM) 工具中插入的記錄。 例如,Azure 監視器記錄即是已整合的服務之一。
- 選取 [停用公用存取] 和 [允許受信任的 Microsoft 服務略過此防火牆] 來鎖定 Key Vault。
- 啟用自動金鑰版本更新。
備註
選取 [停用公用存取] 和 [允許受信任的 Microsoft 服務略過此防火牆] 後,當您嘗試使用公用存取透過入口網站管理 Key Vault 時,您可能會收到類似下列的錯誤:「您已啟用網路存取控制。 只有獲得允許的網路可以存取此金鑰保存庫。」此錯誤並不會讓您無法在客戶自控金鑰設定期間提供金鑰,也不會讓您無法在伺服器作業期間從 Key Vault 擷取金鑰。
- 將客戶自控金鑰複本置於安全的位置,或將其提供給第三方託管服務。
- 如果 Key Vault 產生金鑰,請在第一次使用該金鑰之前,先建立金鑰備份。 您只能將備份還原到 Key Vault。
特殊考量
意外撤銷對 Azure Key Vault 的金鑰存取權限
具有足夠權限可存取 Key Vault 的人員,可能會因為以下操作而不小心停用伺服器存取金鑰的權限:
- 取消指派 RBAC 角色 Key Vault 密碼編譯服務加密使用者 (部分機器翻譯),或撤銷用來擷取 Key Vault 中金鑰的身分識別權限。
- 刪除金鑰。
- 刪除 Key Vault 執行個體。
- 變更 Key Vault 防火牆規則。
- 在 Microsoft Entra ID 中刪除伺服器的受控識別。
監視 Azure Key Vault 中保留的金鑰
若要監視資料庫狀態,以及開啟資料加密保護裝置存取權遺失警示,請設定下列 Azure 功能:
- 資源健康狀態 (部分機器翻譯):失去 CMK 存取權的資料庫會在首次的資料庫連線遭拒後顯示為無法存取。
- 活動記錄 (部分機器翻譯):當客戶自控 Key Vault 執行個體中的 CMK 存取失敗時,系統會將這些失敗項目新增至活動記錄中。 如果您為這些事件建立警示,便可以盡快恢復存取。
- 動作群組:定義這些群組,以根據您的喜好設定收到通知和警示。
還原使用客戶自控金鑰所設定之伺服器的備份
使用儲存在 Key Vault 中的客戶管理金鑰對 Azure Database for PostgreSQL 彈性伺服器執行個體進行加密後,任何新建立的伺服器複本也會受到加密。 您可以透過時間點還原 (PITR) 作業或讀取複本來製作這個新複本。
當您設定使用客戶自控金鑰來進行的資料加密時,在還原備份或建立讀取複本等作業期間,您可以藉由在主要伺服器和還原的伺服器或復本伺服器上遵循下列步驟來避免問題:
- 從主要的適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體中,起始還原流程或建立讀取複本流程。
- 在還原的伺服器或複本伺服器上,您可以變更客戶自控金鑰,以及用來存取 Key Vault 的使用者指派受控識別。 請確定在新建伺服器中指派的身分識別具有 Key Vault 上的必要權限。
- 還原之後請勿撤銷原始金鑰。 目前,我們不支援在將具有客戶自控金鑰的伺服器還原至另一部伺服器之後撤銷金鑰。
受控 HSM
硬體安全模組 (HSM) 是防竄改的硬體裝置,可藉由產生、保護和管理用於加密資料、解密資料、建立數位簽章和建立數位憑證的金鑰,協助保護密碼編譯流程。 HSM 已經過最高安全性標準的測試、驗證和認證,包含 FIPS 140 和通用準則。
Azure Key Vault 受控 HSM 是完全受控、高可用性、單一租用戶和符合標準的雲端服務。 您可以透過其 FIPS 140-3 驗證的 HSM (部分機器翻譯) 來保護雲端應用程式的密碼編譯金鑰。
當您使用客戶自控金鑰在 Azure 入口網站中建立新的適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體時,您可以選擇 Azure Key Vault 受控 HSM 作為替代 Azure Key Vault 的金鑰存放區。 使用者定義之身分識別和權限的必要條件與 Azure Key Vault 相同 (請對照本文稍早列出的條件)。 如需如何建立受控 HSM 執行個體、其優點、與共用 Key Vault 型憑證存放區的差異,以及如何將金鑰匯入受控 HSM 的詳細資訊,請參閱什麼是 Azure Key Vault 受控 HSM? (部分機器翻譯)。
無法存取客戶自控金鑰的狀況
當您使用 Key Vault 中儲存的客戶自控金鑰來設定資料加密時,伺服器必須能夠持續存取此金鑰,才能保持線上狀態。 如果做不到,伺服器的狀態會變更為無法存取,並開始拒絕所有連線。
伺服器狀態可能會變成無法存取的一些可能原因如下:
| 原因 | 解決辦法 |
|---|---|
| 伺服器所指向的任何加密金鑰都已設定到期日期和時間,且已達到該日期和時間。 | 您必須延長金鑰的到期日期。 然後,您必須等候服務重新驗證金鑰,並自動將伺服器狀態轉換為就緒。 只有當伺服器回到就緒狀態時,您才能將金鑰輪替為較新版本或建立新的金鑰,並更新伺服器,使其參考相同金鑰的新版本或參考新的金鑰。 |
| 您輪替金鑰,但忘記更新適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體,使其指向新金鑰版本。 伺服器所指向的舊金鑰過期,導致伺服器的狀態變成無法存取。 | 若要避免此情況,每次輪替金鑰時,也請務必更新伺服器的執行個體,使其指向新版本。 若要這樣做,您可以使用 az postgres flexible-server update,並按照描述「變更資料加密的金鑰/身分識別。伺服器建立後就無法啟用資料加密,這只會更新金鑰/身分識別。」(部分機器翻譯) 的範例來進行。 如果您想要使用 API 更新它,您可以叫用服務的伺服器 - 更新 (部分機器翻譯) 端點。 |
| 您刪除 Key Vault 執行個體,適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體無法存取金鑰,並進入無法存取狀態。 | 復原 Key Vault 執行個體 (部分機器翻譯),並等候服務執行金鑰的定期重新驗證,並自動將伺服器狀態轉換為就緒。 |
| 您從 Microsoft Entra ID 中刪除受控識別 (部分機器翻譯),這個受控識別用來擷取儲存在 Key Vault 中的任何加密金鑰。 | 復原身分識別 (部分機器翻譯),並等候服務執行金鑰的定期重新驗證,並自動將伺服器狀態轉換為就緒。 |
| 您的 Key Vault 權限模型已設定為使用角色型存取控制。 您從設定為擷取任何金鑰的受控識別 (部分機器翻譯) 中移除 Key Vault 密碼編譯服務加密使用者 (部分機器翻譯) RBAC 角色指派。 | 重新向受控識別 (部分機器翻譯) 授與 RBAC 角色,並等候服務執行金鑰的定期重新驗證,並自動將伺服器狀態轉換為就緒。 替代方法包括將 Key Vault 上的角色授與給不同的受控識別 (部分機器翻譯),並更新伺服器,使其使用這個不同的受控識別 (部分機器翻譯) 來存取金鑰。 |
| 您的 Key Vault 權限模型已設定為使用存取原則。 您從設定為擷取任何金鑰的受控識別 (部分機器翻譯) 撤銷 list、get、wrapKey 或 unwrapKey 存取原則。 | 重新向受控識別授與 RBAC 角色,並等候服務執行金鑰的定期重新驗證,並自動將伺服器狀態轉換為就緒。 替代方法包括將 Key Vault 上的必要存取原則授與給不同的受控識別,並更新伺服器,使其使用這個不同的受控識別來存取金鑰。 |
| 您設定了過度限制的金鑰保存庫防火牆規則,讓您的適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體無法與金鑰保存庫通訊以擷取金鑰。 | 當您設定金鑰保存庫防火牆時,請務必選取允許 受信任 Microsoft 服務的 選項,以便您的適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體可以略過防火牆。 |
備註
當金鑰遭停用、遭刪除、已過期或無法連線時,透過該金鑰加密資料的伺服器會變成無法存取的狀態,一如先前所述。 要等到伺服器可以重新驗證加密金鑰後,其狀態才會重新變為就緒。
一般而言,在金鑰遭停用、遭刪除、已過期或無法連線後的 60 分鐘內,伺服器會變成無法存取的狀態。 在金鑰變為可用狀態後,伺服器最多可能需要 60 分鐘的時間,才能重新變為就緒。
從受控識別刪除中復原
如果在 Microsoft Entra ID 中刪除了用來存取 Key Vault 中所儲存加密金鑰的使用者指派受控識別,請遵循下列步驟來加以復原:
- 復原身分識別 (部分機器翻譯) 或建立新的受控 Entra ID 身分識別。
- 如果您建立新的身分識別,即使其名稱與刪除之前的名稱完全相同,請更新適用於彈性伺服器執行個體的 Azure 資料庫屬性,使其知道必須使用此新身分識別來存取加密金鑰。
- 請確保此身分識別具有 Azure Key Vault (AKV) 中金鑰作業的適當權限。
- 等候大約一小時,直到伺服器重新驗證金鑰為止。
這很重要
僅建立與已刪除身分識別相同名稱的新 Entra ID 身分識別,並無法從受控識別刪除中復原。
透過客戶自控金鑰和異地備援商務持續性功能使用資料加密
適用於 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 資料庫彈性伺服器執行個體中設定客戶受控金鑰的目前限制:
- 您只能在建立新伺服器期間設定客戶自控金鑰加密,而不是更新現有適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。 您可以改為將 PITR 備份還原至具有 CMK 加密的新伺服器。
- 在設定客戶自控金鑰加密之後,就無法還原回系統管理的金鑰。 如果您想要還原,則必須將伺服器還原至具有使用系統管理金鑰所設定資料加密的新伺服器。
- Azure Key Vault 受控 HSM 的執行個體或您打算在上面儲存加密金鑰之 Azure Key Vault 的執行個體,必須存在於 Azure 資料庫彈性伺服器執行個體將會建立所在的相同區域中。