Data Security Center (DSC) は、データベース内の特定の列を暗号化し、電話番号、パスワード、ID ドキュメントなどの機密データが暗号文として保存されるようにします。権限のあるユーザーは、常時機密クライアントを通じてプレーンテキストを復号して読み取ることができます。
サポート対象のデータベース: RDS for MySQL、RDS for PostgreSQL、PolarDB for MySQL、PolarDB for PostgreSQL、PolarDB for PostgreSQL (Compatible with Oracle)、および PolarDB-X 2.0。
列の暗号化は、DSC の無料版、プレミアム版、エンタープライズ版、7 日間トライアル版、および付加価値サービス限定版で利用できます。この機能を追加する、またはクォータを増やすには、DSC エディションをアップグレードしてください。
列レベルの暗号化の設定
インスタンスを購入してから初めて DSC を使用する場合は、5つのステップすべてを順番に実行してください。すでにクラウドリソースの権限付与と資産の同期が完了している場合は、ステップ 3 から開始してください。
ステップ 1: DSC にクラウドリソースへのアクセスを権限付与する
DSC コンソールにログインします。
[RAM 承認] ダイアログボックスで、[今すぐ承認] をクリックします。
これにより、DSC は OSS、RDS、MaxCompute などのサービスのリソースにアクセスできるようになります。
ステップ 2: データベース資産を同期する
左側のナビゲーションウィンドウで、[アセットセンター] をクリックします。
[アセットセンター] ページで、[アセットの同期] をクリックします。
DSC インスタンスを購入した後、初めてログインすると資産の同期が自動的に実行されます。DSC は毎日深夜に資産リストを自動的に同期します。
ステップ 3: データベースを接続し、データ分類を実行する
列レベルの暗号化を有効にする前に、DSC はデータ分類スキャンを完了する必要があります。次の2つの方法のいずれかを使用してデータベースを接続します。
| 接続方法 | 仕組み | サポート対象のデータ資産 |
|---|---|---|
| ワンクリック接続 | DSC はターゲットデータベースに読み取り専用アカウント (プレフィックス: sddp_auto) を自動的に作成します。このアカウントは読み取り専用であるため、データベースをデータマスキングタスクの送信先として使用することはできません。 | RDS for MySQL、RDS for SQL Server (プライマリインスタンスのみ)、RDS for MariaDB (プライマリインスタンスのみ)、PolarDB for MySQL、PolarDB-X 1.0 (DRDS)、PolarDB-X 2.0 (プライマリインスタンスのみ)、OSS、Tablestore、MaxCompute、Simple Log Service (SLS) |
| 認証情報ベースの接続 | 指定したデータベースアカウントとパスワードを使用して接続します。読み取り専用アカウントは検出、マスキング、監査タスクをサポートしますが、データベースをマスキングの送信先にはできません。読み取り/書き込み権限を持つアカウントを使用すると、データベースをマスキングの送信先として使用できます。 | 構造化データ: RDS、PolarDB、PolarDB-X (旧 DRDS)、PolarDB-X 2.0、ApsaraDB for MongoDB、ApsaraDB for OceanBase、および自己管理データベース。ビッグデータ: AnalyticDB for MySQL および AnalyticDB for PostgreSQL。 |
データベースを接続して分類を開始するには:
左側のナビゲーションウィンドウで、[アセットセンター] をクリックします。
[構造化データ] エリアで、暗号化するデータベースタイプをクリックします。
ターゲットインスタンスの[分類と等級付け] 列で、
をクリックします。インスタンスステータスは [実行中] であり、インスタンス内に少なくとも1つのデータベースが存在する必要があります。データベースが存在しない場合、データ分類機能を有効にすることはできません。

「[分類およびグレーディングの有効化]」ダイアログボックスで、パラメーターを設定します。
パラメーター 説明 アクティベーション方法 DSC に読み取り専用の sddp_autoアカウントを自動作成させるには、[データベースアカウントを自動的に作成] を選択します。独自の認証情報を使用するには、[ユーザー名とパスワードを手動で入力]権限付与範囲 [データソース全体] を選択するか、[データソースリストで権限付与範囲を管理] を選択して、対象に含めるデータベースを指定します。 デフォルトのスキャンタスクを自動的に作成して開始 接続が成功すると、DSC はデフォルトのスキャンタスクを作成して開始します。結果は、[分類とグレーディング] > [タスク] > [識別タスク] タブの [デフォルトタスク] で確認できます。 新しいデータベースに自動的に接続。 資産が同期されるたびに、DSC はインスタンス内で新たに検出されたデータベースに自動で接続します。 [OK]をクリックします。
ステップ 4: データベースの暗号化ステータスを確認する
分類が完了したら、各データベースインスタンスの暗号化の準備状況を確認します。
左側のナビゲーションウィンドウで、[リスクガバナンス] > [列の暗号化] を選択します。
[列の暗号化] ページで、以下の情報を確認してください:
フィールド 説明 列 接続されているすべてのデータベースインスタンス全体の列の総数です。 機密データ (S3以上) 感度レベルS3以上に分類された列を、暗号化済み、未暗号化、失敗に分類して表示します。 アカウント アカウント総数:データベースごとのアカウントは個別にカウントされます。暗号化が設定されていないアカウント:暗号化ポリシーが設定されていないアカウントです。プレーンテキスト権限および暗号文権限のカウント:各権限タイプのアカウントです。いずれかのカウントをクリックするか、[権限設定] をクリックして、アカウントの詳細全体を表示します。 リスト情報 インスタンス名、アセットタイプ、リージョン、暗号化アルゴリズム、プレーンテキスト権限アカウント、および暗号化チェック結果です。 感度レベルのリファレンス:
レベル 意味 N/A 機密情報は検出されませんでした S1 非機密 (例: 都道府県、市区町村、製品名) S2 中程度の機密 (例: 氏名、住所) S3 高機密 (例: ID ドキュメント、パスワード、データベース認証情報) S4 コア機密 (例: 遺伝子、指紋、虹彩スキャンなどの生体認証データ) 
各インスタンスの[暗号化チェック]列を確認してください。
[合格]: インスタンスは列レベルの暗号化の設定準備ができています。
失敗: データベースのバージョンが互換ではありません。 [アップグレードへ移動] をクリックして、RDS または PolarDB コンソールのアップグレードページを開きます。アップグレード後、アセットを再度同期します。[アセットセンター] に移動し、[承認管理] タブで [アセット承認管理] をクリックします。[アセット承認管理] パネルで、ターゲットインスタンスタイプ (RDS または PolarDB) をクリックし、その後 [アセット同期] をクリックします。
ステップ 5: 列レベルの暗号化を有効にする
「暗号化チェック」のステータスが [合格] であることを確認した後、列レベルの暗号化を設定します。
クイック暗号化で暗号化を有効にする
以下の3つのエントリーポイントのいずれかを使用して、[暗号化設定] パネルを開きます:
データベースインスタンスリストの上にある[高速暗号化]をクリックすると、すべてのインスタンスにわたる暗号化されていない列がすべて暗号化されます。
特定のインスタンスの[アクション] 列で、[高速暗号化] をクリックします。

[資産センター] ページで、ターゲットインスタンスの [カラム暗号化] カラムにある
をクリックします。
「[暗号化設定]」パネルで、[アセットタイプ]、[インスタンス名]、暗号化アルゴリズム、暗号化方式、および平文権限アカウントを選択します。次に、対象の[データベース]、[テーブル]、および列を選択し、[OK] をクリックします。

暗号化方式に関する注意:
[KMS キー]を選択した場合、まず Key Management Service (KMS) で対称キーを作成する必要があります。

> 重要: 設定後に暗号化方式を変更すると、DSC は暗号化タスクを再起動します。再起動中、暗号化された列のデータは一時的にプレーンテキストで保存されます。暗号化を有効にする前に、暗号化方式を最終決定してください。
プレーンテキスト権限アカウントに関する注意:
暗号化を有効にすると、すべてのデータベースアカウントはデフォルトで暗号文権限になります。特定のアカウントがプレーンテキストを直接読み取れるようにするには、それらをプレーンテキスト権限の許可リストに追加します。
DSC サービスアカウント (sddp_auto (ワンクリック接続) または指定したアカウント (認証情報ベースの接続)) は、DSC が最新のデータを読み取って分類スキャンを継続できるように、[プレーンテキスト権限] を持っている必要があります。
その他の操作
アカウント権限の変更
デフォルトでは、プレーンテキスト権限が明示的に付与されているアカウントを除くすべてのアカウントが暗号文権限を持ちます。権限を変更するには:
「リスクガバナンス」>「列暗号化」ページで、「アカウント」エリアの「権限設定」をクリックします。または、インスタンスの「操作」列で「編集」をクリックし、次に「アカウント権限」の横にある「設定」をクリックします。
「[権限設定]」パネルで、ターゲットインスタンスとアカウントを確認してください。
新しいアカウントがリストに表示されない場合は、[資産の同期] を実行して再度確認してください。
アカウントの [操作] 列で、[権限の変更] をクリックします。複数のアカウントを一度に更新するには、同じ現在の権限を持つアカウントを選択し、[一括で権限を変更] をクリックします。
対象の権限を選択し、[OK] をクリックします。
利用可能な権限: [プレーンテキスト権限]、[暗号文権限 (復号権限なし)]、または [暗号文権限 (JDBC 復号)]。
暗号化された列の範囲またはアルゴリズムの更新
暗号化が設定された後、範囲やアルゴリズムを調整できます。
単一の列の暗号化を切り替えるには、インスタンスリストでインスタンスを展開し、[データベース]、[テーブル]、および[列]を特定してから、[暗号化を有効化]または[暗号化を無効化]をクリックします。

アルゴリズム、メソッド、または暗号化された列の範囲を更新するには、インスタンスの [アクション] 列で [編集] をクリックします。
暗号化アルゴリズム または 暗号化方式 の横にある [変更] をクリックして、設定を更新します。
> 重要: 暗号化方式を変更すると、暗号化タスクが再起動します。再起動中、暗号化された列のデータは一時的にプレーンテキストで保存されます。注意して進めてください。
データベースリストで、対象の[データベース]、[テーブル]、および[カラム]を見つけ、[暗号化を有効にする]または[暗号化を無効にする]をクリックします。

例: 暗号化された列へのアクセスの検証
列レベルの暗号化を設定した後、権限が期待どおりに機能することを確認します。暗号文権限を持つアカウントは、暗号化された列をクエリすると暗号文を受け取るべきです。プレーンテキスト権限を持つアカウントは、元の値を受け取るべきです。
RDS for PostgreSQL アカウントは、プレーンテキスト権限と暗号文権限 (JDBC 復号) のみをサポートします。検証方法は RDS for MySQL と同じです。
RDS for MySQL の例
セットアップ: DSC に接続された RDS for MySQL 8.0 インスタンスで、データ分類スキャンが完了している。

列レベルの暗号化の設定:
usersテーブルのphoneカラムに対して暗号化を有効にする。
各データベースアカウントのアクセス権限を設定します。

アクセスの検証:
[プレーンテキスト権限] を持つアカウントを使用してログインします。詳細については、「Data Management (DMS) を使用した RDS データベースへのログイン」をご参照ください。
SELECT文を実行すると、暗号化された列はプレーンテキストを返します。
[暗号文権限 (復号権限なし)] を持つアカウントに切り替えて、同じ
SELECT文を実行すると、暗号化された列は暗号文を返します。
[暗号文権限 (JDBC 復号)] を持つアカウントに切り替えて、同じ
SELECT文を実行すると、暗号化された列は暗号文を返します。
PolarDB for MySQL の例
セットアップ: DSC に接続された PolarDB for MySQL 5.7 クラスターで、データ分類スキャンが完了している。

列レベルの暗号化の設定:
password列の暗号化をuser3テーブルで有効化します。
各データベースアカウントのアクセス権限を設定します。

アクセスの検証:
Data Management (DMS) はプライマリエンドポイントを介して PolarDB for MySQL に接続するため、DMS を介しては列レベルの暗号化ポリシーは有効になりません。代わりに MySQL クライアントを使用して、プロキシ接続アドレスを介して接続します。
ご利用のオペレーティングシステムと互換性のある MySQL クライアントをインストールします。
プロキシ接続アドレスを使用してクラスターに接続します。
プレーンテキスト権限アカウント:
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
mysql -h<endpoint> -P<port> -u<username> -p<password>コマンド例:
次のコマンドを実行します。
プレーンテキスト権限アカウント — 暗号化された列はプレーンテキストを返します。

暗号文権限 (JDBC 復号) アカウント — 暗号化された列は暗号文を返します。

use sddp_test; SELECT * FROM user3 LIMIT 0, 3;
常時機密クライアント経由でのプレーンテキストへのアクセス
暗号文権限 (JDBC 復号) を持つアカウントは、常時機密クライアントを使用して、アプリケーションコード内で暗号化された列のデータを復号できます。
| 言語 | サポート対象のデータベース | リファレンス |
|---|---|---|
| Java | RDS for MySQL、RDS for PostgreSQL、PolarDB for MySQL、PolarDB for PostgreSQL、PolarDB for PostgreSQL (Compatible with Oracle)、PolarDB-X 2.0 | EncJDBC との連携 — ローカルキーと KMS キーをサポート |
| Go | RDS for MySQL、PolarDB for MySQL、PolarDB-X 2.0 | Go ドライバーの統合 — ローカルキーのみをサポート |
トラブルシューティング: 暗号化チェックの失敗
データベースのバージョンがサポート対象外
[アップグレードへ移動] を [暗号化チェック] 列でクリックして、データベースのアップグレードページを開きます。アップグレードガイド:
マイナーエンジンバージョンまたはデータベースプロキシのバージョンがサポート対象外
読み取り専用インスタンス
列レベルの暗号化はプライマリインスタンスで設定する必要があります。データはすべての読み取り専用インスタンスに自動的にレプリケートされるため、それぞれで個別に暗号化を設定する必要はありません。
インスタンスステータスが [実行中] ではない
インスタンスが起動するか、メンテナンスが完了するのを待ってから、ステータスが [実行中] であることを確認してから列レベルの暗号化を設定してください。
次のステップ
列レベルの暗号化の仕組みを理解する: 列レベルの暗号化の概要
追加のデータベースを接続: データベースの権限付与
分類結果の表示と管理: 機密データのスキャン