HeatWavejp_Meetup_13_HeatWave MySQL で DB監査ログ運用を実装してみた![倉重正義氏 (パナソニック インフォメーションシステムズ)]

>100 Views

May 07, 25

スライド概要

【講演内容】
HeatWave MySQL で DB監査運用を実践してみた!

 1.HeatWaveサービス化検証
 2.DBログ監査について
 3.基本的な使い方
 4.DB監査ログ利用時の注意点
 5.DBログ監査の外部保管
 6.外部保管DB監査ログの参照まとめ
 7.

【発表者】
パナソニック インフォメーションシステムズ株式会社 インフラソリューション
本部 プラットフォームサービス事業部 インフラ標準サービス部 DB基盤チーム 倉重
正義氏

【イベント情報】
HeatWavejp Meetup #13
https://heatwavejp.connpass.com/even/349599/

profile-image

HeatWavejpは、MySQL HeatWave の良さを知っていただき、参加者同士でノウハウやナレッジを共有できるユーザーコミュニティです。参加者同士のつながりを深めるため、以下の活動を行ってまいります。 COMMUNICATION *Slackやconnpassを活用したユーザー同士のコミュニケーションの場の提供 EVENT *オンライン/オフラインでのMeetupセミナーや勉強会の開催(隔月程度) SHARING *製品情報や最新アップデート、リリース情報の共有 INTERACT *参加者のコミュニティ・ネットワークやユーザー同士の交流を促進

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

HeatWavejp Meetup #13 HeatWave MySQL でDB監査ログ運用を実装してみた! パナソニック インフォメーションシステムズ株式会社 Panasonic Information Systems Co., Ltd. Copyright(C) Panasonic Information Systems Co., Ltd. All rights reserved.

2.

自己紹介 氏名:倉重 正義 所属:パナソニック インフォメーションシステムズ株式会社 業務:データベース構築・運用 (Oracle, MySQL, PostgreSQL, SQL Server) Panasonic Information Systems Co., Ltd. 2

3.

事業領域 Panasonic Information Systems Co., Ltd. 3

4.

Panasonic Transformation(PX) とは 各事業のDX支援と グループ全体のIT経営基盤の底上げ 事業の競争力強化に向けて 働き方・ビジネスのやり方含めて変革 経営のスピードアップ目指す 2021年 5月 PX準備プロジェクト発足 Panasonic Information Systems Co., Ltd. 4

5.

アジェンダ 1.HeatWaveサービス化検証 2.DB監査ログについて 3.基本的な使い方 4.DB監査ログ利用時の注意点 5.DB監査ログの外部保管 6.外部保管DB監査ログの参照 7.まとめ Panasonic Information Systems Co., Ltd. 5

6.

1.HeatWaveサービス化検証 パナソニックグループ向けHeatWaveのサービス提供に向け検証 今回はDB監査ログ運用について検証した内容を発表 パフォーマンス 運用評価 可用性 (メンテナンスなど) クラウド上で セキュリティー 他システム連携 NWレイテンシ SLAが満たせるか 基準評価 (オンプレ連携など) 影響調査 コスト評価 HeatWave独自機能 (機械学習・生成AIなど) Panasonic Information Systems Co., Ltd. 6

7.

2.DB監査ログについて セキュリティ関連の機能の1つでDB内での操作を記録するもの。 重要なシステムを運用する上で、重要な役割を果たす。 HeatWaveでは、MySQL Enterprise Audit にてDB監査ログ取得が可能 重要テーブルへの アクセス検知 SOX(内部統制)証跡 監査ログ出力内容 ・いつ(日時) DB監査ログ ・どこで(接続元端末) ・誰が(DBユーザ) ・何をした(発行クエリなど) インシデント発生時の 調査 Panasonic Information Systems Co., Ltd. 7

8.

3.基本的な使い方 デフォルトでは監査ログ出力されない。監査ログを出力する為の設定が必要。 ■監査ログ設定 ①ログフィルタ作成 どの操作をログ出力するか設定 ②ログフィルタ割当 DBユーザに作成したログフィルタを割当 ②ログフィルタ割当 ①ログフィルタ作成 監査ログ出力 ログフィルタ DBユーザ ■監査ログ設定後 ③ログ参照 ログ参照ファンクション経由で監査ログ参照 ※監査ログファイルへの直接参照不可 監査ログファイル(JSON形式) ③ログ参照 DBユーザ ログ参照ファンクション Panasonic Information Systems Co., Ltd. 8

