本文將通過參數說明和示例代碼為您介紹如何使用 Go SDK 創建加密數據表,實現數據加密存儲功能。表格存儲提供兩種加密方式:基于密鑰管理服務(Key Management Service,簡稱 KMS)的密鑰加密和基于自帶密鑰(Bring Your Own Key,簡稱 BYOK)的自定義密鑰加密。
前提條件
已通過控制臺創建實例。具體操作,請參見創建實例。
已初始化 OTSClient。具體操作,請參見初始化 OTSClient。
接口和參數
接口和具體參數信息,請參見創建數據表。
基于 KMS 服務密鑰加密
首次使用基于KMS密鑰的方式創建數據表時,表格存儲會自動創建一個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") } }
相關文檔
密鑰管理服務 KMS(Key Management Service)是您的一站式密鑰管理和數據加密服務平臺、一站式憑據安全管理平臺,提供簡單、可靠、安全、合規的數據加密保護和憑據管理能力。更多信息,請參見密鑰管理服務。
創建加密表后,您可以通過 DescribeTable 接口查詢數據表的加密配置。