在安全合規或待用資料加密等情境下,推薦使用透明資料加密TDE功能,對資料檔案執行即時I/O加密和解密,通過在資料庫層執行待用資料加密,阻止可能的攻擊者繞過資料庫直接從儲存中讀取敏感資訊,有效提高資料庫中敏感性資料的安全性。
前提條件
RDS PostgreSQL執行個體需滿足以下要求:
執行個體大版本為PostgreSQL 10或以上版本。
儲存類型為雲端硬碟。
執行個體核心小版本為20221030或以上。查看核心小版本請參見升級核心小版本。
如果包含唯讀執行個體,唯讀執行個體也需滿足以上條件。
說明如需升級核心小版本,請參見升級核心小版本。
已使用阿里雲主帳號授權RDS存取金鑰管理服務KMS(Key Management Service)。詳情請參見授權RDS訪問KMS。
已開通Key Management Service(Key Management Service)。如果您未開通KMS,可在開通TDE過程中根據引導開通KMS。
注意事項
如果包含唯讀執行個體,請確保主執行個體和唯讀執行個體核心小版本均升級到20221030以上,否則開通TDE加密會失敗。
TDE開通過程中會重啟執行個體造成執行個體切換,請做好業務安排,謹慎操作。執行個體切換的影響請參見執行個體切換的影響。
TDE開通後無法關閉。
開通TDE後,如果是I/O密集型(I/O bound)情境,可能會對資料庫效能產生一定影響。
TDE執行個體不支援使用者通過物理流複製自建備庫。
如果Key Management Service欠費,將會導致雲端硬碟無法解密,整個執行個體不可用,請確保KMS狀態正常。
使用已有自訂密鑰時,需要注意:
禁用或刪除了KMS的自訂密鑰,將會造成RDS執行個體無法正常工作,受影響的操作包括:建立快照、恢複快照和備庫重建等。
撤銷授權關係後,重啟RDS執行個體會導致RDS執行個體不可用。
需要使用主帳號或者具有AliyunSTSAssumeRoleAccess許可權的帳號。
說明關於密鑰的相關操作請參見Key Management Service。
開通TDE加密
訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
在左側導覽列單擊資料安全性。
在TDE頁簽單擊未開通左邊的滑塊。
選擇密鑰類型,單擊確定,開通TDE。
使用由阿里雲自動產生的密鑰:該方式使用的加密金鑰(KEK)為KMS的服務密鑰。
使用已有自訂密鑰:該方式使用的加密金鑰(KEK)為您上傳至KMS的自訂密鑰(CMK)。如果沒有自訂密鑰,需要單擊前往建立,在Key Management Service控制台建立密鑰並匯入內建的密鑰材料。詳情請參見建立密鑰。
說明加密原理請參見TDE加密解密原理。
(可選)更換密鑰。
在TDE頁簽單擊TDE狀態右側的更換密鑰。
選擇使用由阿里雲自動產生的密鑰或使用已有自訂密鑰,選擇密鑰,單擊確定。
使用TDE對錶或索引進行加密或解密
執行個體層級開啟了TDE之後,您還需要對RDS PostgreSQL的表進行表層級的TDE加密解密操作。
加密和解密會帶來效能損耗,請合理控制加密範圍以減少效能損耗。
加密
全域設定
您可以在RDS控制台設定參數rds_default_table_encryption為ON,當開啟此參數後,建立的表(CREATE TABLE)、索引(CREATE INDEX)將會預設加密。
指定表、索引加密
表加密。
-- 建立加密表 CREATE TABLE <tablename> WITH (encryption=on); -- 修改表為加密類型 ALTER TABLE <tablename> SET (encryption=on);
索引加密。
-- 建立加密索引 CREATE INDEX <indexname> ... WITH (encryption=on); -- 修改索引為加密類型 ALTER INDEX <indexname> SET (encryption=on);
說明支援6種索引的加密:btree、hash、spgist、gin、gist和brin。
解密
以下ALTER語句會觸發表或索引的重寫,類似VACUUM FULL,請勿在業務高峰期執行。
解密加密表。
ALTER TABLE <tablename> SET (encryption=off);
解密加密索引。
ALTER INDEX <indexname> SET(encryption=off);
查看錶或索引的加密狀態
SELECT relname, reloptions FROM pg_class WHERE relname IN ('<tablename>', '<indexname>');
常見問題
開啟TDE後,常用資料庫工具(pgAdmin等)還能正常使用嗎?
可以正常使用。
開啟TDE後,還能正常遷移資料到其他RDS執行個體嗎?
可以正常遷移。
加密後查看資料為什麼還是明文的?
查詢資料時會解密並讀取到記憶體,所以是明文顯示。開啟TDE可以防止備份泄露導致資料泄露,備份檔案是加密的,無法用於恢複到本地,如果要恢複資料到本地,需要先解密資料。
相關文檔
關於密鑰的相關操作請參見Key Management Service。
設定全域加密時,如何修改rds_default_table_encryption參數,請參見設定執行個體參數。
RDS PostgreSQL提供rds_tde_utils外掛程式,用於大量加密、解密索引、表、資料庫物件。
如果您還需要對執行個體訪問鏈路進行加密,可以開啟SSL鏈路加密,具體操作請參見SSL鏈路加密。
如果您進需要對資料表中的指定敏感性資料列進行加密,可以開啟全密態資料庫,加密後,敏感性資料將以密文進行傳輸、計算和儲存。
您還可以使用API開啟透明資料加密。
API
描述
開啟RDS執行個體透明資料加密。