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

AnalyticDB:Basic Edition の Apache Spark 機密エンジンの使用

最終更新日:Jan 15, 2026

AnalyticDB for MySQL の Basic Edition の Apache Spark 常時暗号化コンピュートエンジンは、機密データを暗号化し、暗号文として転送・保存します。キーの所有者のみがデータを復号でき、データ漏洩を防ぎます。本 Topic では、ApsaraDB RDS for MySQL を例に、Basic Edition の Apache Spark 常時暗号化コンピュートエンジンを使用してデータを暗号化し、暗号化されたデータに対して計算と分析を行い、計算結果を復号する方法について説明します。

前提条件

  • AnalyticDB for MySQL の Enterprise Edition、Basic Edition、または Data Lakehouse Edition のクラスターが作成されていること。

  • AnalyticDB for MySQL クラスター用のデータベースアカウントが作成されていること。

  • AliyunADBFullAccess、AliyunADBSparkProcessingDataRole、および AnalyticDB for MySQL のデータベースとテーブルに対する読み取り/書き込み権限が RAM ユーザーに付与されていること。詳細については、「アカウントの権限付与」をご参照ください。

  • クライアントツールを実行するために、Java 8 開発環境がインストールされていること。本 Topic では、Linux オペレーティングシステムを実行する ECS インスタンスを例として使用します。

注意事項

  • adb-crypto-tool クライアントツールは、MySQL および PostgreSQL データベースに保存されているデータのみの暗号化または復号をサポートします。

    説明

    MySQL または PostgreSQL データベースは、ApsaraDB データベース、自己管理データベース、またはサードパーティのクラウドデータベースのいずれでもかまいません。

  • 機密エンジンは、Decimal データ型またはネストされたデータ型をサポートしていません。代わりに Float または Double データ型を使用できます。

  • PostgreSQL データベースの場合、機密エンジンは Char(n) データ型の末尾のスペースを自動的に削除しません。代わりに Varchar(n) 型を使用してください。

データ準備

本 Topic では、adb という名前の ApsaraDB RDS for MySQL データベースを使用します。データベース内に customer という名前のテーブルが作成されます。次の例は、ステートメントを示しています:

CREATE DATABASE IF NOT EXIST adb;
CREATE TABLE IF NOT EXISTS adb.customer(
id int,
name varchar(1023),
address varchar(1023),
age int
);

次のステートメントを使用して、customer テーブルにデータを挿入します:

INSERT INTO customer (id,name,address,age) VALUES('1', 'james', 'beijing', '10');
INSERT INTO customer (id,name,address,age) VALUES('2', 'bond', 'beijing', '15');
INSERT INTO customer (id,name,address,age) VALUES('3', 'jack', 'shanghai', '20');
INSERT INTO customer (id,name,address,age) VALUES('4', 'lucy', 'hangzhou', '25');
INSERT INTO customer (id,name,address,age) VALUES('5', 'tom', 'qingdao','30');

手順

  1. ステップ 1: 暗号化/復号クライアントのインストールadb-crypto-tool クライアントをダウンロードしてインストールできます。

  2. ステップ 2: データの暗号化とアップロード。クライアントツールを使用してプレーンテキストデータを暗号文に変換し、暗号文を Object Storage Service (OSS) にアップロードできます。

  3. ステップ 3: 暗号文に対する SQL 計算の実行AnalyticDB for MySQL の Apache Spark 常時暗号化コンピュートエンジンの SQL ウィンドウで暗号文を計算できます。計算結果は暗号文として OSS に保存されます。

  4. ステップ 4: 暗号文の計算結果のダウンロードと復号。暗号文の計算結果をオンプレミスデバイスにダウンロードできます。クライアントツールを使用してデータを復号すると、復号されたデータは自動的にデータベースのプレーンテキストテーブルに挿入されます。

暗号化/復号クライアントのインストール

  1. クライアントツールをダウンロードします: adb-crypto-tool-1.0.4.zip

  2. adb-crypto-tool-1.0.4.zip パッケージを解凍します。

    unzip adb-crypto-tool-1.0.4.zip

    パッケージを解凍すると、次の 3 つのファイルとフォルダが作成されます:

    • cryptoTool: 暗号化/復号ツールのエントリポイント。

      説明

      cryptoTool は bash 環境に依存します。Windows システムでは、Windows Subsystem for Linux (WSL) などのツールを使用して実行できます。

    • demo.json: サンプルの設定ファイル。

    • dist: 暗号化/復号ツールの依存パッケージ。

