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

Tablestore:データ暗号化

最終更新日:Dec 28, 2024

Tablestoreは、データがディスクに保存される際にデータを暗号化するデータ暗号化機能を提供します。これにより、テーブルデータのセキュリティが確保されます。データテーブルを作成する際に、データテーブルの暗号化を設定できます。

背景情報

デフォルトでは、データテーブルの作成時にデータテーブルのデータ暗号化は無効になっています。データテーブルのデータ暗号化を有効にするには、データテーブルの作成時に暗号化関連のパラメータを設定する必要があります。Tablestoreは、Key Management Service (KMS)キーに基づく暗号化とBring Your Own Key (BYOK)に基づく暗号化の2つの暗号化方式をサポートしています。どちらの方法でも、KMSからキーを取得する必要があります。ビジネス要件に基づいて方法を選択できます。

KMSは、ワンストップの鍵管理およびデータ暗号化プラットフォームであり、ワンストップのシークレット管理プラットフォームです。KMSは、シンプルで信頼性が高く、安全で、コンプライアンスに準拠したデータ暗号化保護とシークレット管理機能を提供します。KMSは、暗号化インフラストラクチャ、データ暗号化サービス、およびシークレット管理サービスの調達、運用保守、および研究開発のコストを削減するのに役立ちます。これにより、ビジネスアプリケーションの開発に集中できます。詳細については、KMSとは を参照してください。

暗号化方式

使用方法

説明

KMSキーベースの暗号化

  • Tablestoreコンソール

  • Tablestore SDK

Tablestoreは、デフォルトのKMS管理のカスタマーマスターキー (CMK) を使用してデータを暗号化し、データの読み取り時に自動的に復号化します。KMSキーベースの暗号化を初めて使用する場合、TablestoreはKMSコンソールにKMS管理のCMKを作成します。KMSインスタンスを購入する必要はありません。

BYOKベースの暗号化

  • Tablestoreコンソール

  • Tablestore SDK

BYOKマテリアルを使用してKMSコンソールでカスタムキーを生成した後、Tablestoreはカスタムキーに基づいてデータを暗号化できます。使用する暗号化キーを管理できます。

シナリオ

セキュリティまたはコンプライアンス要件の高いシナリオでデータ暗号化機能を有効にできます。

使用上の注意

  • データ暗号化機能は、データテーブルの作成時にのみ設定できます。

  • データ暗号化機能を有効にした後、機能を無効にすることはできません。注意して進めてください。

  • データ暗号化機能は、中国 (杭州)、中国 (上海)、中国 (深圳)、中国 (北京)、中国 (張家口)、中国 (ウランチャブ)、中国 (香港)、シンガポール、インドネシア (ジャカルタ)、米国 (シリコンバレー)、米国 (バージニア)、英国 (ロンドン)、日本 (東京)、およびドイツ (フランクフルト) リージョンでご利用いただけます。

データ暗号化機能を有効にする

Tablestoreコンソールでデータ暗号化機能を有効にする

Tablestoreコンソールでデータテーブルを作成する場合、データテーブルのKMSキーベースの暗号化またはBYOKベースの暗号化を有効にできます。

KMSキーベースの暗号化

  1. Tablestoreコンソールにログインします。

  2. 上部のナビゲーションバーで、リージョンを選択します。

  3. 概要ページで、管理するインスタンスの名前をクリックするか、インスタンスの操作列のインスタンスの管理をクリックします。

  4. インスタンスの詳細 タブで、テーブルの作成 をクリックします。

  5. テーブルの作成 ダイアログボックスで、パラメーターを構成します。

    説明

    パラメータの詳細については、Tablestoreコンソールでワイドカラムモデルを使用するトピックの「手順3:データテーブルを作成する」セクションを参照してください。

    1. テーブル名、プライマリキー、更新を許可するなどのパラメータを設定します。

    2. 暗号化を有効にし、暗号化タイプ パラメーターでKMS の CMK を選択します。

    kms_1.jpg

  6. OK をクリックします。

    データテーブルの作成後、テーブル名をクリックします。基本情報タブのテーブルの管理ページで、暗号化パラメーターの値がはい - KMS の CMKであることを確認します。これは、データテーブルに対してデータ暗号化機能が有効になっていることを示します。

    kms_2.jpg

