データベース管理者 (DBA) や開発者などの高い権限を持つロールは、本番データベースを保守する際に、ユーザー ID 情報やトランザクションレコードなどの機密データを公開する可能性があります。PolarDB Always-confidential 機能 (PolarDB for MySQL) は、データベースプロキシレイヤーでクエリ結果をオンザフライで暗号化することで、このリスクを軽減します。これにより、特定のドライバーを使用する承認されたアプリケーションのみが機密データを復号して表示できるようになります。アプリケーションコードへの変更を最小限に抑えながら、この機能は機密データの保護とコンプライアンス要件への準拠に役立ちます。
仕組み
PolarDB Always-confidential 機能は、データベースプロキシレイヤーで動作します。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 ペアが漏洩した場合でも、AccessKey ペアを無効にするか、アクセスポリシーを制限することでリスクを軽減できます。キー自体が公開されることはありません。
KMS のキータイプのうち、サポートされているのはカスタマーマスターキー (CMK) のみです。デフォルトキー タイプはサポートされていません。詳細については、「Key Management Service の概要」をご参照ください。
カスタマーマスターキー (CMK) の設定
-
PolarDB コンソールに戻り、適切な CMK を選択して OK をクリックします。
自己管理キーの使用
KMS を設定しない場合、システムはデフォルトで自己管理キーを使用します。キーの生成、配布、保管はお客様の責任となります。
自己管理キーには紛失や漏洩のリスクがあり、キーのローテーションはサポートされていません。キーを紛失した場合、対応する暗号化されたデータは復号できなくなります。キーを管理するためには、厳格なセキュリティ手順を確立する必要があります。
ステップ 2:ロール権限の定義
暗号化 ページの ユーザーロール権限の設定 タブで、異なるデータベースアカウントに対してロールを設定します。この設定により、ユーザーがデータをクエリした際にプレーンテキストと暗号文のどちらが表示されるかが決まります。
-
ロール権限ポリシーの作成 をクリックします。
-
ロール権限の設定 ダイアログボックスで、ポリシー名を指定し、データベースアカウントをロールに割り当てます。
-
権限ポリシー名:ポリシーの名前を指定します。名前は最大 64 文字です。
-
スーパー管理者:このロールに割り当てるデータベースアカウントのチェックボックスを選択します。複数のアカウントを選択できます。このリストにあるデータベースアカウントは、常にクエリ結果をプレーンテキストで受け取ります。
説明スーパー管理者 ロールは最高レベルの権限を持ちます。このロールは、必要不可欠な管理アカウントまたは監査アカウントにのみ付与し、その使用を厳格に管理してください。
-
一般ユーザー:このロールに割り当てるデータベースアカウントのチェックボックスを選択します。複数のアカウントを選択できます。このリストにあるデータベースアカウントは、クエリ結果を暗号文で受け取りますが、特定の暗号化ドライバーと正しいキーを使用してデータを復号できます。
説明その他のユーザー:スーパーアカウントまたは標準アカウントのロールに割り当てられていないデータベースアカウントは、クエリ結果を暗号文で受け取り、データを復号することはできません。
-

ステップ 3:暗号化ポリシーの作成と有効化
暗号化 ページの 暗号化ポリシーの設定 タブで、暗号化ポリシーを設定します。
-
暗号化ポリシーの作成 をクリックします。
-
表示されるダイアログボックスで、次の表に従ってポリシーパラメーターを設定します。
説明正確な暗号化範囲の指定:ポリシーを作成する際は、必ずデータベース名、テーブル名、フィールド名を指定してください。意図せず他のサービスに影響を与えないように、ポリシーをすべてのデータベースやすべてのテーブルに適用することは避けてください。
パラメーター
説明
ルール名
必須。ポリシーの一意の識別子です。例:
encrypt-user-email。名前は最大 64 文字です。説明
任意。ポリシーの説明です。例:
Encrypts the email field in the user table of the customer database。説明は最大 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 をクリックします。
-
ポリシーの削除:削除したいポリシーを見つけ、操作 列の Delete をクリックし、確認ダイアログボックスで OK をクリックします。
-
ポリシーの有効化または無効化:ポリシーを見つけ、ON/OFF 列のスイッチをクリックします。
詳細な権限によるセキュリティ強化
コンソール権限を持つ DBA や開発者が暗号化ポリシーを悪意を持って変更または削除するのを防ぐために、Resource Access Management (RAM) を使用してセキュリティを強化できます。
基本概念
関連担当者向けに個別の RAM ユーザーを作成します。これらのユーザーに PolarDB を管理する権限を付与しますが、暗号化ポリシーの変更または削除の権限は明示的に拒否します。
操作手順
-
変更を拒否するポリシーの作成
-
RAM コンソールにログインします。左側のナビゲーションウィンドウで、権限 > ポリシー を選択します。ポリシーの作成 をクリックします。
-
ビジュアルエディタタブで、以下のパラメーターを設定します:
-
効果:拒否。
-
サービス:PolarDB。
-
操作:アクションの指定 を選択します。書き込み セクションで、
polardb:ModifyMaskingRulesとpolardb:DeleteMaskingRulesを選択します。 -
リソース と 条件:ポリシーが適用されるリソースと、ポリシーが有効になる条件を指定します。詳細については、「アクセスポリシーの要素」をご参照ください。
-
設定が完了したら、OK をクリックします。ポリシーの作成 ダイアログボックスで、ポリシー名 と 発言 を設定します。
-
-
-
RAM ユーザーへの権限の割り当て
-
RAM コンソールにログインします。左側のナビゲーションウィンドウで、ID > Users を選択します。対象の RAM ユーザーを見つけ、操作 列の 権限の追加 をクリックします。
-
ポリシー セクションで、作成した拒否ポリシーを選択し、OK をクリックします。
-
結果
制限された RAM ユーザーが暗号化ポリシーを変更または削除しようとすると、権限が不十分であることを示すエラーメッセージが表示されます。
次のステップ
暗号化ポリシーを設定した後、アプリケーションは JDBC ドライバー (EncJDBC) や GoLang ドライバーなどの暗号化対応ドライバーを使用して、暗号化されたデータを正しく読み書きする必要があります。