すべてのプロダクト
Search
ドキュメントセンター

Tablestore:暗号化テーブルを作成する

最終更新日:Dec 28, 2024

このトピックでは、パラメータとサンプルコードを使用して、Go SDK for Tablestore を使用して暗号化データテーブルを作成し、暗号化された方法でデータを保存する方法について説明します。Tablestore は、Key Management Service (KMS) のデフォルトのサービスカスタマーマスターキー (CMK) に基づく暗号化と Bring Your Own Key (BYOK) に基づく暗号化の 2 つの暗号化方法をサポートしています。

前提条件

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 に基づく暗号化

  1. KMS をアクティブ化します。詳細については、KMS インスタンスの購入と有効化を参照してください。

  2. KMS コンソールでソフトウェア保護キーを作成します。詳細については、キーの概要を参照してください。

  3. RAM ロールを作成し、RAM ロールに権限を付与します。

    1. RAM ロールを作成します。詳細については、信頼できる Alibaba Cloud アカウントの RAM ロールの作成を参照してください。

      RAM ロールの名前を指定します。この例では、RAM ロール名 AliyunOTSAccessingKMS を使用します。

    2. KMS の暗号化と復号化の権限を含むカスタムポリシーを作成します。詳細については、JSON タブでのカスタムポリシーの作成を参照してください。

      カスタムポリシーの名前を指定します。この例では、ポリシー名 otskmspolicytest を使用します。サンプルポリシー:

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "kms:Decrypt",
                      "kms:GenerateDataKey"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
    3. otskmspolicytest ポリシーを AliyunOTSAccessingKMS RAM ロールにアタッチして、RAM ロールに KMS を使用してデータを暗号化および復号化する権限を付与します。詳細については、RAM ロールへの権限の付与を参照してください。

      承認が完了したら、ロールの ARN を記録します。ARN は、引き受けるロールの ID を示します。次の図は ARN を示しています。

      image

    4. RAM ロールの信頼ポリシーを変更します。詳細については、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)
        // データテーブル内のデータの 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 操作を呼び出して、データテーブルの暗号化設定をクエリできます。