全部產品
Search
文件中心

Hologres:資料存放區加密

更新時間:Jun 30, 2024

本文為您介紹如何在Hologres中對資料進行加密處理,本文包括資料加密機制、使用限制及操作步驟。

背景資訊

Hologres支援通過Key Management Service(Key Management Service)對資料進行加密儲存,提供資料靜態保護能力,滿足企業監管和安全合規需求。開啟加密儲存後,由於涉及加密和解密操作,所以會影響查詢和寫入效能,大約有20%-40%的效能損耗,具體情況根據查詢特徵有不同程度的影響。

使用限制

  • 僅Hologres V1.1及以上版本支援資料加密儲存,如果您的執行個體是V1.1以下版本,請您使用自助升級或加入HologresDingTalk交流群反饋,詳情請參見如何擷取更多的線上支援?

  • 使用資料存放區加密功能時,如果您的執行個體版本低於V1.3.31需要添加後台配置。Hologres從V1.3.31版本開始無需添加後台配置,如需使用該功能,建議您升級執行個體,詳情請參見執行個體升級

  • 您在KMS上對內建密鑰(BYOK)的操作(例如禁用或刪除),會影響Hologres對資料的加密或解密操作。由於Hologres服務涉及緩衝,您在KMS的相關操作會在24小時內生效。

  • 儲存加密僅會對開啟儲存加密後的資料表生效,對於開啟儲存加密前建立的資料表,系統不會對其進行儲存加密。

  • 開啟儲存加密功能後,仍然可以在MaxCompute中建立Hologres外部表格進行資料讀寫。

  • 開啟儲存加密功能後,再使用如下SQL關閉資料庫的儲存加密,關閉前的表資料仍然是被加密的,只有關閉後新建立的表才不會使用儲存加密。

    ALTER DATABASE <database_name> set hg_experimental_encryption_options='';
  • 開啟儲存加密表使用的KMS密鑰被禁用或者失效,會導致該表的資料無法讀寫。

  • Hologres從 V2.0版本開始支援為每張表設定單獨的加密規則,即對於不同的表設定不同的KMS密鑰進行加密。

資料加密機制

Hologres通過KMS託管密鑰,實現資料加密或解密功能,資料加密機制如下。

  • Hologres以資料庫為單位,通過KMS加密或解密儲存在Hologres的資料。在使用資料加密功能前,請確保您所在地區已開通KMS服務。

  • KMS產生和管理您的密鑰並保障密鑰的安全性。

  • Hologres支援的密碼編譯演算法有AES256、AESCTR、RC4和SM4。

  • Hologres僅支援內建密鑰(BYOK)加密或解密資料,同時支援兩類密鑰材料,包括建立使用者主要金鑰CMK時由KMS產生的密鑰材料以及使用者匯入的密鑰材料。

    您可以通過KMS建立內建密鑰(BYOK),並在Hologres中針對資料庫,選擇該密鑰作為密鑰進行資料加密。在KMS上建立BYOK的詳情請參見建立密鑰

  • 在資料讀寫時,Hologres會調用KMS的API擷取相關的密鑰資訊,擷取相關的密鑰資訊系統預設會緩衝24小時。因此在使用資料加密功能時會產生相關的KMS費用,KMS相關計費說明請參見KMS計費說明

