全部產品
Search
文件中心

ApsaraDB RDS:設定透明資料加密

更新時間:Aug 17, 2024

在安全合規或待用資料加密等情境下,推薦使用透明資料加密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加密

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列單擊資料安全性

  3. TDE頁簽單擊未開通左邊的滑塊。

  4. 選擇密鑰類型,單擊確定,開通TDE。

    • 使用由阿里雲自動產生的密鑰:該方式使用的加密金鑰(KEK)為KMS的服務密鑰。

    • 使用已有自訂密鑰:該方式使用的加密金鑰(KEK)為您上傳至KMS的自訂密鑰(CMK)。如果沒有自訂密鑰,需要單擊前往建立,在Key Management Service控制台建立密鑰並匯入內建的密鑰材料。詳情請參見建立密鑰

    說明

    加密原理請參見TDE加密解密原理

  5. (可選)更換密鑰。

    1. TDE頁簽單擊TDE狀態右側的更換密鑰

    2. 選擇使用由阿里雲自動產生的密鑰使用已有自訂密鑰,選擇密鑰,單擊確定

使用TDE對錶或索引進行加密或解密

執行個體層級開啟了TDE之後,您還需要對RDS PostgreSQL的表進行表層級的TDE加密解密操作。

說明

加密和解密會帶來效能損耗,請合理控制加密範圍以減少效能損耗。

加密

  • 全域設定

    您可以在RDS控制台設定參數rds_default_table_encryptionON,當開啟此參數後,建立的表(CREATE TABLE)、索引(CREATE INDEX)將會預設加密。

    說明
    • 該參數僅適用於RDS PostgreSQL 13、14和15執行個體,如何修改參數,請參見設定執行個體參數

    • 如果未找到此參數,請升級核心小版本至最新後再嘗試。具體操作,請參見升級核心小版本

    • 如果您將參數rds_default_table_encryption的取值由ON修改為OFF,僅影響後續建立的表或索引,之前已建立預設加密的表和索引不受影響。

  • 指定表、索引加密

    • 表加密。

      -- 建立加密表
      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

    描述

    開啟TDE

    開啟RDS執行個體透明資料加密。