このトピックでは、Hologres でデータを暗号化する方法について説明します。また、Hologres でのデータ暗号化のメカニズム、制限、および手順についても説明します。
背景
Key Management Service (KMS) は、暗号鍵の作成、保存、管理を可能にするクラウドサービスです。ストレージと転送の両方で暗号化を保証することで、ユーザーが機密データを保護するのに役立ちます。
Hologres は KMS と統合して、保存データを暗号化します。暗号化されたデータを復元するには、対応するキーが必要です。この統合により、外部の脅威に対する堅牢なデータ保護が提供され、企業のガバナンスとセキュリティコンプライアンスの要求が満たされます。データ暗号化を有効にすると、暗号化/復号操作によりクエリと書き込みのパフォーマンスに影響が及び、クエリの特性に応じて 20% から 40% のパフォーマンス低下が見込まれます。
制限事項
Hologres V1.1 以降のみがストレージのデータ暗号化をサポートしています。Hologres インスタンスのバージョンが V1.1 より前の場合は、Hologres コンソールで Hologres インスタンスを手動でスペックアップするか、Hologres DingTalk グループに参加してインスタンスのスペックアップを申請してください。Hologres インスタンスを手動でスペックアップする方法の詳細については、「インスタンスのスペックアップ」をご参照ください。Hologres DingTalk グループへの参加方法の詳細については、「Hologres のオンラインサポートの利用」をご参照ください。
Hologres インスタンスのバージョンが V1.3.31 より前の場合、ストレージのデータ暗号化を使用する前にバックエンド構成を追加する必要があります。Hologres インスタンスのバージョンが V1.3.31 以降の場合、バックエンド構成を追加する必要はありません。ストレージのデータ暗号化を使用する場合は、Hologres インスタンスを V1.3.31 以降にスペックアップすることをお勧めします。詳細については、「インスタンスのスペックアップ」をご参照ください。
KMS でのカスタマーマスターキー (CMK) の無効化や削除などの操作は、Hologres でのデータの暗号化または復号に影響を与える可能性があります。Hologres は過去の構成をキャッシュします。KMS での操作は 24 時間以内に遅れて有効になります。
ストレージのデータ暗号化が有効になっている場合にのみ、ストレージのデータを暗号化できます。この機能が有効になる前に作成されたテーブルのデータは、ストレージ用に暗号化できません。
データ暗号化機能が有効になった後でも、データの読み取りと書き込みのために MaxCompute に Hologres 外部テーブルを作成できます。
データ暗号化機能が有効になった後、次の SQL 文を使用してデータベースのデータ暗号化を無効にできます。この機能が無効になる前に作成されたテーブルのデータは引き続き暗号化されます。この機能が無効になった後に作成されたテーブルのデータのみが、ストレージ用に暗号化できなくなります。
ALTER DATABASE <database_name> set hg_experimental_encryption_options='';データ暗号化機能が有効になった後、テーブルの KMS キーが無効または不正である場合、そのテーブルへのデータの読み取りまたは書き込みはできません。
Hologres V2.0 以降では、テーブルごとにデータ暗号化ルールを構成できます。テーブルごとに異なる KMS キーを構成できます。
データ暗号化機能は、列指向テーブルまたは行列表ストレージモードの列指向テーブルに対してのみ有効にできます。データ暗号化機能が有効になった後でも、データの読み取りと書き込みのために MaxCompute に Hologres 外部テーブルを作成できます。列指向テーブルまたは行列表ストレージモードの列指向テーブルのデータのみが暗号化できます。
データ暗号化のメカニズム
Hologres は、次のデータ暗号化メカニズムに基づいて、KMS で管理されるキーを使用してデータを暗号化および復号します。
Hologres は KMS のキーを使用してデータを暗号化または復号します。データ暗号化機能は、Hologres インスタンスや特定のテーブルではなく、データベースに対して有効になります。データ暗号化機能を使用する前に、Hologres インスタンスが存在するリージョンで KMS が有効化されていることを確認してください。
KMS はキーを生成および管理し、キーのセキュリティを保証します。
Hologres は、AES-256、AES-CTR、RC4、および SM4 の暗号化アルゴリズムをサポートしています。
Hologres では、Bring Your Own Key (BYOK) 機能のみを使用してデータを暗号化または復号できます。CMK を作成してデータを暗号化するために、次のタイプのマテリアルを使用できます: CMK を作成するときに KMS によって生成されるキーマテリアル、およびインポートされたキーマテリアル。
KMS で CMK を作成し、この CMK を使用して Hologres のデータベース内のデータを暗号化できます。KMS で CMK を作成する方法の詳細については、「CMK の作成」をご参照ください。
データを読み書きするとき、Hologres は KMS API 操作を呼び出してキー情報を取得します。デフォルトでは、キー情報は 24 時間保持されます。その結果、データ暗号化機能を使用すると KMS の使用料金が発生します。KMS の課金の詳細については、「KMS 1.0 の課金」をご参照ください。
手順
カスタムポリシーを作成します。
Resource Access Management (RAM) コンソールにログインします。左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。[ポリシー] ページで、[ポリシーの作成] をクリックします。

