Data Security Center (DSC) では、RDS for MySQL、RDS for PostgreSQL、PolarDB for MySQL、PolarDB for PostgreSQL、PolarDB for PostgreSQL (Compatible with Oracle)、PolarDB-X 2.0 など、さまざまなデータベースタイプに列レベルの暗号化を設定できます。これにより、権限のあるユーザーのみが常時機密クライアントを使用して機密列のデータを復号してアクセスできるようにすることで、プレーンテキストが権限のない第三者に公開されるのを防止します。
-
列の暗号化機能は、Data Security Center(DSC) の Free Edition、Advanced Edition、Enterprise Edition、7 日間の試用版、および Value-added Services Only Edition のユーザーのみが利用できます。列の暗号化が有効になっていない、またはクォータが不足している場合は、エディションをアップグレードしてください。
-
クライアントが SQL を使用して暗号化された列をクエリする場合、クエリは列の元のデータ型を無視し、常に 文字列 フォーマットでデータを返します。列の暗号化は慎重に設定してください。
操作手順
DSC インスタンスをアクティブ化した後、コンソールで初めて列の暗号化を使用する場合は、次の手順を順番に実行する必要があります。承認 (DSC によるクラウドリソースへのアクセス)、データベース資産の同期の実行、機密データ検出ジョブの実行、および列の暗号化の有効化。
手順1:DSCへのアクセス権限の付与
承認後、DSC インスタンスは Object Storage Service (OSS)、ApsaraDB RDS、MaxCompute などのクラウドサービスのリソースにアクセスできます。
-
Data Security Center コンソールにログインします。
-
RAM-based Authorization ダイアログボックスで、Authorize をクリックします。
手順2:データベース資産の同期
DSC を使用して ApsaraDB RDS や PolarDB などのクラウド製品で機密データを検出したり、データベースアクビティを監査したりするには、まず資産を同期する必要があります。
-
左側メニューで、Asset Center を選択します。
-
Asset Center ページで、Asset synchronization をクリックします。
説明DSC インスタンスを購入後、コンソールに初めてログオンすると、DSC が自動的にクラウド資産リストを同期するため、手動での操作は不要です。DSC は、毎日 00:00 に資産リストを自動的にスキャンして同期します。
手順3:データ分類・等級付けの有効化
列の暗号化を使用するには、まずデータベース接続を承認し、データ検出ジョブを完了する必要があります。DSC は Connect と Account Logon をサポートしています。
以下の表に示すように、データセキュリティ要件とデータベースでサポートされている方法に基づいて接続方法を選択できます。
-
データベースがワンクリック接続をサポートしており、データマスキングタスクの宛先としてデータベースを使用する必要がない場合は、ワンクリック接続を使用してください。
-
データマスキングタスクの宛先としてデータベースを使用する必要がある場合は、読み取りおよび書き込み権限を持つアカウントで認証情報ベースの接続を使用する必要があります。
接続タイプとサポートされる資産
-
左側メニューで、Asset Center を選択します。
-
Structured Data セクションで、列レベルの暗号化を設定するデータタイプをクリックします。
-
対象の資産インスタンスの Data Classification 列にある
アイコンをクリックします。説明インスタンスにデータベースがあり、その Instance Status が Running であることを確認してください。データベースが作成されていない場合、データ分類・等級付けを有効にしたり、対応する検出ジョブを作成したりすることはできません。
-
Enable Classification and Grading ダイアログボックスで、次の表の説明に従ってパラメータを設定します。
パラメーター
説明
Activation Method
データ検出のためにデータベースに接続するために使用するアカウント情報を設定します。2つの方法がサポートされています:
Automatically create database accounts :DSC は、ターゲットデータ資産に
sddp_autoプレフィックスで始まる読み取り専用アカウントを自動的に作成します。DSC はこのアカウントを使用してターゲットデータベースに接続し、データ検出タスクを実行します。説明この方法は、ワンクリック有効化をサポートするデータタイプでのみ利用可能です。
Manually enter username and password:データベースへの接続に使用するアカウントとパスワードを入力します。
Authorization Scope
データ検出の権限付与範囲。
Entire data source。
Manage authorization scope in the data source list:目的の権限付与範囲を選択します。
Automatically create and start a default scan task
このオプションを選択すると、DSC はデータベースが正常に接続された後、デフォルトのスキャンタスクを自動的に作成します。
タブで、Default Tasks をクリックしてスキャンタスクの実行ステータスを表示できます。詳細については、「検出タスクを使用した機密データのスキャン」をご参照ください。
Automatically connect to new databases.
このオプションを選択すると、DSC は手動または自動の資産同期後にデータベースインスタンスで検出された新しいデータベースに自動的に接続します。
-
設定が完了したら、OK をクリックします。
手順4:データベース詳細の表示
機密データ検出ジョブが完了したら、DSC に接続されているデータベースインスタンスについて、[列の総数]、[列の暗号化ステータス]、[データベースアカウント情報] などの情報を表示できます。
-
左側メニューで、 を選択します。
-
Column Encryption ページで、次の情報を表示します。データベースリストの上にある検索コンポーネントを使用して、資産タイプ、暗号化ステータス (暗号化された列、暗号化されていない列、暗号化失敗など)、または秘密度レベル別に対象のデータベースインスタンスの情報を検索および表示できます。
項目
説明
[Columns]
DSC に正常に接続されたデータベースインスタンスのテーブルの列の総数を示します。
[Sensitive Data (S3 and Higher)]
データ検出結果に基づいて秘密度レベルが S3 以上の列。これには、機密列、暗号化された列、暗号化されていない列、暗号化に失敗した列などの情報が含まれます。
[Accounts]
-
[Total Accounts]:各データベースとアカウントのペアを1つとしてカウントします。たとえば、アカウントCがデータベースAとデータベースBの両方に存在する場合、2つのデータベースアカウントとしてカウントされます。
-
[Accounts For Which No Encryption Configured]:データベース内のどの列に対しても暗号化が有効になっていない場合、アカウントの権限は Accounts For Which No Encryption Configured になります。
-
[Plaintext Permissions] または [Ciphertext Permission] を持つアカウントの数:データベースの列レベルの暗号化を有効にすると、暗号化された列データにアクセスするためのデータベースアカウントの権限を設定できます。
統計内の任意の数をクリックするか、Permission Settings をクリックします。Permission Settings パネルで、対象のデータベースインスタンスのすべてのアカウント情報を検索して表示し、異なるデータベースアカウントのアクセス権限を確認できます。
リスト情報
DSC インスタンスのInstance name、Asset Type、Region、Encryption Algorithm、Plaintext Permission Accounts、Encryption Checkなどの情報を表示します。
-
暗号化チェックに Passed したインスタンスに対してのみ、列レベルの暗号化を設定できます。
-
データベースのバージョンに互換性がないために Encryption Check が 「[Failed]」 した場合、Encryption Check 列の Upgrade をクリックします。これにより、ApsaraDB RDS または PolarDB コンソールの対応するアップグレードページにリダイレクトされ、データベースのバージョンをアップグレードできます。詳細については、「チェック失敗に関するFAQ」をご参照ください。
バージョンアップグレード後やステータス更新後は、DSC コンソールで Asset synchronization を実行し、最新のデータベース情報を取得する必要があります。
-
左側メニューで、Asset Center を選択します。 Authorization Management タブで、Asset Authorization Management をクリックします。
-
Asset Authorization Management パネルで、左側の製品名ナビゲーションペインで対象のインスタンスタイプ ([RDS] または [PolarDB]) をクリックし、Asset synchronization をクリックします。
-
手順5:列レベルの暗号化の設定
対象のデータベースインスタンスの情報を確認し、Encryption Check の結果が Passed になったら、列レベルの暗号化設定を完了します。
ワンクリック暗号化の有効化
データベースのワンクリック暗号化を有効にする前は、その暗号化アルゴリズムと方式は設定されていません。この状態では、データベースの個々の列の暗号化を有効にすることはできません。
DSC は、列暗号化を有効にするための 3 つの方法をサポートしています。
-
データベースインスタンスリストの上にある Rapid Encryption をクリックして、すべての暗号化されていない列に対して列レベルの暗号化を設定します。
-
対象のデータベースインスタンスの Actions 列にある Rapid Encryption をクリックして、そのインスタンスの列レベルの暗号化を設定します。
-
Asset Center ページで、対象のデータベースインスタンスの Column Encryption 列にある
アイコンをクリックします。
-
-
Encryption Configuration パネルで、Asset Type、Instance name、Encryption Algorithm、Encryption Method、Plaintext Permission Accounts を選択します。次に、暗号化する対象の Databases、Table、Column を選択し、OK をクリックします。
以下のパラメータ設定に注意してください:
-
その他の操作
データベースアカウント権限の変更
Plaintext Permissions を持つアカウントを除き、データベースインスタンスの他のすべてのアカウントは 暗号文権限 を持ちます。 ビジネスニーズに基づいて、アカウントの権限を Plaintext Permissions、Ciphertext Permission (No Decryption Permission)、または Ciphertext Permission (JDBC Decryption) に変更できます。
-
ページで、Accounts セクションの Permission Settings をクリックします。
または、インスタンスリストの Actions 列で Edit をクリックします。Edit パネルで、Account Permissions の Configure をクリックします。
-
Permission Settings パネルで、対象のインスタンスとアカウントを検索して、現在のアカウント権限を表示します。
説明新しく追加したデータベースアカウントがリストに表示されない場合は、Asset synchronization を実行し、再度確認してください。
-
対象アカウントの Actions 列にある Modify Permissions をクリックします。
同じ権限を持つ複数の対象アカウントを選択し、リストの下にある Batch Modify Permissions をクリックすることもできます。
-
[権限の変更] ダイアログボックスで、対象の権限を選択し、OK をクリックします。
列の暗号化設定の変更
暗号化設定を完了した後:
-
インスタンスリストで、対象のインスタンスを展開します。データベースリストで、対象の[Databases]、[Table]、[Column]名を見つけ、Enable Encryption または Disable Encryption をクリックして、単一の列の暗号化を設定します。
-
インスタンスリストの Actions 列で Edit をクリックします。Edit パネルで、暗号化アルゴリズム、暗号化方式、および暗号化された列の範囲を変更します。
-
Encryption Algorithm または Encryption Method の Modify をクリックして、暗号化アルゴリズムまたは方式を更新します。
重要暗号化方式を変更すると、暗号化タスクが再起動します。 再起動中、元々暗号化されていた列のデータは平文で保存され、データ漏洩のセキュリティリスクが生じます。 慎重に操作してください。
-
暗号化対象列を設定するデータベースリストで、対象の[Databases]、[Table]、[Column]名を見つけ、Enable Encryption または Disable Encryption をクリックして、暗号化された列の範囲を更新します。
-
MySQL の列レベルの暗号化の例
列レベルの暗号化とアカウント権限を設定した後、暗号化された列のデータアクセスを検証できます。 暗号文権限 を持つアカウントが暗号化された列にアクセスした際に暗号文を取得した場合、設定が有効であることを示します。
ApsaraDB RDS for PostgreSQL データベースアカウントは、プレーンテキスト権限 と 暗号文権限 (JDBC 復号) のみをサポートします。列レベルの暗号化データを検証する方法は、ApsaraDB RDS for MySQL と同じです。次のセクションでは、ApsaraDB RDS for MySQL を例に、ApsaraDB RDS データベース内の暗号化された列データへのアクセスを検証する方法を説明します。
ApsaraDB RDS for MySQL
前提条件
ApsaraDB RDS for MySQL 8.0 インスタンスを Data Security Center (DSC) に接続し、機密データの分類と等級付けを完了していること。
スキャン結果によると、sddp_em_db データベースの users テーブルには 3 つの列が含まれています。phone 列の機密レベルは S3 (個人情報 - 携帯電話番号) ですが、username 列と id 列の機密レベルは N/A です。すべての列は現在 未暗号化 で、暗号化チェックは 合格 しています。
列レベルの暗号化の設定
「ワンクリック暗号化の有効化」の手順に従って、このデータベースインスタンスの列レベルの暗号化を設定します:
-
users テーブルの phone 列の暗号化を有効にします。
-
紐付けられたデータベースアカウントに次のアクセス権限を設定します。
アカウント sddp_em01 に [平文権限] を、アカウント sddp_em03 に [暗号文権限 (JDBC 復号)] を、アカウント sddp_em02 に [暗号文権限 (復号なし)] を設定します。
暗号化データへのアクセス
-
Plaintext Permissions を持つアカウントを使用してデータベースにログオンします。詳細については、「DMS を使用して ApsaraDB RDS データベースにログオンする」をご参照ください。
-
SELECT 文を実行してデータテーブルを表示します。暗号化された列はプレーンテキストデータを返します。
-
Ciphertext Permission (No Decryption Permission) のアカウントに切り替えてデータベースにログオンします。 SELECT 文を実行してデータテーブルを表示します。 暗号化された列には暗号文データが返されます。
-
Ciphertext Permission (JDBC Decryption) を持つアカウントに切り替えてデータベースにログオンします。 SELECT 文を実行してデータテーブルを表示すると、暗号化された列に暗号文データが返されます。
PolarDB for MySQL
前提条件
PolarDB for MySQL 5.7 クラスターが機密データの分類と等級付けのために DSC に接続されています。スキャンの結果は次のとおりです。
スキャンの結果、sddp_test データベースの user3 テーブルでは、password 列の機密レベルが S4 (個人機密情報 - パスワード)、age 列の機密レベルが S2 (個人情報 - 年齢)、残りの列の機密レベルが N/A となっており、すべての列は現在 暗号化されておらず、暗号化チェックは 合格しています。
列レベルの暗号化の設定
「ワンクリック暗号化の有効化」の手順に従って、このデータベースインスタンスの列レベルの暗号化を設定します:
-
user3 テーブルの password 列の暗号化を有効にします。
-
紐付けられたデータベースアカウントに次のアクセス権限を設定します。
アカウント sddp_polardb には 平文権限 を、アカウント sddp_03 には 暗号文権限 (JDBC 復号) を設定します。
暗号化データへのアクセス
DMS はプライマリエンドポイントを介して PolarDB for MySQL クラスターに接続するため、列レベルの暗号化ポリシーは有効になりません。したがって、この例では、コマンドラインを使用してデータベースプロキシエンドポイント経由で PolarDB for MySQL クラスターに接続し、列レベルの暗号化の結果を検証します。
-
お使いのオペレーティングシステムと互換性のあるバージョンの MySQL をサーバーにインストールします。
-
次のコマンドを実行してデータベースクラスターに接続します:
mysql -h<endpoint> -P<port> -u<username> -p<password>-
エンドポイントとポート:クラスターエンドポイントを使用し、サーバーがこのエンドポイントにアクセスできることを確認してください。接続エンドポイントの設定および表示方法の詳細については、「データベースプロキシの設定」および「エンドポイントの管理」をご参照ください。
-
ユーザー名とパスワード:この例では、それぞれ プレーンテキスト権限 と 暗号文権限 (JDBC 復号) を持つデータベースアカウントのユーザー名とパスワードを使用します。
接続コマンドの例:
-
プレーンテキスト権限 を持つアカウントを使用する場合:
mysql -hpc-bp1fd7********v6f.rwlb.rds.aliyuncs.com -P3306 -usddp_polardb -pH********4. -
暗号文権限 (JDBC 復号) を持つアカウントを使用する場合:
mysql -hpc-bp1fd7********v6f.rwlb.rds.aliyuncs.com -P3306 -usddp_03 -pP********3.
-
-
次のコマンドを実行して、データテーブルを表示します。
-
コマンド
use <database_name>;を実行して、目的のデータベースに切り替えます。この例では、sddp_test データベースが選択されます。use sddp_test; -
SELECT 文を実行してデータテーブルを表示します。
SELECT * FROM user3 LIMIT 0, 3;
結果の例:
-
プレーンテキスト権限 を持つアカウントの場合、暗号化された列はプレーンテキストデータを返します。
mysql> use sddp_test; Database changed mysql> SELECT * FROM user3 LIMIT 0, 3; +-----+------+----------+----+ | age | name | password | id | +-----+------+----------+----+ | xxx | xxx | xxx | xx | | xxx | xxx | xxx | xx | | xxx | xxx | xxx | xx | +-----+------+----------+----+ 3 rows in set (0.01 sec) -
暗号文権限 (JDBC 復号) を持つアカウントの場合、暗号化された列は暗号文データを返します。
mysql> use sddp_test; Database changed mysql> SELECT * FROM user3 LIMIT 0, 3; +-----+------+----------------------------------------------+----+ | age | name | password | id | +-----+------+----------------------------------------------+----+ | xxx | xxx | /0D9Pxxx... | xx | | xxx | xxx | Q0D9Pxxx... | xx | | xxx | xxx | 7kD9Pxxx... | xx | +-----+------+----------------------------------------------+----+ 3 rows in set (0.01 sec)
-
クライアント側の復号
暗号化された列のプレーンテキストにアクセスするには、[Ciphertext Permission (JDBC Decryption)] を持つアカウントを使用し、Java または Go の復号用クライアントを使用してデータを復号できます。
|
言語 |
データベースタイプ |
ドキュメント |
|
Java |
|
Integrate EncJDBC(ローカル鍵および KMS 鍵による復号をサポート) |
|
Go |
|
Integrate GoLang driver(ローカル鍵による復号のみサポート) |
チェックの失敗に関するよくある質問
-
ApsaraDB RDS または PolarDB のデータベースバージョンがサポートされていない場合
Encryption Check 列の Upgrade をクリックして、ApsaraDB RDS または PolarDB コンソールの対応するアップグレードページに移動し、データベースバージョンをアップグレードします。
-
ApsaraDB RDS のマイナーエンジンバージョンまたは PolarDB のデータベースプロキシバージョンがサポートされていない場合
-
ApsaraDB RDS データベースインスタンスが読み取り専用の場合
読み取り専用インスタンスが作成されると、セカンダリインスタンスからデータが複製され、プライマリインスタンスとデータが一致するようになります。プライマリインスタンスでのデータ更新は、プライマリインスタンスでの操作が完了した直後に、すべての読み取り専用インスタンスに自動的に同期されます。そのため、プライマリインスタンスで列レベルの暗号化を設定できます。
-
データベースインスタンスが [実行中] の状態ではない場合
たとえば、停止中またはメンテナンス中のデータベースインスタンスでは、列レベルの暗号化を設定できません。インスタンスを起動するか、メンテナンスが完了するまでお待ちください。列レベルの暗号化を設定する前に、データベースインスタンスのステータスが Running であることを確認してください。
クォータと制限
-
リージョンの制限:インスタンスのリージョンが列レベルの暗号化機能をサポートしていることを確認してください。詳細については、「対応リージョン」をご参照ください。
-
データベースの制限:
データベースタイプ
バージョン
暗号化アルゴリズム
暗号化方法
権限
ApsaraDB RDS for MySQL
メジャーエンジンバージョンが MySQL 5.7 または MySQL 8.0、マイナーエンジンバージョンが 20240731 以降である必要があります。
-
AES-128-GCM。
-
AES-256-GCM:マイナーエンジンバージョンが 20241231 以降の場合にのみサポートされます。
-
SM4-128-GCM:マイナーエンジンバージョンが 20241231 以降の場合にのみサポートされます。
-
ローカル鍵。
-
KMS 鍵:マイナーエンジンバージョンが 20241231 以降かつストレージタイプがクラウドディスクの場合にのみサポートされます。
-
暗号文権限(復号不可):ローカル鍵を使用する場合にのみサポートされます。これはデフォルトの権限です。
-
暗号文権限(JDBC 復号):KMS 鍵を使用する場合のデフォルト権限です。
-
プレーンテキスト権限。
ApsaraDB RDS for PostgreSQL
メジャーエンジンバージョンが PostgreSQL 16、マイナーエンジンバージョンが 20241230 以降である必要があります。
AES-256-GCM。
ローカル鍵。
-
暗号文権限(JDBC 復号)(デフォルト)。
-
プレーンテキスト権限。
PolarDB for MySQL
メジャーエンジンバージョンが MySQL 5.7 または MySQL 8.0、データベースプロキシバージョンが 2.8.36 以降である必要があります。
重要PolarDB for MySQL クラスターに対して列レベルの暗号化ポリシーを設定する場合は、クラスターエンドポイントを使用してクラスターに接続する必要があります。プライマリエンドポイントを使用した場合、列レベルの暗号化ポリシーは適用されません。詳細については、「Configure database proxy」および「Manage endpoints」をご参照ください。
AES-128-GCM。
ローカル鍵。
PolarDB for PostgreSQL
メジャーエンジンバージョンが PostgreSQL 14、データベースバージョンが 2.0.14.15.31.0 以降である必要があります。
AES-256-GCM。
ローカル鍵。
PolarDB for PostgreSQL (Oracle Compatible)
Oracle 構文互換バージョン 2.0 のみサポートされます。メジャーエンジンバージョンが PostgreSQL 14、データベースバージョンが 2.0.14.15.31.0 以降である必要があります。
AES-256-GCM。
ローカル鍵。
PolarDB-X 2.0
シリーズが Enterprise Edition である必要があります。データベースバージョンが polardb-2.5.0_5.4.20-20250714 以降である必要があります。
-
AES-128-GCM。
-
AES-256-GCM:データベースバージョンが polardb-2.5.0_5.4.21-20260414 以降の場合にのみサポートされます。
-
SM4-128-GCM。
-
ローカル鍵。
-
KMS 鍵:データベースバージョンが polardb-2.5.0_5.4.21-20260414 以降の場合にのみサポートされます。
-
関連ドキュメント
-
データベースの列レベルの暗号化の 機能 と 動作原理 については、「列レベルの暗号化の概要」をご参照ください。
-
データベースの 認可 と 接続 の詳細な手順については、「一般的なデータベースの認可」をご参照ください。
-
機密データ検出の結果を 確認 して 修正 する詳細な手順については、「検出ジョブを使用した機密データのスキャン」をご参照ください。
-
認可後にデータベース内の機密列データが変更された場合は、再スキャン する必要があります。詳細については、「検出ジョブを使用した機密データのスキャン」をご参照ください。