BYOKベースの暗号化

  1. KMSコンソールでソフトウェア保護キーを作成します。詳細については、鍵管理の概要トピックの「ソフトウェア保護キー」セクションを参照してください。

  2. Resource Access Management (RAM) ロールを作成し、RAMロールに権限を付与します。

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

      ロール名をAliyunOTSAccessingKMSに設定します。

    2. KMSの暗号化と復号化の権限を含むカスタムポリシーを作成します。カスタムポリシーの作成方法については、カスタムポリシーを作成するトピックの「JSONタブでカスタムポリシーを作成する」セクションを参照してください。

      ポリシー名をotskmspolicytestに設定します。ポリシーの例:

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

      承認が完了したら、RAMロールのAlibaba Cloudリソース名 (ARN) を記録します。ARNはRAMロールのIDを示します。

      image..png

    4. RAMロールの信頼ポリシーを変更します。詳細については、RAMロールの信頼ポリシーを編集するを参照してください。

      信頼ポリシーの例:

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "ots.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }
  3. データテーブルを作成し、暗号化関連のパラメータを設定します。

    1. Tablestoreコンソールにログインします。

    2. 上部のナビゲーションバーで、リージョンを選択します。

    3. 概要ページで、管理するインスタンスの名前をクリックするか、インスタンスの操作列のインスタンスの管理をクリックします。

    4. インスタンスの詳細タブで、テーブルの作成をクリックします。

    5. テーブルの作成 ダイアログボックスで、パラメーターを構成します。

      説明

      パラメータの詳細については、Tablestoreコンソールでワイドカラムモデルを使用するトピックの「手順3:データテーブルを作成する」セクションを参照してください。

      1. テーブル名、プライマリキー、更新を許可するなどのパラメータを設定します。

      2. 暗号化を有効にし、暗号化の種類パラメーターでBYOK ベースのキーを選択します。

        BYOK_1.jpg

    6. OK をクリックします。

      データテーブルの作成後、テーブル名をクリックします。基本情報タブのテーブルの管理ページで、暗号化パラメーターの値がはい (BYOK ベースのキー)であることを確認します。これは、データテーブルに対してデータ暗号化機能が有効になっていることを示します。

      byok_2.jpg

Tablestore SDKを使用してデータ暗号化機能を有効にする

Tablestore SDKを使用してデータテーブルを作成する場合、データテーブルのKMSキーベースの暗号化またはBYOKベースの暗号化を有効にできます。Tablestore SDK for Javaを使用して、データテーブルの暗号化を設定できます。

KMSキーベースの暗号化

データテーブルのKMSキーベースの暗号化を有効にするには、KMSをアクティブ化する必要があります。ただし、KMSインスタンスを作成する必要はありません。データテーブルを作成した後、DescribeTableオペレーションを呼び出して、テーブルの暗号化設定をクエリできます。

次のサンプルコードは、データテーブルの作成時にデータテーブルのKMSキーベースの暗号化を有効にする方法を示しています。データテーブルのプライマリキーはpkで、STRING型です。属性列の値については、最新バージョンのデータのみが保持され、データは期限切れになりません。

private static void createTable(SyncClient client) {
    // データテーブルの名前を指定します。
    TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
    // データ暗号化を設定する場合、CreateTableリクエストで暗号化関連のパラメータを設定します。KMSキーベースの暗号化とBYOKベースの暗号化という以下の暗号化方式がサポートされています。この例では、KMSキーベースの暗号化が有効になっています。
    SSESpecification sseKms = new SSESpecification(true, SSEKeyType.SSE_KMS_SERVICE);
    // データテーブルにプライマリキー列を追加します。
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk", PrimaryKeyType.STRING)); 
    // データの有効期限を指定します。-1の値は、データが期限切れにならないことを指定します。単位:秒。インデックステーブルを作成するデータテーブルの場合、timeToLiveパラメータを-1に設定する必要があります。
    int timeToLive = -1; 
    // 各列に保持できるデータバージョンの最大数を指定します。1の値は、各列の最新バージョンのデータのみが保持されることを指定します。インデックステーブルを作成するデータテーブルの場合、maxVersionsパラメータを1に設定する必要があります。
    int maxVersions = 1; 
    TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
    CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
    // 予約済み読み込みスループットと予約済み書き込みスループットを指定します。キャパシティインスタンスのデータテーブルの場合は値を0に設定する必要があり、高パフォーマンスインスタンスのデータテーブルの場合は0以外の値に設定できます。
    request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0))); 
    request.setSseSpecification(sseKms);
    client.createTable(request);
}