9.
[beta]
3.基本的な使い方 ー ①ログフィルタ設定
どの操作を監査ログを出力するか設定。フィルタ設定内容はJSON形式で指定。
SELECT audit_log_filter_set_filter(‘ログフィルタ名’, ‘{“filter”: {フィルタ設定}}’);

例)すべての操作の監査ログ出力をしたい場合
SELECT audit_log_filter_set_filter('log_all', '{"filter": {"log":true}}’);

例)特定クラスの監査ログ出力したい場合
SELECT audit_log_filter_set_filter('log_conn_events','{ "filter": { "class": { "name": "connection" } } }’);

設定したフィルタは下記クエリで確認可能
SELECT * FROM mysql_audit.audit_log_filter;

Panasonic Information Systems Co., Ltd.

9

10.

3.基本的な使い方 ー ①ログフィルタ設定 ■イベント、イベントサブクラス イベントクラス イベントサブクラス 説明 connection connect 接続の開始 connection change_user ユーザ切替 connection disconnect 接続の終了 general status コマンドの戻り値 message internal 内部で生成されたメッセージ message user audit_api_message_emit_udf に生成されたメッセージ table_access read データ参照SQL table_access delete データ削除SQL table_access insert データ挿入SQL table_access update データ更新SQL 【参考】 https://dev.mysql.com/doc/refman/8.0/ja/audit-log-filter-definitions.html Panasonic Information Systems Co., Ltd. 10

11.

3.基本的な使い方 ー ②ログフィルタ割当 ①で作成したログフィルタをDBユーザに割当 SELECT audit_log_filter_set_user(‘DBユーザ名’, ‘ログフィルタ名’); 例)すべてのユーザにフィルタを割当する場合 SELECT audit_log_filter_set_user('%', 'log_all’); 例)特定ユーザにフィルタ割当する場合 SELECT audit_log_filter_set_user('user_abc@%', 'log_all’); 設定内容は下記クエリで確認可能 SELECT * FROM mysql_audit.audit_log_user; Panasonic Information Systems Co., Ltd. 11

12.
[beta]
3.基本的な使い方 ー ③ログ参照
監査ログ参照ファンクションを使ってログ参照。JSON形式で返ってくる
例)直近のタイムスタンプのログを参照する場合
SELECT audit_log_read(audit_log_read_bookmark());

