SQL ファイアウォールを使用すると、ご利用の PolarDB クラスターに対して実行できる SQL ステートメントを制御できます。ホワイトリストルールを設定すると、PolarProxy はホワイトリストにない SQL ステートメントをブロックまたはアラートを発し、不正または意図しないクエリからデータベースアカウントを保護します。
仕組み
PolarProxy は、ホワイトリストルールごとに 3 つのモードのいずれかで動作します。
| モード | PolarProxy の動作 |
|---|---|
| トレーニングモード | SQL ステートメントをサイレントに収集します。ブロックもアラートの生成も行いません。 |
| 検出モード | ホワイトリストにない SQL ステートメントを検出した際に記録します。ブロックはしません。 |
| 保護モード | ホワイトリストにない SQL ステートメントを検出した際に記録し、ブロックします。 |
PolarProxy がトレーニングモードで SQL ステートメントを収集する際、リテラルテキストではなく、各ステートメントの *パラメータ化された* 形式を保存します。例:
| SQL テキスト | |
|---|---|
| 実行するステートメント | update t set k = 2 where id = 2; |
| 保存されるパラメータ化された形式 | update t set k = ? where id = ? |
? は任意の値を表します。これは、トレーニングされた 1 つのステートメントが、使用される特定の値に関係なく、構造的に同一のすべてのクエリをカバーすることを意味します。考えられるすべてのパラメータの組み合わせをトレーニングする必要はありません。
複数のホワイトリストルールを設定して、関心事を分離します。各ルールのトレーニングには専用のデータベースアカウントを使用し、検出モードまたは保護モードに切り替える際に、各ルールが適用されるアカウントを指定します。
前提条件
開始する前に、以下が準備できていることを確認してください。
PolarDB for MySQL クラスター
PolarDB コンソールへのアクセス
ルールに関連付けるデータベースアカウントが少なくとも 1 つあること
ホワイトリストルールの作成
PolarDB コンソールにログインします。
コンソールの左上隅で、クラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、[設定と管理] > [セキュリティ管理] を選択します。
[SQL ファイアウォール] タブの左上隅にある [追加] をクリックします。
[ルールの作成] ダイアログボックスで、次のパラメーターを設定します。[データベースアカウント名] のオプション:アカウント名は、次のいずれかの形式に従う必要があります。
username— 例:userusername@IP address— 例:user@10.0.0.0
基本情報
パラメーター 必須 説明 ルール名 はい ルールの名前。数字と文字を含めることができます。最大 30 文字です。 説明 いいえ ルールの説明。最大 64 文字です。 エンドポイント はい このルールが適用されるエンドポイント。 設定
パラメーター 必須 説明 ルールタイプ はい [ホワイトリスト ルール] を選択します。 現在のモード いいえ 動作モード:[トレーニングモード]、[検出モード]、または [保護モード]。 データベースアカウント名 いいえ ルールが適用されるデータベースアカウント。以下のオプションをご参照ください。 オプション 動作 すべてのアカウント すべてのデータベースアカウントに適用されます。右側のフィールドは空白のままにします。 含める 指定したアカウントにのみ適用されます。少なくとも 1 つのアカウント名を入力し、コンマ (,) で区切ります。 除外する 指定したアカウントを除くすべてのアカウントに適用されます。少なくとも 1 つのアカウント名を入力し、コンマ (,) で区切ります。 [OK] をクリックします。
選択したモードに基づいて、次のステップを実行します。
[トレーニングモード]:ルールで定義されたデータベースアカウントを使用して、指定されたエンドポイントに接続します。ホワイトリストに登録したい業務関連の SQL ステートメントを実行します。PolarProxy は各ステートメントをパラメータ化し、ルールに保存します。
ステートメントを実行せずに手動でホワイトリストに追加するには、ステートメントの前に次のヒントワードを付けます。
sql hint(/* store_to_whitelist */)重要:業務を更新するたびに、すべての新しい SQL ステートメントを再トレーニングしてください。保護モードでは、PolarProxy はトレーニングされていないステートメントをブロックします。
トレーニングが完了したら、ルールを検出モードまたは保護モードに切り替えて、ホワイトリストの適用を開始します。
[検出モード]:定義されたデータベースアカウントを使用して、指定されたエンドポイントに接続します。業務の SQL ステートメントを通常どおり実行します。PolarProxy は、ホワイトリストにないステートメントを記録し、通過させます。ホワイトリストにないステートメントの場合、結果は次のようになります。
Query OK, 0 rows affected (0.03 sec) Rows matched:1 Changed: 0 Warnings:0[保護モード]:定義されたデータベースアカウントを使用して、指定されたエンドポイントに接続します。業務の SQL ステートメントを実行します。PolarProxy は、ホワイトリストにないステートメントを記録してブロックします。ブロックされたステートメントの場合、エラーは次のようになります。
ERROR 1141 (HY000): This SQL is rejected by SQL Firewall. Access denied for user 'xzh'@'x.x.x.x' to database 'xzh': This SQL is not in whitelist wl_test.
ホワイトリストルールの有効化または無効化
PolarDB コンソールにログインします。
コンソールの左上隅で、クラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、[設定と管理] > [セキュリティ管理] を選択します。
[SQL ファイアウォール] タブでルールを見つけ、[有効化/無効化] を切り替えます。
確認メッセージで [OK] をクリックします。
一度に複数のルールを有効化または無効化するには、ルールテーブルでそれらを選択し、[有効化] または [無効化] をクリックします。
ホワイトリストルールの変更
PolarDB コンソールにログインします。
コンソールの左上隅で、クラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、[設定と管理] > [セキュリティ管理] を選択します。
[SQL ファイアウォール] タブでルールを見つけ、[操作] 列の [変更] をクリックします。
[ルールの変更] ダイアログボックスで、パラメーターを更新し、[OK] をクリックします。
ルール名は、ルール作成後に変更することはできません。
PolarDB コンソールでは、ルール内のパラメータ化された SQL 文を変更することはできません。パラメータ化された SQL 文を更新するには、proxy_auditing.sql_list テーブルから削除して再トレーニングします。ホワイトリストルールの削除
PolarDB コンソールにログインします。
コンソールの左上隅で、クラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、[設定と管理] > [セキュリティ管理] を選択します。
[SQL ファイアウォール] タブでルールを見つけ、[操作] 列の [削除] をクリックします。
[削除] メッセージで [OK] をクリックします。
一度に複数のルールを削除するには、ルールリストでそれらを選択し、[削除] をクリックします。