操作步驟

  1. 建立自訂權限原則

    1. 登入RAM控制台,單擊左側導覽列的權限原則,進入權限原則頁面,單擊建立權限原則

      權限原則

    2. 進入建立權限原則頁面,單擊指令碼編輯配置指令碼如下所示且名稱命名為AliyunHologresEncryptionDefaultRolePolicy

      建立權限原則

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "kms:Encrypt",
                      "kms:Decrypt",
                      "kms:GenerateDataKey",
                      "kms:DescribeKey"
                  ],
                  "Resource": "acs:kms:*:*:*/*",
                  "Effect": "Allow"
              }
          ]
      }
    3. 單擊確定,完成自訂權限原則的建立。

  2. 建立Hologres代理角色並授權

    1. 登入RAM控制台,單擊左側導覽列的角色

    2. 進入角色頁面,單擊建立角色,進入建立角色對話方塊,選擇可信實體類型阿里雲服務

    3. 單擊下一步角色類型選擇普通服務角色角色名稱命名為AliyunHologresEncryptionDefaultRole,設定選擇受信服務互動式分析,單擊完成建立角色

    4. 進入建立完成頁面,單擊為角色授權

    5. 進入添加許可權頁面,授權範圍選擇整個雲帳號選擇許可權自訂策略中第一步建立的自訂角色策略(AliyunHologresEncryptionDefaultRolePolicy)。添加許可權

    6. 單擊確定,完成角色建立和授權操作。

      在建立完角色後,單擊建立的角色,在信任策略管理頁簽,可以查看信任策略的設定。

  3. 建立密鑰

    具體操作,請參見密鑰管理快速入門

    重要

    Hologres只支援使用對稱金鑰,其密鑰類型為Aliyun_AES_256。

  4. 設定加密規則

    1. 登入需要進行儲存資料加密的資料庫執行個體,登入資料庫請參見登入資料庫

    2. 臨時Query查詢頁面,選擇已建立的執行個體名資料庫後,請您在SQL查詢的編輯框輸入如下語句,單擊運行

      以下SQL語句用於設定資料存放區加密規則。

      ALTER DATABASE <db_name> SET hg_experimental_encryption_options='<encryption_type>,<cmk_id>,<ram_role>,<uid>';

      參數說明

      參數

      說明

      db_name

      需要進行加密儲存的資料庫名稱。

      encryption_type

      加密類型。僅支援AES256、AESCTR、RC4類型。

      cmk_id

      密鑰ID。登入Key Management Service控制台,密鑰詳情頁擷取。

      ram_role

      建立的Hologres代理角色名稱。

      uid

      阿里雲帳號ID。擷取詳情請參見帳號ID

    一個設定加密規則並查詢資料的簡單使用樣本如下。

    1. 對資料庫開啟儲存加密。

      ALTER DATABASE hoxxxx set hg_experimental_encryption_options=
      'AES256,623c26ee-xxxx-xxxx-xxxx-91d323cc4855,AliyunHologresEncryptionDefaultRole,187xxxxxxxxxxxxx';
    2. 建立表並寫入資料。

      DROP TABLE IF EXISTS a;
      
      CREATE TABLE a(id int);
      
      INSERT INTO a values(1);
      
      SELECT hg_admin_command('flush'); -- 僅對測試使用,為了馬上查詢到效果使用
    3. 查詢資料。

      SELECT * FROM a;

      運行結果如下。樣本結果

    若此時禁用了KMS,在執行個體重啟或者24小時後,查詢a表資料會報錯。

表層級儲存加密設定

Hologres從V2.0版本開始支援在對資料庫開啟儲存加密後,再針對單表設定加密規則,即可以針對不同的表使用不同的KMS密鑰進行加密。

設定表層級儲存加密規則

  • 注意事項:

    • 若不對錶單獨設定加密規則,系統會使用hg_experimental_encryption_options設定的加密規則作為表的加密規則。

    • 設定必須要在建表時設定,不支援在表建立後再設定加密規則。

  • 使用文法:

    CALL SET_TABLE_PROPERTY('<table_name>', 'encryption_options', '<encryption_type>,<cmk_id>,<ram_role>,<uid>');

    參數說明如下:

    參數

    說明

    table_name

    需要進行加密儲存的表名稱。

    encryption_type

    加密類型。僅支援AES256、AESCTR、RC4類型。

    cmk_id

    密鑰ID。登入Key Management Service控制台,密鑰詳情頁擷取。

    ram_role

    建立的Hologres代理角色名稱。

    uid

    阿里雲帳號ID。擷取詳情請參見帳號ID

  • 使用樣本:

    建立表lineitem,並使用AES256加密類型、623c26ee-xxxx-xxxx-xxxx-91d323cc4855祕密金鑰加密。

    BEGIN;
    CREATE TABLE LINEITEM
    (
        L_ORDERKEY      BIGINT      NOT NULL,
        L_PARTKEY       INT         NOT NULL,
        L_SUPPKEY       INT         NOT NULL,
        L_LINENUMBER    INT         NOT NULL,
        L_QUANTITY      DECIMAL(15,2) NOT NULL,
        L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
        L_DISCOUNT      DECIMAL(15,2) NOT NULL,
        L_TAX           DECIMAL(15,2) NOT NULL,
        L_RETURNFLAG    TEXT        NOT NULL,
        L_LINESTATUS    TEXT        NOT NULL,
        L_SHIPDATE      TIMESTAMPTZ NOT NULL,
        L_COMMITDATE    TIMESTAMPTZ NOT NULL,
        L_RECEIPTDATE   TIMESTAMPTZ NOT NULL,
        L_SHIPINSTRUCT  TEXT        NOT NULL,
        L_SHIPMODE      TEXT        NOT NULL,
        L_COMMENT       TEXT        NOT NULL,
        PRIMARY KEY (L_ORDERKEY,L_LINENUMBER)
    );
    CALL SET_TABLE_PROPERTY('LINEITEM', 'encryption_options', 'AES256,623c26ee-xxxx-xxxx-xxxx-91d323cc4855,AliyunHologresEncryptionDefaultRole,153xxxxxxxxxxxxx');
    COMMIT;

查看儲存加密規則

Hologres從V2.0版本開始,您可以使用如下SQL查看每張表的加密規則。

SELECT
    *
FROM
    hologres.hg_table_properties
WHERE
    property_key = 'encryption_options';

樣本返回結果:查看儲存加密規則