本文將通過參數說明和範例程式碼為您介紹如何使用 Go SDK 建立加密資料表,實現資料加密儲存功能。Table Store提供兩種加密方式:基於Key Management Service(Key Management Service,簡稱 KMS)的祕密金鑰加密和基於內建密鑰(Bring Your Own Key,簡稱 BYOK)的自訂祕密金鑰加密。
前提條件
已通過控制台建立執行個體。具體操作,請參見建立執行個體。
已初始化 OTSClient。具體操作,請參見初始化 OTSClient。
介面和參數
介面和具體參數資訊,請參見建立資料表。
基於 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 自訂祕密金鑰加密
已開通 KMS 服務。具體操作,請參見購買和啟用 KMS 執行個體。
已通過 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 祕密金鑰加密資料。
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 介面查詢資料表的加密配置。