BYOKベースの暗号化

  1. KMSコンソールでソフトウェア保護キーを作成します。詳細については、鍵管理の概要トピックの「ソフトウェア保護キー」セクションを参照してください。

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

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

      ロール名をAliyunOTSAccessingKMSに設定します。

    2. KMSの暗号化と復号化の権限を含むカスタムポリシーを作成します。カスタムポリシーの作成方法については、カスタムポリシーを作成するトピックの「JSONタブでカスタムポリシーを作成する」セクションを参照してください。

      ポリシー名をotskmspolicytestに設定します。ポリシーの例:

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

      承認が完了したら、RAMロールのARNを記録します。ARNはRAMロールのIDを示します。

      image..png

    4. RAMロールの信頼ポリシーを変更します。詳細については、RAMロールの信頼ポリシーを編集するを参照してください。

      信頼ポリシーの例:

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "ots.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }
  3. データテーブルを作成し、暗号化関連のパラメータを設定します。

    データテーブルを作成し、BYOKベースの暗号化を有効にします。データテーブルを作成した後、DescribeTableオペレーションを呼び出して、テーブルの暗号化設定をクエリできます。

    次のサンプルコードは、データテーブルの作成時にデータテーブルのBYOKベースの暗号化を有効にする方法を示しています。データテーブルのプライマリキーはpkで、STRING型です。属性列の値については、最新バージョンのデータのみが保持され、データは期限切れになりません。

    private static void createTable(SyncClient client) {
        // データテーブルの名前を指定します。
        TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
        // データ暗号化を設定する場合、CreateTableリクエストで暗号化関連のパラメータを設定します。KMSキーベースの暗号化とBYOKベースの暗号化という以下の暗号化方式がサポートされています。
        // keyIdパラメータを、手順1でKMSコンソールに作成したソフトウェア保護キーのIDに設定します。
        String keyId="key-hzz65****************";
        // roleArnパラメータを、手順2で記録したRAMロールのARNに設定します。
        String roleArn="acs:ram::****************:role/aliyunotsaccessingkms";
        // この例では、BYOKベースの暗号化が有効になっています。
        // keyIdパラメータをKMSのカスタムキーのIDに設定します。roleArnパラメータを使用するRAMロールのARNに設定します。RAMロールを作成し、RAMロールのARNを記録する必要があります。
        SSESpecification sseByok = new SSESpecification(true, SSEKeyType.SSE_BYOK, keyId, roleArn);
        // データテーブルにプライマリキー列を追加します。
        tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk", PrimaryKeyType.STRING)); 
        // データの有効期限を指定します。-1の値は、データが期限切れにならないことを指定します。単位:秒。インデックステーブルを作成するデータテーブルの場合、timeToLiveパラメータを-1に設定する必要があります。
        int timeToLive = -1; 
        // 各列に保持できるデータバージョンの最大数を指定します。1の値は、各列の最新バージョンのデータのみが保持されることを指定します。インデックステーブルを作成するデータテーブルの場合、maxVersionsパラメータを1に設定する必要があります。
        int maxVersions = 1; 
        TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
        CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
        request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0))); // 予約済み読み込みスループットと予約済み書き込みスループットを指定します。キャパシティインスタンスのデータテーブルの場合は値を0に設定する必要があり、高パフォーマンスインスタンスのデータテーブルの場合は0以外の値に設定できます。
        request.setSseSpecification(sseByok);
        client.createTable(request);
    }

請求

データ暗号化料金はKMSによって課金されます。詳細については、請求を参照してください。