データの暗号化とアップロード

  1. 暗号化設定ファイルを準備します。demo.json ファイルに基づいて設定ファイルを作成するか、demo.json ファイルの tablejdbcUrlusernamepassword パラメーターを直接変更できます。本 Topic では、encryption_config.json という名前の新しい設定ファイルを例として使用します。次の例は、設定を示しています:

    {
      "dataDir": "file:///tmp",
      "table": [
        "customer"
      ],
      "encAlgo": "AES_128_GCM",
      "mek": "00112233445566778899aabbccdd****",
      "jdbcUrl": "jdbc:mysql://rm-bp1487t8613zz****.mysql.rds.aliyuncs.com:3306/adb",
      "username": "demo_user",
      "password": "demo_password",
      "saveMode": "Overwrite",
      "format":"EncBlocksSource"
    }

    次の表にパラメーターを示します。

    パラメーター

    説明

    dataDir

    暗号文データセットを保存するローカルパス。

    table

    暗号化するテーブルの名前。本 Topic では customer を例として使用します。

    encAlgo

    暗号文の暗号化/復号アルゴリズム。AES_128_GCM のみがサポートされています。

    mek

    データ暗号化キー (DEK) を暗号化するために使用されるマスター暗号化キー (MEK)。詳細については、「概要」 Topic の「キー」セクションをご参照ください。

    MEK は 16 バイトの 16 進数文字列である必要があります。OpenSSL ツールを使用してキーを生成できます。本 Topic では、00112233445566778899aabbccdd**** を例として使用します。

    警告
    • MEK は暗号化されたデータにアクセスするためのルート認証情報です。MEK を紛失すると、既存のデータにアクセスできなくなります。MEK は安全に保管してください。

    • 機密エンジンは MEK を生成またはバックアップしません。必要なフォーマットで MEK を提供する必要があります。

    jdbcUrl

    データベースの接続アドレスと名前。MySQL および PostgreSQL データベースのみがサポートされています。接続アドレスには、次のいずれかのフォーマットを使用します:

    • MySQL データベース: jdbc:mysql://ip:port/database_name

    • PostgreSQL データベース: jdbc:postgresql://ip:port/database_name

    本 Topic では、jdbc:mysql://rm-bp1487t8613zz****.mysql.rds.aliyuncs.com:3306/adb を例として使用します。

    userName

    データベースアカウント。

    password

    アカウントのパスワード。

    saveMode

    暗号化ファイルの宛先パスが既に存在する場合に、暗号文データセットを保存するために使用されるモード。次のモードがサポートされています:

    • Append: データを追記します。

    • ErrorIfExists: 宛先が存在する場合、エラーを報告して終了します。エラーの詳細はログで確認できます。

    • Ignore: 宛先が存在する場合、データの書き込みをスキップします。エラーの詳細はログで確認できません。

    • Overwrite: 既存のデータを上書きします。

    format

    暗号文のフォーマット。EncBlocksSource フォーマットのみがサポートされています。

  1. クライアントツールを実行して、adb データベースの customer テーブルのデータを暗号化します。暗号化されたデータセットは、設定ファイルの dataDir パラメーターで指定されたパスに保存されます。

    ./cryptoTool encrypt encryption_config.json
  2. 暗号化されたデータセットを含む customer フォルダを OSS にアップロードします。本 Topic では、パス oss://testBucketName/adb/Spark/customer を例として使用します。詳細については、「簡易アップロード」をご参照ください。

暗号文データに対する SQL クエリの実行

  1. AnalyticDB for MySQL コンソールにログインします。コンソールの左上隅でリージョンを選択します。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。管理するクラスターを見つけて、クラスター ID をクリックします。

  2. 左側のナビゲーションウィンドウで、[ジョブ開発] > [SQL 開発] を選択します。

  3. [SQLConsole] ウィンドウで、Spark エンジンとジョブ リソースグループを選択します。

  4. 次のステートメントを実行して、暗号文に対して SQL 計算を実行します。

    1. 機密コンピューティングを有効にし、カスタマーマスターキーを設定します。

      -- 機密コンピューティングを有効にします。
      set spark.adb.tee.enabled=true;
      
      -- カスタマーマスターキーを設定します。このキーは、暗号化設定ファイルの MEK と同じである必要があります。
      set spark.adb.tee.encryption.key=00112233445566778899aabbccdd****;
      
      -- 暗号文データと計算結果を保存するためのデータベースを作成します。
      CREATE DATABASE IF NOT EXISTS test_db;
    2. 機密エンジンを使用して、customer という名前の外部テーブルを作成します。LOCATION パラメーターは、暗号文データセットフォルダの OSS パスを指定します。本 Topic では、oss://testBucketName/adb/Spark/customer を例として使用します。

      set spark.adb.tee.enabled=true;
      set spark.adb.tee.encryption.key=00112233445566778899aabbccdd****;
      CREATE TABLE IF NOT EXISTS test_db.customer 
      USING EncBlocksSource 
      LOCATION  'oss://testBucketName/adb/Spark/customer';
    3. customer_output という名前の外部テーブルを作成します。customer テーブルからの SQL 計算結果を customer_output 外部テーブルに書き込みます。customer_output 外部テーブルのデータは oss://testBucketName/adb/Spark/customer_output に保存されます。

      set spark.adb.tee.enabled=true;
      set spark.adb.tee.encryption.key=00112233445566778899aabbccdd****;
      CREATE TABLE IF NOT EXISTS test_db.customer_output
      USING EncBlocksSource
      LOCATION 'oss://testBucketName/adb/Spark/customer_output'
      AS
      SELECT *
      FROM test_db.customer
      WHERE id = 1;

