データベース管理者 (DBA) や開発者などの高い権限を持つロールは、データベースのメンテナンス時に、ユーザーの本人確認情報やトランザクションレコードなどの機密データにアクセスする可能性があります。これにより、データ漏洩のリスクが生じます。PolarDB for MySQL の PolarDB Always-confidential 機能は、データベースプロキシレイヤーでクエリ結果をオンザフライで暗号化します。これにより、特定のドライバーを使用する承認されたアプリケーションのみが機密データを復号してアクセスできるようになります。この機能を使用すると、アプリケーションコードへの変更を最小限に抑えながら、機密データを保護し、コンプライアンス要件を満たすことができます。
仕組み
PolarDB 常時機密機能はデータベースプロキシレイヤーで動作します。 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 は キーのローテーション をサポートし、高いセキュリティと保守性を提供します。KMS へのアクセスに使用される AccessKey (AK) が漏洩した場合でも、AK を無効にするか、ポリシーを厳格化することでリスクを軽減できます。キー自体は侵害されません。
KMS では [カスタマーマスターキー (CMK)] タイプのみがサポートされています。[デフォルトキー] タイプはサポートされていません。詳細については、「キーサービス概要」をご参照ください。
カスタマーマスターキー (CMK) の設定
-
PolarDB コンソールに戻り、対応する CMK を選択して、OK をクリックします。
自己管理キー
KMS を設定しない場合、システムはデフォルトで自己管理キーを使用します。キーの生成、配布、保管はお客様の責任となります。
自己管理キーには、紛失や漏洩のリスクがあり、現在キーの更新はサポートされていません。キーを紛失した場合、対応する暗号化データを復号することはできません。キーを管理するためには、厳格なセキュリティ手順を確立する必要があります。
ステップ 2:ロール権限の定義
暗号化 ページの ユーザーロール権限の設定 タブで、さまざまなデータベースアカウントのロールを設定します。これにより、データを照会するときにプレーンテキストと暗号文のどちらが表示されるかが決まります。
-
[ロール権限ポリシーの作成] をクリックします。
-
ロール権限の設定ダイアログボックスで、ポリシー名を設定し、データベースアカウントをロールに割り当てます。
-
[権限ポリシー名]: ポリシーの名前を指定します。名前は最大 64 文字です。
-
[スーパー管理者]:データベースアカウントのチェックボックスを選択します。複数のアカウントを選択できます。このリストのデータベースアカウントは、常にクエリ結果をプレーンテキストで受信します。
説明スーパー管理者 ロールは最高の権限を持ちます。このリストには、必要な管理アカウントまたは監査アカウントのみを追加し、その使用を厳密に制御してください。
-
[一般ユーザー]:データベースアカウントのチェックボックスを選択します。 複数のアカウントを選択できます。 このリストにあるデータベースアカウントは、クエリ結果を暗号文として受信しますが、特定の暗号化ドライバーとキーを使用してデータを復号できます。
説明その他のユーザー:上記の 2 つのロールで設定されていないデータベースアカウント。これらのユーザーは、クエリ結果を暗号文として受け取り、データを復号することはできません。
-
ステップ 3:暗号化ポリシーの作成
暗号化 ページで、暗号化ポリシーの設定 タブに移動して暗号化ポリシーを設定します。
-
[暗号化ポリシーの作成] をクリックします。
-
表示されるダイアログボックスで、次の表の説明に従ってポリシーパラメーターを設定します。
説明正確な暗号化範囲の指定:ポリシーを作成するときは、必ずデータベース、テーブル、フィールド名を明示的に指定してください。無関係なサービスに影響を与えないように、すべてのデータベースまたはすべてのテーブルに適用される設定は使用しないでください。
パラメーター
説明
[ルール名]
必須。ポリシーの一意の識別子。例:
encrypt-user-email。最大 64 文字です。[説明]
任意。ポリシーの詳細な説明。例:
customer データベースの user テーブルの email フィールドを暗号化する。最大 64 文字です。[ON/OFF]
ポリシーを有効または無効にするスイッチ。ポリシーはデフォルトで有効になっており、作成中は変更できません。この設定は、ポリシーを作成した後に変更できます。
[権限ポリシーの関連付け]
必須。 ステップ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:暗号化ポリシーの管理
暗号化 ページの 暗号化ポリシーの設定 タブで既存のポリシーを管理します。
-
ポリシーの変更: 対象のルールを見つけ、操作 列の Modify をクリックします。
-
ポリシーの削除: 対象のルールを探し、操作 列の 削除 をクリックし、表示されたダイアログボックスで OK をクリックします。
-
ポリシーの有効化または無効化:対象のルールを見つけ、ON/OFF 列のスイッチをクリックします。
セキュリティ強化
コンソール権限を持つ DBA や開発者が暗号化ポリシーを悪意を持って改ざんしたり削除したりするのを防ぐために、Resource Access Management (RAM) を使用してセキュリティを強化できます。
基本原則
関連担当者向けに個別のRAM ユーザーを作成し、PolarDB を管理する権限を付与しますが、暗号化ポリシーを変更または削除する権限は明示的に拒否します。
手順
-
拒否ポリシーの作成
-
RAM コンソールにログインします。 左側のナビゲーションペインで、[権限] > [ポリシー] を選択します。 [ポリシーの作成] をクリックしてカスタムポリシーを作成します。
-
ビジュアルエディター タブで、次のパラメーターを設定します:
-
効果: 拒否。
-
サービス: [PolarDB]。
-
[操作]: [アクションの指定] を選択します。[書き込み操作] で、
polardb:ModifyMaskingRulesとpolardb:DeleteMaskingRulesを選択します。 -
リソース および [条件]: ポリシーが適用されるリソースと、それが有効になる条件を指定します。詳細については、「ポリシーの基本要素」をご参照ください。
-
設定を完了したら、OK をクリックします。[ポリシーの作成] ダイアログボックスで、[ポリシー名] と 発言 を設定します。
-
-
-
RAM ユーザー権限の設定
-
RAM コンソールにログインします。左側のナビゲーションペインで、[ID] > Users を選択します。目的の RAM ユーザーを見つけ、操作 列の [権限を追加] をクリックします。
-
[ポリシー] セクションで、作成した拒否ポリシーを選択し、次に [OK] をクリックします。
-
結果
制限された RAM ユーザーが暗号化ポリシーを変更または削除しようとすると、コンソールに [権限がありません] というエラーが表示されます。エラーは、現在の操作が明示的に拒否されたことを示し、エラーコード Forbidden.RAM と認証アクション polardb:ModifyEncryptionPolicy が表示されます。ポリシータイプはアイデンティティベースのポリシー (アカウントレベル) で、権限の決定は明示的な拒否です。ユーザーは、アカウント管理者に連絡して承認を得る必要があります。
次のステップ
暗号化ルールを設定した後、アプリケーションは EncJDBC ドライバーや GoLang ドライバーなどの暗号化対応ドライバーを使用して、暗号化されたデータを正しく読み書きする必要があります。