[ポリシーの作成] ページで、[JSON] をクリックします。JSON タブで、コードエディタに次のスクリプトを入力し、[名前] を AliyunHologresEncryptionDefaultRolePolicy に設定します。

{ "Version": "1", "Statement": [ { "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey" ], "Resource": "acs:kms:*:*:*/*", "Effect": "Allow" } ] }[OK] をクリックします。カスタムポリシーが作成されます。
RAM ロールを作成し、RAM ロールに権限を付与します。
RAM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
[ロール] ページで、[ロールの作成] をクリックします。[ロールの作成] ページで、[プリンシパルタイプ] を [クラウドサービス] に、[プリンシパル名] を [Hologres] に設定します。
[OK] をクリックします。ダイアログで、[ロール名] フィールドに
AliyunHologresEncryptionDefaultRoleを入力し、[OK] をクリックします。
ロールの詳細ページで、[権限の付与] をクリックします。
[権限の付与] パネルで、[リソーススコープ] を [アカウント] に設定します。[ポリシー] には、ステップ 1 で作成したカスタムポリシー
AliyunHologresEncryptionDefaultRolePolicyを選択します。
[権限の付与] をクリックします。
ロールの詳細ページで、[信頼ポリシー] タブをクリックして、信頼ポリシーの設定を確認します。
CMK を作成します。
詳細については、「キーの概要」をご参照ください。
重要Hologres は、Aliyun_AES_256 タイプの対称キーのみをサポートしています。
データベースのデータ暗号化を有効にします。
データ暗号化を有効にするデータベースにログインします。データベースへのログイン方法の詳細については、「データベースへのログイン」をご参照ください。
[アドホッククエリ] タブで、[インスタンス] ドロップダウンリストからデータベースが属するインスタンスを選択し、[データベース] ドロップダウンリストからデータベースを選択します。SQL エディターに次の文を入力し、[実行] をクリックします。
この SQL 文は、データベースのデータ暗号化を有効にするために使用されます。
ALTER DATABASE <db_name> SET hg_experimental_encryption_options='<encryption_type>,<cmk_id>,<ram_role>,<uid>';次の表に、上記の構文のパラメーターを説明します。
パラメーター
説明
db_name
データ暗号化を有効にするデータベースの名前。
encryption_type
データの暗号化に使用する暗号化アルゴリズム。有効な値: AES-256、AES-CTR、および RC4。
cmk_id
CMK の ID。KMS コンソールの CMK 詳細ページで CMK の ID を取得できます。
ram_role
Hologres に割り当てられている RAM ロール。
uid
Alibaba Cloud アカウントの ID。詳細については、「アカウント ID」をご参照ください。
次のサンプル文は、データベースのデータ暗号化を有効にし、データベースにテーブルを作成してデータを書き込み、その後 Hologres でテーブルのデータをクエリする方法を示しています。
データベースのデータ暗号化を有効にします。
ALTER DATABASE hoxxxx set hg_experimental_encryption_options= 'AES256,623c26ee-xxxx-xxxx-xxxx-91d323cc4855,AliyunHologresEncryptionDefaultRole,187xxxxxxxxxxxxx';データベースにテーブルを作成し、テーブルにデータを書き込みます。
DROP TABLE IF EXISTS a; CREATE TABLE a(id int); INSERT INTO a values(1); SELECT hg_admin_command('flush'); -- この文はテスト専用です。この文により、クエリ結果がすぐに表示されます。データをクエリします。
SELECT * FROM a;次の図にクエリ結果を示します。

