全部產品
Search
文件中心

Tablestore:建立加密表

更新時間:Jun 30, 2024

為了保證表資料安全,Table Store提供了資料落盤加密功能。建立資料表時您可以配置資料表加密。Table Store提供基於Key Management Service(Key Management Service,簡稱KMS)祕密金鑰加密和基於內建密鑰(Bring Your Own Key,簡稱BYOK)自訂祕密金鑰加密兩種加密方式,請根據實際需要選擇。

前提條件

基於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自訂祕密金鑰加密

  1. 已通過KMS控制台建立軟體密鑰。具體操作,請參見軟體密鑰

  2. 建立自訂角色並配置許可權。

    1. 建立自訂角色。具體操作,請參見建立可信實體為阿里雲帳號的RAM角色

      配置角色名稱為AliyunOTSAccessingKMS。

    2. 建立自訂權限原則,配置為KMS加解密許可權。具體操作,請參見通過指令碼編輯模式建立自訂權限原則

      配置權限原則名稱為otskmspolicytest。權限原則樣本如下:

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "kms:Decrypt",
                      "kms:GenerateDataKey"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
    3. 為自訂角色(AliyunOTSAccessingKMS)授予KMS加解密權限原則(otskmspolicytest)。具體操作,請參見為RAM角色授權

      授權完成後,記錄角色的ARN,即需要扮演角色的ID。

      image..png

    4. 修改自訂角色的信任策略。具體操作,請參見修改RAM角色的信任策略

      角色的信任策略樣本如下:

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "ots.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }
  3. 建立資料表時配置加密參數。

    建立資料表並配置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);
    }