全部產品
Search
文件中心

Tablestore:資料加密

更新時間:Dec 03, 2024

為了保證表資料安全,Tablestore提供了資料落盤加密功能。您可以在建立資料表時配置資料表加密。

背景資訊

建立資料表時預設不加密,如果要配置資料表加密,需要在建立資料表時配置加密相關參數。Tablestore提供基於Key Management Service(Key Management Service,簡稱KMS)祕密金鑰加密和基於內建密鑰(Bring Your Own Key,簡稱BYOK)自訂祕密金鑰加密兩種加密方式。兩種加密方式的加密金鑰均需在KMS擷取,請根據實際需要選擇。

Key Management Service是一站式密鑰管理和資料加密服務平台、一站式憑據安全管理平台,提供簡單、可靠、安全、合規的資料加密保護和憑據管理能力。KMS協助您降低在密碼基礎設施、資料加解密產品和憑據管理產品上的採購、營運、研發開銷,以便您只需關注業務本身。更多資訊,請參見什麼是Key Management Service

加密方式

使用方式

說明

基於KMS服務祕密金鑰加密

  • Tablestore管理主控台

  • SDK

Tablestore使用預設的KMS CMK產生密鑰來加密資料,並且在讀取資料時自動解密。首次使用時,Tablestore會在KMS控制台建立一個KMS CMK。您無需購買KMS執行個體即可直接使用。

基於BYOK自訂祕密金鑰加密

  • Tablestore管理主控台

  • SDK

在KMS控制台使用BYOK材料產生CMK後,Tablestore基於您自訂的密鑰進行資料加密。您可以自行管理使用的加密金鑰。

適用情境

適用於對資料存放區有高安全性或者合規性要求的應用情境。

注意事項

  • 資料加密功能只支援在建立資料表時配置。

  • 資料加密功能開啟後不支援關閉,請謹慎操作。

  • 目前支援資料加密功能的地區包括華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華北6(烏蘭察布)、華南1(深圳)、中國香港、日本(東京)、新加坡、印尼(雅加達)、德國(法蘭克福)、英國(倫敦)、美國(矽谷)、美國(維吉尼亞)。

使用方式

使用控制台

通過控制台建立資料表時,支援使用基於KMS服務祕密金鑰加密和基於BYOK自訂祕密金鑰加密中的任意一種方式進行資料加密。

基於KMS服務祕密金鑰加密

  1. 登入Table Store管理主控台

  2. 在頁面上方,選擇地區。

  3. 概覽頁面,單擊執行個體名稱或在操作列單擊執行個體管理

  4. 執行個體詳情頁簽,單擊建立資料表

  5. 建立資料表對話方塊,配置資料表參數。

    說明

    關於資料表參數說明的更多資訊,請參見建立資料表

    1. 配置資料表名稱、表主鍵、是否允許更新等。

    2. 開啟是否加密開關,選擇加密類型kms服務主要金鑰

    kms_1.jpg

  6. 單擊確定

    建立資料表後,單擊資料表名稱,您可以在表管理頁面中基本詳情頁簽,確認資料表的是否加密取值為是-kms服務主要金鑰,表示資料表已配置資料加密功能。

    kms_2.jpg

基於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. 建立資料表並配置加密。

    1. 登入Table Store管理主控台

    2. 在頁面上方,選擇地區。

    3. 概覽頁面,單擊執行個體名稱或在操作列單擊執行個體管理

    4. 執行個體詳情頁簽,單擊建立資料表

    5. 建立資料表對話方塊,配置資料表參數。

      說明

      關於資料表參數說明的更多資訊,請參見建立資料表

      1. 配置資料表名稱、表主鍵、是否允許更新等。

      2. 開啟是否加密開關,選擇加密類型BYOK自訂密鑰,然後配置密鑰ID和ARN。

        BYOK_1.jpg

    6. 單擊確定

      建立資料表後,單擊資料表名稱,您可以在表管理頁面中基本詳情頁簽,確認資料表的是否加密取值為是-BYOK自訂密鑰,表示資料表已配置資料加密功能。

      byok_2.jpg

使用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自訂祕密金鑰加密

  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);
    }

計費說明

資料加密費用由Key Management Service進行收取。更多資訊,請參見Key Management Service產品計費