Percona Server for MySQL の Audit Log Filter Plugin をインストールしてみる

目次

はじめに

MySQL で誰がいつどんな操作を行ったのかを確認することができる Audit Log Filter Plugin という機能が Percona Server for MySQLMySQL Enterprise Edition にあります。

今回は Percona の Audit Log Filter Plugin をインストールしてみたので紹介させていただきます。

この機能は、現時点では Tech Preview 段階です。

Audit Log Plugin と Audit Log Filter Plugin の比較

Percona Server for MySQL では、以前から Audit Log Plugin が実装されていましたが、8.0.34 から新しく Audit Log Filter Plugin が実装されました。

新しくアップグレードされた Audit Log Filter Plugin は、Audit Log Plugin と比較して大幅に改善されており、現在は MySQL Enterprise Audit Plugin の機能を反映しています。

Audit Log Plugin Audit Log Filter Plugin
監査ログの記憶
監査イベントのフィルター ×
特定のユーザーのフィルター
ログ形式 XML, JSON, CSV XML, JSON
ログの暗号化
ログの圧縮
ログローテーション
対象のデータベース 指定不可
(全てのデータベースの監査ログを記憶)
指定可

Audit Log Plugin はすべての監査イベントのログを記憶するため、イベントの記憶に多くのリソース (ディスクスペースなど) を必要としますが、Audit Log Filter Plugin はフィルター機能を使って記憶するログを細かくカスタマイズできるので使用するリソース量が少なくて済みます。

フィルター機能を使わない場合や CSV 形式で出力したい場合は Audit Log Plugin の使用をおすすめします。

Audit Log Filter Plugin をインストールしてみる

環境情報

  • OS : Oracle Linux 8
  • Percona Server for MySQL 8.0.36

Percona Server for MySQL のインストール

Audit Log Filter Plugin をインストールするために、まずは Percona の リファレンス から Percona Server for MySQL をインストールしておきます。

Audit Log Filter Plugin のインストール

Percona Server for MySQL のインストール後、/usr/share/mysql 配下の audit_log_filter_linux_install.sql スクリプトを実行すると Audit Log Filter Plugin のインストールが完了します。

プラグインのインストールを確認するには以下のクエリを実行します。

インストールの確認ができました。

MySQL Community Edition に Percona の Audit Log Filter Plugin をインストールできるのか

MySQL Community Edition で Percona の Audit Log Filter Plugin をインストールして動作させることは可能です。
しかし、Percona の Audit Log Filter Plugin を MySQL Community Edition で動作させる場合、互換性の問題が発生する可能性があり、おすすめできないので紹介は省かせていただきます。

Audit Log Filter Plugin を使ってみる

Audit Log Filter Plugin の目玉の機能である、フィルター機能を簡単に使ってみます。

フィルターを設定する

フィルター とは、特定のアクションを指定して監査ログに記憶するためのフィルター機能です。

フィルターを使用するために、監査ログに記録するためのフィルタールールを作成 し、それを ユーザーに割り当て ます。

フィルタールール定義には、以下の属性に基づいてイベントを含めたり除外したりします。

  • ユーザーアカウント
  • 監査イベントクラス
  • 監査イベントのサブクラス
  • 監査イベントフィールド

これらのフィルタルールを定義するための専用の関数が用意されています。

Audit Log Filter 関数 一覧

フィルタールール定義は、関数呼び出しに基づいて操作できます。

Audit Log Filter 関数 を使用するには AUDIT_ADMIN 権限または SUPER 権限が必要です。

関数 説明
audit_log_filter_flush() フィルターテーブルを手動でフラッシュする
audit_log_filter_set_filter() フィルターを定義する
audit_log_filter_remove_filter() フィルターを削除する
audit_log_filter_set_user() 特定のユーザーアカウントにフィルターを割り当てる
audit_log_filter_remove_user() 特定のユーザーアカウントからフィルターを削除する

1. フィルターを設定

audit_log_filter_set_filter 関数を使用して test_filter という名前のフィルターを設定しています。

設定したフィルターの確認

2. 特定のユーザーアカウントにフィルターを割り当てる

audit_log_filter_set_user 関数を使用してすべてのユーザーに test_filter という名前のフィルターを適応しています。

設定したユーザーアカウントのフィルターを確認

ユーザー割り当てまで完了すると、デフォルトでデータディレクトリ配下にある audit_filter.log にすべての監査可能なイベントの記録を開始します。

my.cnf で audit_log_filter_file = 新しいパス/audit_filter.log を設定し再起動することで出力先の変更が可能です。

https://docs.percona.com/percona-server/8.0/audit-log-filter-security.html

audit_filter.log を確認する

それでは、フィルター機能の動作を実際に確認してみます。
DB にログインし、SHOW DATABASES; を実行した後、audit_filter.log を確認してみます。

セクション名 セクションの説明
<NAME> イベント名
Query, Quit, Connect などのイベント名が含まれる
<RECORD_ID> 一意の識別子
<TIMESTAMP> イベントが発生した日時
<STATUS> イベントのステータス
成功は 0、失敗した場合はエラーコードが表示される
<CONNECTION_ID> クライアント接続の識別子
各接続には一意のIDが割り当てられる
<COMMAND_CLASS> イベントの種類
Query, Quit, Connect などのイベントの種類が含まれる
<HOST> クライアントのホスト名またはIPアドレス
<IP> クライアントのIPアドレス
<USER> 実行したユーザー名
<OS_LOGIN> 実行したユーザーの OS レベルのログイン名
<SQLTEXT> 実行されたSQLクエリや操作のテキスト
<PRIV_USER> 特権操作を実行したユーザー名
<PROXY_USER> プロキシユーザー名

生ログだと少し見にくいですが SHOW DATABASES; が正常に実行されたことがわかります。

次に、connection イベント以外を audit_filter.log に出力しないようにする connection_only フィルターを作成します。

まず、connection イベントのみを記憶する設定を作成します。

定義一覧が記載されているリファレンスが見つからなかったので、{"filter": {"log": true}} で出力されたログからフィルターできそうな定義を自分で確認しました。

作成した設定を確認します。

作成した connection_only をすべてのユーザーに適用 (置き換え) します。

ユーザーアカウントはフィルターを 1 つだけ持つことができます。
ユーザーアカウントにすでにフィルターがある場合、この関数は現在のフィルターを置き換えます。

全てのユーザーに適応できたか確認します。

DB にログイン後、任意のクエリを実行してログアウトします。
audit_filter.log を確認すると connection イベント以外のログが記憶されていないことがわかります。

使ってみた感想

Audit Log Plugin から大幅にアップグレードされた Audit Log Filter Plugin のフィルター機能を実際に使ってみて、必要なイベントのみを選択して記憶することができるため、ログファイルの容量を削減できる点が大きな利点だと感じました。
また、フィルタールールを自由に定義できるため、セキュリティレベルに合わせてログの出力をカスタマイズできる点もよかったです。

Tech Preview 機能ではありますが、Audit Log Filter Plugin を使うためのセットアップも非常に簡単なので、ぜひ使ってみてください。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃オープンソースデータベースのサポート業務に従事している有資格者で構成された技術サポートチームがPerconaに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次