背景資訊
建立資料表時預設不加密,如果要配置資料表加密,需要在建立資料表時配置加密相關參數。Tablestore提供基於Key Management Service(Key Management Service,簡稱KMS)祕密金鑰加密和基於內建密鑰(Bring Your Own Key,簡稱BYOK)自訂祕密金鑰加密兩種加密方式。兩種加密方式的加密金鑰均需在KMS擷取,請根據實際需要選擇。
Key Management Service是一站式密鑰管理和資料加密服務平台、一站式憑據安全管理平台,提供簡單、可靠、安全、合規的資料加密保護和憑據管理能力。KMS協助您降低在密碼基礎設施、資料加解密產品和憑據管理產品上的採購、營運、研發開銷,以便您只需關注業務本身。更多資訊,請參見什麼是Key Management Service。
加密方式 | 使用方式 | 說明 |
基於KMS服務祕密金鑰加密 | | Tablestore使用預設的KMS CMK產生密鑰來加密資料,並且在讀取資料時自動解密。首次使用時,Tablestore會在KMS控制台建立一個KMS CMK。您無需購買KMS執行個體即可直接使用。 |
基於BYOK自訂祕密金鑰加密 | | 在KMS控制台使用BYOK材料產生CMK後,Tablestore基於您自訂的密鑰進行資料加密。您可以自行管理使用的加密金鑰。 |
適用情境
適用於對資料存放區有高安全性或者合規性要求的應用情境。
使用方式
使用控制台
通過控制台建立資料表時,支援使用基於KMS服務祕密金鑰加密和基於BYOK自訂祕密金鑰加密中的任意一種方式進行資料加密。
基於KMS服務祕密金鑰加密
登入Table Store管理主控台。
在頁面上方,選擇地區。
在概覽頁面,單擊執行個體名稱或在操作列單擊執行個體管理。
在執行個體詳情頁簽,單擊建立資料表。
在建立資料表對話方塊,配置資料表參數。
說明 關於資料表參數說明的更多資訊,請參見建立資料表。
配置資料表名稱、表主鍵、是否允許更新等。
開啟是否加密開關,選擇加密類型為kms服務主要金鑰。
單擊確定。
建立資料表後,單擊資料表名稱,您可以在表管理頁面中基本詳情頁簽,確認資料表的是否加密取值為是-kms服務主要金鑰,表示資料表已配置資料加密功能。
基於BYOK自訂祕密金鑰加密
已通過KMS控制台建立軟體密鑰。具體操作,請參見密鑰管理快速入門。
建立自訂角色並配置許可權。
建立自訂角色。具體操作,請參見建立可信實體為阿里雲帳號的RAM角色。
配置角色名稱為AliyunOTSAccessingKMS。
建立自訂權限原則,配置為KMS加解密許可權。具體操作,請參見通過指令碼編輯模式建立自訂權限原則。
配置權限原則名稱為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"
}
建立資料表並配置加密。
登入Table Store管理主控台。
在頁面上方,選擇地區。
在概覽頁面,單擊執行個體名稱或在操作列單擊執行個體管理。
在執行個體詳情頁簽,單擊建立資料表。
在建立資料表對話方塊,配置資料表參數。
說明 關於資料表參數說明的更多資訊,請參見建立資料表。
配置資料表名稱、表主鍵、是否允許更新等。
開啟是否加密開關,選擇加密類型為BYOK自訂密鑰,然後配置密鑰ID和ARN。
單擊確定。
建立資料表後,單擊資料表名稱,您可以在表管理頁面中基本詳情頁簽,確認資料表的是否加密取值為是-BYOK自訂密鑰,表示資料表已配置資料加密功能。
使用SDK
通過SDK建立資料表時支援使用基於KMS服務祕密金鑰加密和基於BYOK自訂祕密金鑰加密中的任意一種方式進行資料加密。您可以通過Java SDK實現資料加密。
基於KMS服務祕密金鑰加密
建立資料表並配置KMS服務密鑰,只要開通KMS即可,無需建立KMS執行個體。建立資料表後,您可以通過DescribeTable介面查詢資料表的加密配置。
以下樣本用於建立資料表時使用基於KMS服務祕密金鑰加密表中資料。該表的主鍵為pk(String類型),屬性列值只保留最新版本資料以及資料永不到期。
private static void createTable(SyncClient client) {
//設定資料表名稱。
TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
//如果要配置表加密,需要對建表請求配置加密相關參數,支援KMS服務密鑰或BYOK自訂密鑰兩種類型。此處為使用KMS服務密鑰。
SSESpecification sseKms = new SSESpecification(true, SSEKeyType.SSE_KMS_SERVICE);
//為資料表添加主鍵列。
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk", PrimaryKeyType.STRING));
//資料的到期時間,單位為秒,-1表示永不到期。帶索引表的資料表資料生命週期必須設定為-1。
int timeToLive = -1;
//儲存的最大版本數,1表示每列上最多儲存一個版本即儲存最新的版本。帶索引表的資料表最大版本數必須設定為1。
int maxVersions = 1;
TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
//設定預留讀寫輸送量,容量型執行個體中的資料表只能設定為0,高效能執行個體中的資料表可以設定為非零值。
request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0)));
request.setSseSpecification(sseKms);
client.createTable(request);
}
基於BYOK自訂祕密金鑰加密
已通過KMS控制台建立軟體密鑰。具體操作,請參見密鑰管理快速入門。
建立自訂角色並配置許可權。
建立自訂角色。具體操作,請參見建立可信實體為阿里雲帳號的RAM角色。
配置角色名稱為AliyunOTSAccessingKMS。
建立自訂權限原則,配置為KMS加解密許可權。具體操作,請參見通過指令碼編輯模式建立自訂權限原則。
配置權限原則名稱為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"
}
建立資料表時配置加密參數。
建立資料表並配置BYOK密鑰。建立資料表後,您可以通過DescribeTable介面查詢資料表的加密配置。
以下樣本用於建立資料表時使用BYOK祕密金鑰加密表中資料。該表的主鍵為pk(String類型),屬性列值只保留最新版本資料以及資料永不到期。
private static void createTable(SyncClient client) {
//設定資料表名稱。
TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
//如果要配置表加密,需要對建表請求配置加密相關參數,支援KMS服務密鑰或BYOK自訂密鑰兩種類型。
//設定為步驟1中通過KMS控制台建立的軟體密鑰ID。
String keyId="key-hzz65****************";
//設定為步驟2中記錄的角色ARN資訊。
String roleArn="acs:ram::****************:role/aliyunotsaccessingkms";
//此處使用BYOK自訂密鑰。
//keyId為KMS自訂服務密鑰的ID。roleArn為角色ARN,您需要建立一個角色,然後擷取roleArn作為參數填寫到建表請求中。
SSESpecification sseByok = new SSESpecification(true, SSEKeyType.SSE_BYOK, keyId, roleArn);
//為資料表添加主鍵列。
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk", PrimaryKeyType.STRING));
//資料的到期時間,單位為秒,-1表示永不到期。帶索引表的資料表資料生命週期必須設定為-1。
int timeToLive = -1;
////儲存的最大版本數,1表示每列上最多儲存一個版本即儲存最新的版本。帶索引表的資料表最大版本數必須設定為1。
int maxVersions = 1;
TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0))); //設定預留讀寫輸送量,容量型執行個體中的資料表只能設定為0,高效能執行個體中的資料表可以設定為非零值。
request.setSseSpecification(sseByok);
client.createTable(request);
}