例)指定した時間以降のログを参照する場合
SELECT audit_log_read('{ "start": { "timestamp": "2025-03-18 15:33:37" } }’);

⇒ バッファサイズに収まる行数だけ返ってくる。全行は返ってこない。
以降のログを参照したい場合は、下記を繰り返し実行
SELECT audit_log_read();

Panasonic Information Systems Co., Ltd.

12

13.

3.基本的な使い方 ー ③ログ参照 JSON形式のログは視覚的に分かりづらいため、JSON_TABLE関数にてテーブル形式の表示も可能 Panasonic Information Systems Co., Ltd. 13

14.

4.DB監査ログ利用時の注意点 1.ログファイルへのアクセスがファンクション経由 ファンクション経由でのログアクセスに制限されており、使い勝手が悪い(ログ一括取得ができない等) 2.ログローテートや保持期間の設定が固定 下記パラメータで定義されているが、変更不可 audit_log_rotate_on_size = 52428800 audit_log_prune_seconds = 604800 audit_log_max_size = 5368709120 ⇒ 50MBでログローテート ⇒ ローテートされた監査ログファイルを7週間経過で削除 ⇒ 監査ログファイルの合計が5GBを超えると 最も古いローテートされた監査ファイルが削除される 3.ログファイル削除時に外部保管されない 放っておくと監査ログが削除されてしまうため、利用者側で外部保管しておく必要がある。 ログの保管期間の要件があるシステムは外部保管対応必須! ⇒ 実運用を見据え、ログ外部保管の追加対応を実施 Panasonic Information Systems Co., Ltd. 14

15.

5.DB監査ログの外部保管 DB監査ログのテーブル投入・外部保管のスクリプトが公開されている 【Oralce MySQLブログ】 https://blogs.oracle.com/mysql/post/heatwave-audit-archive-and-dump-to-object-storage 【スクリプト配布先】 https://github.com/ivanxma/mysql_audit_archive/tree/main ■スクリプト処理概要 HeatWave 監査ログファイル ①監査ログ取得 ②取得したログを投入 クライアント (スクリプト実行元) 監査ログ格納テーブル (新規作成) ③監査ログテーブルエクスポート (MySQL Shellのエクスポートコマンド) OCI Object Storage 監査ログダンプファイル ④Object Storageへアップロード Panasonic Information Systems Co., Ltd. 15

16.

5.DB監査ログの外部保管 公開されているスクリプトを実行した結果 ⇒ 欲しい項目(table_accessイベントの内容)がない。 カラム長不足で、長文クエリがテーブルに入っていない。 【対応】 欲しい情報を取得できるようにテーブル定義及びスクリプト修正 ■テーブル定義変更 赤字部分を追加・修正 CREATE TABLE if not exists audit_archive.`audit_data` ( `server_uuid` varchar(45) NOT NULL, ・ ・ ・ `command_status` varchar(40) DEFAULT NULL, `query` text DEFAULT NULL, `query_status` int DEFAULT NULL, ・ ・ ・ `server_id` varchar(80) DEFAULT NULL, `access_db` varchar(80) DEFAULT NULL, `access_table` varchar(80) DEFAULT NULL, `access_sql_command` varchar(80) DEFAULT NULL, `access_query` text DEFAULT NULL, PRIMARY KEY (`server_uuid`,`id`,`ts`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; ■pythonスクリプトを変更 赤字部分を追加・修正 audit_sql1 = ("SELECT @@server_uuid as server_uuid, id, ts, class, event, the_account,login_ip,login_os,login_user,login_proxy,connection_id,db, " " status,connection_type,connect_os,pid,_client_name,_client_version, " " program_name,_platform,command,sql_command,command_status,query, " " query_status,start_server_id,server_os_version,server_mysqlversion,args, " " account_host,mysql_version,the_os,the_os_ver,server_id, " " access_db, access_table, access_sql_command, access_query “ ・ ・ ・ " query TEXT PATH '$.general_data.query’, “ " query_status INT PATH '$.general_data.status', " ・ ・ ・ " server_id VARCHAR(80) PATH '$.startup_data.server_id', " " access_db VARCHAR(80) PATH '$.table_access_data.db', " " access_table VARCHAR(80) PATH '$.table_access_data.table', " " access_sql_command VARCHAR(40) PATH '$.table_access_data.sql_command', " " access_query TEXT PATH '$.table_access_data.query' " " )" ") AS auditdata; ") Panasonic Information Systems Co., Ltd. 16

17.
[beta]
5.DB監査ログの外部保管
全DBユーザに対して監査ログ出力設定を仕込み、定期的に外部保管スクリプトを実行
⇒ ログ参照ファンクションの処理時間が遅くなる事象が発生
詳細を確認すると、HeatWaveのデフォルトユーザのログ件数が急増していることが発覚
【対応】
HeatWaveのデフォルトユーザの監査ログ取得をしないように設定変更
ログ取得しないフィルタ作成
SELECT audit_log_filter_set_filter('log_nothing', '{"filter": {"log":false}}’);
作成したフィルタをデフォルトユーザに適用
SELECT audit_log_filter_set_user('ociadmin', 'log_nothing’);
SELECT audit_log_filter_set_user('ocidbm', 'log_nothing’);
SELECT audit_log_filter_set_user('oracle-cloud-agent', 'log_nothing');

Panasonic Information Systems Co., Ltd.

17

18.

6.外部保管DB監査ログの参照 外部保管した監査ログの参照ができるかどうか2パターンで確認 ①MySQL ShellのインポートコマンドでMDSにインポート ⇒ 問題なくインポート及び参照可能 ②Lakehouseの機能を利用して、ダンプファイルをHeatWaveクラスタにロード ⇒ ダンプが圧縮ありで出力されていた為、ロード不可 公開スクリプトを修正し、非圧縮でcsvファイルをエクスポートするように変更後、ロードできることを確認 Panasonic Information Systems Co., Ltd. 18

19.

7.まとめ ・DB監査ログが取得できることを確認 ・DB監査ログはログ消込の設定がされており、そのままにしておくとログ消失してしまう ・利用者自身でDB監査ログを退避する必要があり、公開されているスクリプトにて外部保管が可能 ※要件に応じてスクリプトの修正必要 ・外部保管したDB監査ログをDBへロード及び参照できることを確認 【Oracle社への要望】 ・DB監査ログのローテートや保持期間の各種パラメータのカスタマイズ ・DB監査ログの外部保管をHeatWaveのサービスとして実装 Panasonic Information Systems Co., Ltd. 19

20.

ご清聴ありがとうございました Panasonic Information Systems Co., Ltd. 20