數(shù)據(jù)加密
為了保證表數(shù)據(jù)安全,表格存儲提供了數(shù)據(jù)落盤加密功能。您可以在創(chuàng)建數(shù)據(jù)表時配置數(shù)據(jù)表加密。
背景信息
創(chuàng)建數(shù)據(jù)表時默認不加密,如果要配置數(shù)據(jù)表加密,需要在創(chuàng)建數(shù)據(jù)表時配置加密相關參數(shù)。表格存儲提供基于密鑰管理服務(Key Management Service,簡稱KMS)密鑰加密和基于自帶密鑰(Bring Your Own Key,簡稱BYOK)自定義密鑰加密兩種加密方式。兩種加密方式的加密密鑰均需在KMS獲取,請根據(jù)實際需要選擇。
密鑰管理服務KMS是一站式密鑰管理和數(shù)據(jù)加密服務平臺、一站式憑據(jù)安全管理平臺,提供簡單、可靠、安全、合規(guī)的數(shù)據(jù)加密保護和憑據(jù)管理能力。KMS幫助您降低在密碼基礎設施、數(shù)據(jù)加解密產(chǎn)品和憑據(jù)管理產(chǎn)品上的采購、運維、研發(fā)開銷,以便您只需關注業(yè)務本身。更多信息,請參見什么是密鑰管理服務。
加密方式 | 使用方式 | 說明 |
基于KMS服務密鑰加密 |
| 表格存儲使用默認的KMS CMK生成密鑰來加密數(shù)據(jù),并且在讀取數(shù)據(jù)時自動解密。首次使用時,表格存儲會在KMS控制臺創(chuàng)建一個KMS CMK。您無需購買KMS實例即可直接使用。 |
基于BYOK自定義密鑰加密 | SDK | 在KMS控制臺使用BYOK材料生成CMK后,表格存儲基于您自定義的密鑰進行數(shù)據(jù)加密。您可以自行管理使用的加密密鑰。 |
適用場景
適用于對數(shù)據(jù)存儲有高安全性或者合規(guī)性要求的應用場景。
注意事項
數(shù)據(jù)加密功能只支持在創(chuàng)建數(shù)據(jù)表時配置。
數(shù)據(jù)加密功能開啟后不支持關閉,請謹慎操作。
目前支持使用數(shù)據(jù)加密功能的地域有華東1(杭州)、華東1 金融云、華東2(上海)、華南1(深圳)、華北2(北京)、華北3(張家口)、中國香港、新加坡、美國(硅谷)、美國(弗吉尼亞)、英國(倫敦)、日本(東京)、澳大利亞(悉尼)關停中、德國(法蘭克福)、印度尼西亞(雅加達)。
使用方式
使用控制臺
通過控制臺只支持使用基于KMS服務密鑰加密的方式進行數(shù)據(jù)加密。表格存儲負責生成和管理數(shù)據(jù)加密密鑰。
登錄表格存儲管理控制臺。
在頁面上方,選擇地域。
在概覽頁面,單擊實例名稱或在操作列單擊實例管理。
在實例詳情頁簽,單擊創(chuàng)建數(shù)據(jù)表。
在創(chuàng)建數(shù)據(jù)表對話框,配置數(shù)據(jù)表參數(shù)。
關于數(shù)據(jù)表參數(shù)說明的更多信息,請參見創(chuàng)建數(shù)據(jù)表。
配置數(shù)據(jù)表名稱、表主鍵、是否允許更新等。
打開是否加密開關后,選擇加密類型為kms服務主密鑰。
單擊確定。
創(chuàng)建數(shù)據(jù)表后,單擊數(shù)據(jù)表名稱,您可以在表管理頁面中基本詳情頁簽,確認表的是否加密取值為是-kms服務主密鑰,表示數(shù)據(jù)表已配置數(shù)據(jù)加密功能。
使用SDK
通過SDK創(chuàng)建數(shù)據(jù)表時支持使用基于KMS服務密鑰加密和基于BYOK自定義密鑰加密中的任意一種方式進行數(shù)據(jù)加密。您可以通過Java SDK實現(xiàn)數(shù)據(jù)加密。
基于KMS服務密鑰加密
創(chuàng)建數(shù)據(jù)表并配置KMS服務密鑰,只要開通KMS即可,無需創(chuàng)建KMS實例。創(chuàng)建數(shù)據(jù)表后,您可以通過DescribeTable接口查詢數(shù)據(jù)表的加密配置。
以下示例用于創(chuàng)建數(shù)據(jù)表時使用基于KMS服務密鑰加密表中數(shù)據(jù)。該表的主鍵為pk(String類型),屬性列值只保留最新版本數(shù)據(jù)以及數(shù)據(jù)永不過期。
private static void createTable(SyncClient client) {
//設置數(shù)據(jù)表名稱。
TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
//如果要配置表加密,需要對建表請求配置加密相關參數(shù),支持KMS服務密鑰或BYOK自定義密鑰兩種類型。此處為使用KMS服務密鑰。
SSESpecification sseKms = new SSESpecification(true, SSEKeyType.SSE_KMS_SERVICE);
//為數(shù)據(jù)表添加主鍵列。
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk", PrimaryKeyType.STRING));
//數(shù)據(jù)的過期時間,單位為秒,-1表示永不過期。帶索引表的數(shù)據(jù)表數(shù)據(jù)生命周期必須設置為-1。
int timeToLive = -1;
//保存的最大版本數(shù),1表示每列上最多保存一個版本即保存最新的版本。帶索引表的數(shù)據(jù)表最大版本數(shù)必須設置為1。
int maxVersions = 1;
TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
//設置預留讀寫吞吐量,容量型實例中的數(shù)據(jù)表只能設置為0,高性能實例中的數(shù)據(jù)表可以設置為非零值。
request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0)));
request.setSseSpecification(sseKms);
client.createTable(request);
}
基于BYOK自定義密鑰加密
已通過KMS控制臺創(chuàng)建軟件密鑰。具體操作,請參見軟件密鑰。
創(chuàng)建自定義角色并配置權限。
創(chuàng)建自定義角色。具體操作,請參見創(chuàng)建可信實體為阿里云賬號的RAM角色。
配置角色名稱為AliyunOTSAccessingKMS。
創(chuàng)建自定義權限策略,配置為KMS加解密權限。具體操作,請參見通過腳本編輯模式創(chuàng)建自定義權限策略。
配置權限策略名稱為otskmspolicytest。權限策略示例如下:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "*" ] } ] }
為自定義角色(AliyunOTSAccessingKMS)授予KMS加解密權限策略(otskmspolicytest)。具體操作,請參見為RAM角色授權。
授權完成后,記錄角色的ARN,即需要扮演角色的ID。
修改自定義角色的信任策略。具體操作,請參見修改RAM角色的信任策略。
角色的信任策略示例如下:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "ots.aliyuncs.com" ] } } ], "Version": "1" }
創(chuàng)建數(shù)據(jù)表時配置加密參數(shù)。
創(chuàng)建數(shù)據(jù)表并配置BYOK密鑰。創(chuàng)建數(shù)據(jù)表后,您可以通過DescribeTable接口查詢數(shù)據(jù)表的加密配置。
以下示例用于創(chuàng)建數(shù)據(jù)表時使用BYOK密鑰加密表中數(shù)據(jù)。該表的主鍵為pk(String類型),屬性列值只保留最新版本數(shù)據(jù)以及數(shù)據(jù)永不過期。
private static void createTable(SyncClient client) { //設置數(shù)據(jù)表名稱。 TableMeta tableMeta = new TableMeta("<TABLE_NAME>"); //如果要配置表加密,需要對建表請求配置加密相關參數(shù),支持KMS服務密鑰或BYOK自定義密鑰兩種類型。 //設置為步驟1中通過KMS控制臺創(chuàng)建的軟件密鑰ID。 String keyId="key-hzz65****************"; //設置為步驟2中記錄的角色ARN信息。 String roleArn="acs:ram::****************:role/aliyunotsaccessingkms"; //此處使用BYOK自定義密鑰。 //keyId為KMS自定義服務密鑰的ID。roleArn為角色ARN,您需要創(chuàng)建一個角色,然后獲取roleArn作為參數(shù)填寫到建表請求中。 SSESpecification sseByok = new SSESpecification(true, SSEKeyType.SSE_BYOK, keyId, roleArn); //為數(shù)據(jù)表添加主鍵列。 tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk", PrimaryKeyType.STRING)); //數(shù)據(jù)的過期時間,單位為秒,-1表示永不過期。帶索引表的數(shù)據(jù)表數(shù)據(jù)生命周期必須設置為-1。 int timeToLive = -1; ////保存的最大版本數(shù),1表示每列上最多保存一個版本即保存最新的版本。帶索引表的數(shù)據(jù)表最大版本數(shù)必須設置為1。 int maxVersions = 1; TableOptions tableOptions = new TableOptions(timeToLive, maxVersions); CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions); request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0))); //設置預留讀寫吞吐量,容量型實例中的數(shù)據(jù)表只能設置為0,高性能實例中的數(shù)據(jù)表可以設置為非零值。 request.setSseSpecification(sseByok); client.createTable(request); }
計費說明
數(shù)據(jù)加密費用由密鑰管理服務KMS進行收取。更多信息,請參見密鑰管理服務產(chǎn)品計費。