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