このトピックでは、パラメータとサンプルコードを使用して、Go SDK for Tablestore を使用して暗号化データテーブルを作成し、暗号化された方法でデータを保存する方法について説明します。Tablestore は、Key Management Service (KMS) のデフォルトのサービスカスタマーマスターキー (CMK) に基づく暗号化と Bring Your Own Key (BYOK) に基づく暗号化の 2 つの暗号化方法をサポートしています。
前提条件
Tablestore コンソールでインスタンスが作成されていること。詳細については、インスタンスの作成を参照してください。
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
API操作とパラメータ
API 操作とパラメータの詳細については、データテーブルの作成を参照してください。
KMS のデフォルトサービス CMK に基づく暗号化
KMS のデフォルトサービス CMK に基づいて暗号化されたデータテーブルを初めて作成すると、Tablestore は KMS のデフォルトサービス CMK を自動的に作成し、CMK を使用してデータを暗号化し、データの読み取り時に自動的に復号化します。この機能を使用するために、KMS インスタンスを購入する必要はありません。
次のサンプルコードは、データテーブルの作成時に KMS のデフォルトサービス CMK に基づいてデータを暗号化する方法の例を示しています。
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)
// データテーブル内のデータの有効期間 (TTL) を指定します。-1 の値は、データテーブル内のデータが期限切れにならないことを指定します。
tableOption.TimeToAlive = -1
// データテーブルの各属性列に保持できる最大バージョン数を指定します。この例では、各属性列の最新バージョンのみを保持できます。
tableOption.MaxVersion = 1
// 予約済み読み取りスループットと予約済み書き込みスループットを指定します。キャパシティインスタンスのデータテーブルの場合、予約済み読み取りスループットと予約済み書き込みスループットは 0 に設定する必要があり、高性能インスタンスのデータテーブルの場合は 0 以外の値に設定できます。
reservedThroughput := new(tablestore.ReservedThroughput)
reservedThroughput.Readcap = 0
reservedThroughput.Writecap = 0
// サーバー側の暗号化機能を有効にし、KMS のデフォルトサービス CMK を使用します。
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 ロールを作成し、RAM ロールに権限を付与します。
RAM ロールを作成します。詳細については、信頼できる Alibaba Cloud アカウントの RAM ロールの作成を参照してください。
RAM ロールの名前を指定します。この例では、RAM ロール名
AliyunOTSAccessingKMS
を使用します。KMS の暗号化と復号化の権限を含むカスタムポリシーを作成します。詳細については、JSON タブでのカスタムポリシーの作成を参照してください。
カスタムポリシーの名前を指定します。この例では、ポリシー名
otskmspolicytest
を使用します。サンプルポリシー:{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "*" ] } ] }
otskmspolicytest
ポリシーをAliyunOTSAccessingKMS
RAM ロールにアタッチして、RAM ロールに KMS を使用してデータを暗号化および復号化する権限を付与します。詳細については、RAM ロールへの権限の付与を参照してください。承認が完了したら、ロールの ARN を記録します。ARN は、引き受けるロールの ID を示します。次の図は ARN を示しています。
RAM ロールの信頼ポリシーを変更します。詳細については、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) // データテーブル内のデータの TTL を指定します。-1 の値は、データテーブル内のデータが期限切れにならないことを指定します。 tableOption.TimeToAlive = -1 // データテーブルの各属性列に保持できる最大バージョン数を指定します。この例では、各属性列の最新バージョンのみを保持できます。 tableOption.MaxVersion = 1 // 予約済み読み取りスループットと予約済み書き込みスループットを指定します。キャパシティインスタンスのデータテーブルの場合、予約済み読み取りスループットと予約済み書き込みスループットは 0 に設定する必要があり、高性能インスタンスのデータテーブルの場合は 0 以外の値に設定できます。 reservedThroughput := new(tablestore.ReservedThroughput) reservedThroughput.Readcap = 0 reservedThroughput.Writecap = 0 // サーバー側の暗号化機能を有効にし、手順 2 で KMS コンソールで作成した CMK をデータ暗号化に使用します。 sseSpec := new(tablestore.SSESpecification) sseSpec.SetEnable(true) sseSpec.SetKeyType(tablestore.SSE_BYOK) // keyId パラメータを、手順 2 で KMS コンソールで作成したソフトウェア保護キーの ID に設定します。 sseSpec.SetKeyId("key-hzz65****************") // roleArn パラメータを、手順 3 で記録した RAM ロールの 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 は、キー管理、データ暗号化、およびシークレット管理のためのエンドツーエンドの serviceplatform です。KMS は、データを暗号化および保護し、シークレットを管理するためのシンプルで信頼性が高く、安全で標準に準拠した機能を提供します。詳細については、KMS とはを参照してください。
暗号化テーブルを作成した後、DescribeTable 操作を呼び出して、データテーブルの暗号化設定をクエリできます。