全部產品
Search
文件中心

Tablestore:建立加密表

更新時間:Nov 09, 2024

本文將通過參數說明和範例程式碼為您介紹如何使用 Go SDK 建立加密資料表,實現資料加密儲存功能。Table Store提供兩種加密方式:基於Key Management Service(Key Management Service,簡稱 KMS)的祕密金鑰加密和基於內建密鑰(Bring Your Own Key,簡稱 BYOK)的自訂祕密金鑰加密。

前提條件

介面和參數

介面和具體參數資訊,請參見建立資料表

基於 KMS 服務祕密金鑰加密

首次使用基於KMS密鑰的方式建立資料表時,Table Store會自動建立一個KMS服務密鑰,通過服務密鑰來加密資料,並在讀取資料時自動解密。您無需購買KMS執行個體即可使用該功能。

以下樣本用於建立資料表時基於 KMS 服務祕密金鑰加密資料。

func CreateTable(client *tablestore.TableStoreClient, tableName string) {
    createTableRequest := new(tablestore.CreateTableRequest)

    tableMeta := new(tablestore.TableMeta)
    //設定資料表名稱。
    tableMeta.TableName = tableName
    //為資料表添加主鍵列。主鍵為pk(String類型)。
    tableMeta.AddPrimaryKeyColumn("pk", tablestore.PrimaryKeyType_STRING)

    tableOption := new(tablestore.TableOption)
    //資料的到期時間,-1表示永不到期。
    tableOption.TimeToAlive = -1
    //最大版本數,屬性列值最多保留1個版本,即儲存最新的版本。
    tableOption.MaxVersion = 1

    //設定預留讀寫輸送量,容量型執行個體下的資料表只能設定為0,高效能型執行個體下的資料表可以設定為非零值。
    reservedThroughput := new(tablestore.ReservedThroughput)
    reservedThroughput.Readcap = 0
    reservedThroughput.Writecap = 0

    //開啟伺服器端加密功能,使用KMS的服務主要金鑰。
    sseSpec := new(tablestore.SSESpecification)
    sseSpec.SetEnable(true)
    sseSpec.SetKeyType(tablestore.SSE_KMS_SERVICE)

    createTableRequest.TableMeta = tableMeta
    createTableRequest.TableOption = tableOption
    createTableRequest.ReservedThroughput = reservedThroughput
    createTableRequest.SSESpecification = sseSpec
    _, err := client.CreateTable(createTableRequest)
    if err != nil {
        fmt.Println("Failed to create table with error:", err)
    } else {
	fmt.Println("Create table finished")
    }
}

基於 BYOK 自訂祕密金鑰加密

  1. 已開通 KMS 服務。具體操作,請參見購買和啟用 KMS 執行個體

  2. 已通過 KMS 控制台建立軟體密鑰。具體操作,請參見密鑰管理快速入門

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

    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

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

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

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "ots.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }
  4. 建立資料表並配置 BYOK 祕密金鑰加密資料。

    func CreateTable(client *tablestore.TableStoreClient, tableName string) {
        createTableRequest := new(tablestore.CreateTableRequest)
    
        tableMeta := new(tablestore.TableMeta)
        //設定資料表名稱。
        tableMeta.TableName = tableName
        //為資料表添加主鍵列。主鍵為pk(String類型)。
        tableMeta.AddPrimaryKeyColumn("pk", tablestore.PrimaryKeyType_STRING)
    
        tableOption := new(tablestore.TableOption)
        //資料的到期時間,-1表示永不到期。
        tableOption.TimeToAlive = -1
        //最大版本數,屬性列值最多保留1個版本,即儲存最新的版本。
        tableOption.MaxVersion = 1
    
        //設定預留讀寫輸送量,容量型執行個體下的資料表只能設定為0,高效能型執行個體下的資料表可以設定為非零值。
        reservedThroughput := new(tablestore.ReservedThroughput)
        reservedThroughput.Readcap = 0
        reservedThroughput.Writecap = 0
    
        //開啟伺服器端加密功能,使用KMS的使用者主要金鑰。
        sseSpec := new(tablestore.SSESpecification)
        sseSpec.SetEnable(true)
        sseSpec.SetKeyType(tablestore.SSE_BYOK)
        //keyId為KMS自訂服務密鑰的ID,設定為步驟2中通過KMS控制台建立的軟體密鑰ID。
        sseSpec.SetKeyId("key-hzz65****************")
        //roleArn為角色ARN,設定為步驟3中記錄的角色ARN資訊。
        sseSpec.SetRoleArn("acs:ram::****************:role/aliyunotsaccessingkms")
    
        createTableRequest.TableMeta = tableMeta
        createTableRequest.TableOption = tableOption
        createTableRequest.ReservedThroughput = reservedThroughput
        createTableRequest.SSESpecification = sseSpec
        _, err := client.CreateTable(createTableRequest)
        if err != nil {
            fmt.Println("Failed to create table with error:", err)
        } else {
    	fmt.Println("Create table finished")
        }
    }

相關文檔

  • Key Management Service(Key Management Service)是您的一站式密鑰管理和資料加密服務平台、一站式憑據安全管理平台,提供簡單、可靠、安全、合規的資料加密保護和憑據管理能力。更多資訊,請參見Key Management Service

  • 建立加密表後,您可以通過 DescribeTable 介面查詢資料表的加密配置。