KMS を無効にして Hologres インスタンスを再起動すると、テーブル a のデータをクエリするときにエラーが報告されます。KMS が無効になった後で Hologres インスタンスを再起動しない場合、24 時間以内はテーブル a のデータをクエリできます。24 時間が経過すると、テーブル a のデータをクエリするときにエラーが報告されます。
テーブルのデータ暗号化の構成
Hologres V2.0 以降では、テーブルが属するデータベースのデータ暗号化を有効にした後、テーブルのデータ暗号化ルールを構成できます。これにより、異なるテーブルのデータを暗号化するために異なる KMS キーを使用できます。
テーブルのデータ暗号化ルールの構成
使用上の注意:
テーブルにデータ暗号化ルールが構成されていない場合、システムは
hg_experimental_encryption_optionsで指定されたデータ暗号化ルールを使用してテーブル内のデータを暗号化します。テーブルのデータ暗号化ルールは、テーブルを作成するときにのみ構成できます。
構文:
CALL SET_TABLE_PROPERTY('<table_name>', 'encryption_options', '<encryption_type>,<cmk_id>,<ram_role>,<uid>');次の表に、上記の構文のパラメーターを説明します。
パラメーター
説明
table_name
データ暗号化ルールを構成するテーブルの名前。
encryption_type
データの暗号化に使用する暗号化アルゴリズム。有効な値: AES-256、AES-CTR、および RC4。
cmk_id
CMK の ID。KMS コンソールの CMK 詳細ページで CMK の ID を取得できます。
ram_role
Hologres に割り当てられている RAM ロール。
uid
Alibaba Cloud アカウントの ID。詳細については、「アカウント ID」をご参照ください。
例:
lineitem という名前のテーブルを作成し、テーブルに AES-256 暗号化アルゴリズムと CMK 623c26ee-xxxx-xxxx-xxxx-91d323cc4855 を構成します。
BEGIN; CREATE TABLE LINEITEM ( L_ORDERKEY BIGINT NOT NULL, L_PARTKEY INT NOT NULL, L_SUPPKEY INT NOT NULL, L_LINENUMBER INT NOT NULL, L_QUANTITY DECIMAL(15,2) NOT NULL, L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL, L_DISCOUNT DECIMAL(15,2) NOT NULL, L_TAX DECIMAL(15,2) NOT NULL, L_RETURNFLAG TEXT NOT NULL, L_LINESTATUS TEXT NOT NULL, L_SHIPDATE TIMESTAMPTZ NOT NULL, L_COMMITDATE TIMESTAMPTZ NOT NULL, L_RECEIPTDATE TIMESTAMPTZ NOT NULL, L_SHIPINSTRUCT TEXT NOT NULL, L_SHIPMODE TEXT NOT NULL, L_COMMENT TEXT NOT NULL, PRIMARY KEY (L_ORDERKEY,L_LINENUMBER) ); CALL SET_TABLE_PROPERTY('LINEITEM', 'encryption_options', 'AES256,623c26ee-xxxx-xxxx-xxxx-91d323cc4855,AliyunHologresEncryptionDefaultRole,153xxxxxxxxxxxxx'); COMMIT;
データ暗号化ルールのクエリ
Hologres V2.0 以降では、次の SQL 文を実行してテーブルのデータ暗号化ルールをクエリできます。
SELECT
*
FROM
hologres.hg_table_properties
WHERE
property_key = 'encryption_options';次の図にサンプル結果を示します。