暗号文の結果のダウンロードと復号

  1. oss://testBucketName/adb/Spark/customer_output パスから暗号文の計算結果をローカルデバイスにダウンロードします。詳細については、「オブジェクトのダウンロード」をご参照ください。

  2. 復号設定ファイルを準備します。本 Topic では、decryption_config.json という名前の新しい設定ファイルを例として使用します。次の例は、設定を示しています。

    {
      "dataDir": "file:///tmp",
      "table": [
        "customer_output"
      ],
      "encAlgo": "AES_128_GCM",
      "outTblPrefix": "abc_",
      "mek": "00112233445566778899aabbccdd****",
      "jdbcUrl": "jdbc:mysql://rm-bp1487t8613zz****.mysql.rds.aliyuncs.com:3306/adb",
      "username": "demo_user",
      "password": "demo_password",
      "saveMode": "Overwrite",
      "format":"EncBlocksSource"
    }

    次の表にパラメーターを示します:

    パラメーター

    説明

    dataDir

    暗号文データセットを保存するローカルパス。

    table

    暗号文データセットのフォルダ名。

    encAlgo

    暗号文の暗号化/復号アルゴリズム。AES_128_GCM のみがサポートされています。

    outTblPrefix

    復号後のデータベース内のテーブル名のプレフィックス。宛先テーブル名は、プレフィックスと暗号文データセットのフォルダ名で構成されます。

    mek

    データ暗号化キー (DEK) を暗号化するために使用されるマスター暗号化キー (MEK)。詳細については、「概要」 Topic の「キー」セクションをご参照ください。

    MEK は 16 バイトの 16 進数文字列である必要があります。OpenSSL ツールを使用してキーを生成できます。本 Topic では、00112233445566778899aabbccdd**** を例として使用します。

    警告
    • MEK は暗号化されたデータにアクセスするためのルート認証情報です。MEK を紛失すると、既存のデータにアクセスできなくなります。MEK は安全に保管してください。

    • 機密エンジンは MEK を生成またはバックアップしません。必要なフォーマットで MEK を提供する必要があります。

    jdbcUrl

    データベースの接続アドレスと名前。MySQL および PostgreSQL データベースのみがサポートされています。接続アドレスには、次のいずれかのフォーマットを使用します:

    • MySQL データベース: jdbc:mysql://ip:port/database_name

    • PostgreSQL データベース: jdbc:postgresql://ip:port/database_name

    本 Topic では、jdbc:mysql://rm-bp1487t8613zz****.mysql.rds.aliyuncs.com:3306/adb を例として使用します。

    userName

    データベースアカウント。

    password

    アカウントのパスワード。

    saveMode

    復号されたデータが保存される宛先データベースが既に存在する場合に、プレーンテキストデータセットを生成するために使用されるモード。次のモードがサポートされています:

    • Append: データを追記します。

    • ErrorIfExists: 宛先が存在する場合、エラーを報告して終了します。エラーの詳細はログで確認できます。

    • Ignore: 宛先が存在する場合、データの書き込みをスキップします。エラーの詳細はログで確認できません。

    • Overwrite: 既存のデータを上書きします。

    format

    暗号文のフォーマット。EncBlocksSource フォーマットのみがサポートされています。

  3. クライアントを実行してデータを復号します。復号されたデータは、adb ApsaraDB RDS for MySQL データベースに自動的に挿入されます。宛先テーブルの名前は、`outTblePrefix` パラメーターと暗号化されたデータセットのフォルダ名によって決まります。この例では、テーブル名は adb_customer_output です。

    ./cryptoTool decrypt decryption_config.json
  4. ApsaraDB RDS for MySQL データベースで復号されたデータを表示します。計算結果はプレーンテキストで表示されます。

    SELECT * FROM adb_customer_output;

    結果の例:

    +--------+----------+----------+----------+
    |  id    |   name   |  address |   age    |
    +--------+----------+----------+----------+
    |   1    |  james   |  beijing |   10     |
    +--------+----------+----------+----------+