本文為您介紹如何在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密鑰進行加密。
僅支援對列存表以及行列共存模式中的列存表開啟資料存放區加密,其餘表類型不支援。開啟儲存加密功能後,您仍然可以在MaxCompute中建立Hologres外部表格以進行資料讀寫,且僅列存表、及行列共存中的列存表為加密模式,其餘表類型不進行加密。
資料加密機制
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計費說明。
操作步驟
建立自訂權限原則
登入RAM控制台,單擊左側導覽列的權限原則,進入權限原則頁面,單擊建立權限原則。
進入建立權限原則頁面,單擊指令碼編輯配置指令碼如下所示且名稱命名為AliyunHologresEncryptionDefaultRolePolicy。
{ "Version": "1", "Statement": [ { "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey" ], "Resource": "acs:kms:*:*:*/*", "Effect": "Allow" } ] }
單擊確定,完成自訂權限原則的建立。
建立Hologres代理角色並授權
登入RAM控制台,單擊左側導覽列的角色。
進入角色頁面,單擊建立角色,進入建立角色對話方塊,選擇可信實體類型為阿里雲服務。
單擊下一步,角色類型選擇普通服務角色,角色名稱命名為AliyunHologresEncryptionDefaultRole,設定選擇受信服務為互動式分析,單擊完成。
進入建立完成頁面,單擊為角色授權。
進入添加許可權頁面,授權範圍選擇整個雲帳號,選擇許可權為自訂策略中第一步建立的自訂角色策略(AliyunHologresEncryptionDefaultRolePolicy)。
單擊確定,完成角色建立和授權操作。
在建立完角色後,單擊建立的角色,在信任策略管理頁簽,可以查看信任策略的設定。
建立密鑰
具體操作,請參見密鑰管理快速入門。
重要Hologres只支援使用對稱金鑰,其密鑰類型為Aliyun_AES_256。
設定加密規則
登入需要進行儲存資料加密的資料庫執行個體,登入資料庫請參見登入資料庫。
在臨時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。
一個設定加密規則並查詢資料的簡單使用樣本如下。
對資料庫開啟儲存加密。
ALTER DATABASE hoxxxx set hg_experimental_encryption_options= 'AES256,623c26ee-xxxx-xxxx-xxxx-91d323cc4855,AliyunHologresEncryptionDefaultRole,187xxxxxxxxxxxxx';
建立表並寫入資料。
DROP TABLE IF EXISTS a; CREATE TABLE a(id int); INSERT INTO a values(1); SELECT hg_admin_command('flush'); -- 僅對測試使用,為了馬上查詢到效果使用
查詢資料。
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';
樣本返回結果: