データベース管理者 (DBA) や開発者などの高い権限を持つロールは、データベースのメンテナンス中に本番環境でユーザー ID や取引記録などの機密データにアクセスできます。これはデータ漏洩の脅威となります。PolarDB for MySQL の機密データベース機能は、データベースプロキシレイヤーでクエリ結果をリアルタイムに暗号化します。これにより、特定のドライバーを使用する承認されたアプリケーションのみが機密データを復号してアクセスできるようになります。この機能により、アプリケーションコードをわずかに変更するだけで、機密データを保護し、コンプライアンス要件を満たすことができます。
仕組み
機密データベース機能は、データベースプロキシレイヤーで動作します。SQL クエリが設定された暗号化ポリシーに一致すると、プロキシレイヤーは指定されたフィールドのデータを暗号化してから、クエリ結果をクライアントに返します。
データストレージ:この機能は、データベース内のデータが物理的に保存される方法を変更しません。データは、オペレーティングシステム (OS) ファイルおよびクラウドディスク上でプレーンテキストのままです。
ユーザーの視点:
スーパー管理者:クエリ結果は常にプレーンテキストであり、暗号化ポリシーの影響を受けません。これにより、データベース管理が容易になります。
一般ユーザー:クエリ結果は暗号文として返されます。一般ユーザーは、EncJDBC ドライバーやGoLang ドライバーなどの特定の暗号化ドライバーと正しいキーを使用して、クライアントでデータを復号する必要があります。
その他のユーザー:クエリ結果は暗号文であり、キーがあっても復号できません。
適用範囲
ご利用のPolarDB for MySQL クラスターのデータベースプロキシのバージョンは 2.9.12 以降である必要があります。
バージョン番号の確認:クラスターのデータベースプロキシのバージョンは、 ページで確認できます。
バージョンの互換性:データベースプロキシのバージョンが 2.9.12 より前で 2.8.18 より後の場合、暗号化ルールの設定インターフェイスは動的データマスキング機能と統合されています。最高のエクスペリエンスと機能の独立性を確保するために、バージョン 2.9.12 以降にアップグレードすることを推奨します。
オンザフライ暗号化の設定
オンザフライ暗号化の設定には、キーの設定、ロール権限の定義、暗号化ポリシーの作成という 3 つの主要なステップが含まれます。
操作手順
PolarDB コンソールに移動します。左側のナビゲーションウィンドウで [クラスター] をクリックします。クラスターが配置されているリージョンを選択し、対象クラスターの ID をクリックしてクラスター詳細ページを開きます。
左側のナビゲーションウィンドウで、 をクリックし、[暗号化] タブをクリックします。
ステップ 1:キーの設定
[暗号化] ページで、[キー管理] スイッチをオンにして、アプリケーション側の暗号化と復号のためのキーを設定します。
KMS キーの使用 (推奨)
Alibaba Cloud Key Management Service (KMS) を使用すると、キーをホストでき、キーのローテーション (キーの自動更新) をサポートし、高レベルのセキュリティと保守性を提供します。KMS へのアクセスに使用される AccessKey (AK) が漏洩した場合でも、AK を無効にするか、アクセスポリシーを強化することでリスクを制御できます。キー自体は侵害されません。
KMS では [カスタマーマスターキー] タイプのみがサポートされています。[デフォルトキー] はサポートされていません。詳細については、「キーサービスの概要」をご参照ください。
KMS カスタマーマスターキーの設定
PolarDB コンソールに戻り、対応するカスタマーマスターキーを選択して [OK] をクリックします。
自己管理キーの使用
KMS を設定しない場合、システムはデフォルトで自己管理キーを使用します。キーの生成、配布、保管はご自身で行う必要があります。
自己管理キーには紛失や漏洩のリスクがあり、現在キーの更新はサポートされていません。キーを紛失した場合、対応する暗号化されたデータは復号できなくなります。キーを管理するためには、厳格なセキュリティ手順を確立する必要があります。
ステップ 2:ロール権限の定義
[暗号化] ページの [顧客ロール権限設定] タブで、さまざまなデータベースアカウントのロールを設定できます。これにより、データをクエリする際に、アカウントがプレーンテキストでデータを表示できるか、暗号文でのみ表示できるかが決まります。
[ロール権限ポリシーの作成] をクリックします。
[ロール権限設定] ダイアログボックスで、ポリシー名とロールのデータベースアカウントを設定します。
[ポリシー名]:ポリシーの名前を指定します。名前は最大 64 文字です。
[スーパー管理者]:データベースアカウントのチェックボックスを選択します。複数のアカウントを選択できます。このリストにあるデータベースアカウントは、常にクエリ結果をプレーンテキストで受け取ります。
説明[スーパー管理者] ロールは最高の権限を持ちます。このリストには必要な管理アカウントまたは監査アカウントのみを追加し、その使用を厳格に管理してください。
[一般ユーザー]:データベースアカウントのチェックボックスを選択します。複数のアカウントを選択できます。このリストにあるデータベースアカウントは、クエリ結果を暗号文で受け取りますが、特定の暗号化ドライバーとキーを使用してデータを復号できます。
説明その他のユーザー:このロールには、スーパー管理者または一般ユーザーのロールで指定されていないデータベースアカウントが含まれます。これらのユーザーはクエリ結果を暗号文で受け取り、データを復号することはできません。

ステップ 3:暗号化ポリシーの作成と有効化
[暗号化] ページの [暗号化ポリシー設定] タブで、暗号化ポリシーを設定します。
[暗号化ポリシーの作成] をクリックします。
表示されるダイアログボックスで、次の表の説明に従ってポリシーパラメーターを設定します。
説明正確な暗号化範囲の指定:ポリシーを作成する際は、必ずデータベース名、テーブル名、フィールド名を指定してください。関連のないサービスに影響を与えないように、ポリシーをすべてのデータベースやテーブルに適用することは避けてください。
パラメーター
説明
[ルール名]
必須。ポリシーの一意の識別子です。例:
encrypt-user-email。名前は最大 64 文字です。[ルールの説明]
任意。ポリシーの詳細な説明です。例:
customer データベースの user テーブルの email フィールドを暗号化する。説明は最大 64 文字です。[ルールの有効化/無効化]
ポリシーを有効または無効にするスイッチです。ポリシーは作成時にデフォルトで有効になり、作成中は変更できません。この設定はポリシー作成後に変更できます。
[関連付けられた権限ポリシー]
必須。ステップ 2 で定義したロール権限を選択します。
データベース
任意。ポリシーが適用されるデータベースです。次のいずれかのオプションを選択できます:
(デフォルト) すべてのデータベース:ポリシーはクラスター内のすべてのデータベースに適用されます。
データベースの指定:ポリシーは指定されたデータベースにのみ適用されます。複数のデータベース名はカンマ
,で区切ります。
テーブル名
任意。ポリシーが適用されるテーブルです。次のいずれかのオプションを選択できます:
(デフォルト) すべてのテーブル:ポリシーは指定されたデータベース内のすべてのテーブルに適用されます。
テーブルの指定:ポリシーは指定されたテーブルにのみ適用されます。複数のテーブル名はカンマ
,で区切ります。
フィールド名
必須。暗号化するフィールドの名前です。複数のフィールド名はカンマ (
,) で区切ります。暗号化アルゴリズム
必須。暗号化に使用するアルゴリズムです。次のアルゴリズムがサポートされています:
SM4 シリーズ:
SM4-128-CBC、SM4-128-ECB、SM4-128-GCM、SM4-128-GTR。AES-128 シリーズ:
AES-128-CBC、AES-128-ECB、AES-128-GCM、AES-128-GTR。AES-256 シリーズ:
AES-256-CBC、AES-256-ECB、AES-256-GCM、AES-256-GTR。
[OK] をクリックします。
ステップ 4:暗号化ポリシーの管理
[暗号化] ページの [暗号化ポリシー設定] タブで、ポリシーリスト内の既存のポリシーを管理できます。
ポリシーの変更:対象のルールを見つけ、[操作] 列の [変更] をクリックします。
ポリシーの削除:対象のルールを見つけ、[操作] 列の [削除] をクリックし、表示されるダイアログボックスで [OK] をクリックします。
ポリシーの有効化/無効化:対象のルールを見つけ、[ルールの有効化/無効化] 列のスイッチをクリックします。
権限の収束とセキュリティ強化
コンソール権限を持つ DBA や開発者が悪意を持って暗号化ポリシーを変更または削除するのを防ぐために、Resource Access Management (RAM) を使用してセキュリティを強化できます。
基本概念
関連担当者向けに個別のResource Access Management (RAM) ユーザーを作成し、PolarDB を管理する権限を付与し、暗号化ポリシーの変更または削除の権限を明示的に拒否します。
利用手順
変更を拒否するポリシーの作成
Resource Access Management (RAM) コンソールにログインします。左側のナビゲーションウィンドウで、[権限管理] > [アクセスポリシー] を選択し、[ポリシーの作成] をクリックします。
ビジュアルエディタータブで、次のパラメーターを設定します:
[効果]:[Deny]。
サービス: PolarDB。
[操作]:[操作の指定] を選択します。[書き込み] セクションで、
polardb:ModifyMaskingRulesとpolardb:DeleteMaskingRulesを選択します。[リソース] と [条件]:ポリシーが適用されるオブジェクトと、ポリシーが有効になる条件を指定します。詳細については、「アクセスポリシーの基本要素」をご参照ください。
設定が完了したら、[OK] をクリックします。[ポリシーの作成] ダイアログボックスで、[ポリシー名] と [メモ] を設定します。
RAM ユーザー権限の設定
Resource Access Management (RAM) コンソールにログインします。左側のナビゲーションウィンドウで、[ID 管理] > [ユーザー] を選択します。対象の RAM ユーザーを見つけ、[操作] 列の [権限の追加] をクリックします。
[アクセスポリシー] セクションで、作成した拒否ポリシーを選択し、[OK] をクリックします。
結果
制限された RAM ユーザーが暗号化ポリシーを変更または削除しようとすると、権限が不十分であることを示すエラーメッセージが表示されます。
次のステップ
暗号化ルールを設定した後、アプリケーションは復号機能が組み込まれたJDBC ドライバー (EncJDBC) または GoLang ドライバーを使用して、暗号化されたデータを正しく読み書きする必要があります。