概要
Oracle Cloud Infrastructure(OCI)のロードバランサーに連携したWAFのアクセス数とブロック数をZabbixで可視化し、通信傾向に変化があればOCI LoggingのログをOCI Generative AIで分析して不正侵入検知する仕組みを構成しました
目的は、管理者が「何が起きているか」を把握し、調査を始めるきっかけを得ることです。メトリックで変化の候補を絞り、ログを調査してから通知します。
構成図
ロードバランサーに適用するOCI WAFのメトリックやログを取得して生成AIで解析します
| 項目 | 構成 |
|---|---|
| Web通信監視 | OCI WAF |
| 検知、ログ解析 | OCI Generative AI |
| WAFメトリック | OCI Monitoring |
| WAFログ | OCI Logging |
| 通知 | OCI Notifications |
| 監視分析 | Virtual Machine |
構成
フロー
収集したメトリックを一度SQLiteに保存し、そのデータを可視化と異常候補の評価で共有します。
メトリック収集
対象WAFのresourceIdで絞り込み、actionとcountryCodeごとに1分間の合計を取得しSQLiteに保持します
| 集計値 | 算出方法 |
|---|---|
| 国別アクセス数 | その国の各actionの値を合計 |
| 国別ブロック数 | その国のactionがblockの値を合計 |
| 全体アクセス数 | 国別アクセス数を合計 |
| 全体ブロック数 | 観測できた国別ブロック数を合計 |
Zabbix送信
Zabbixには、1分ごとの全体値と国別値をまとめたデータを送信します。受信側はZabbixトラッパーです。
Zabbixにてグラフ表示
Zabbixにホスト作成しアイテムで定義してグラフ表示します
生成AIでメトリック評価
AI評価では直近15分を評価対象とし、1時間の保存範囲にあるそれより前のデータを比較対象にします
AI評価に進むため、次のような条件を設けました
| 条件 | 本構成の値 |
|---|---|
| 直近15分の観測率 | 80%以上 |
| 比較対象の観測データ | 30分以上 |
| 比較対象の観測率 | 80%以上 |
| 最終取得の鮮度 | 10分以内 |
不足する場合はinsufficient_data相当として通常の生成AI呼び出しを見送ります
生成AI評価の役割は次のように分けました
| 判定 | 意味 | メトリック評価後の動作 |
|---|---|---|
| normal | 条件に該当する通信変化の候補なし | Loggingを検索しない |
| watch | 詳細確認する通信変化の候補あり | Loggingを検索する |
| insufficient_data | 評価材料が不足 | 通常経路のログ調査を保留 |
| investigate | 優先調査を要する兆候 | メール通知の対象となるのは最終ログ評価でこの判定になった場合 |
メトリック段階の最終判定は、通常normalまたはwatchです。生成AIがブロック減少や小幅変動をwatchと表現しても、ローカル条件に該当しなければnormalへ補正します。補正後の判定がnormalなら、Logging検索・集計・ログAI分析は行いません
以下はwatchを許可する条件です。通常経路ではAIの評価とローカル補正を経て最終判定を決めます。バースト条件では、AIが正常寄りに評価しても調査候補を残す処理を設けています。
| 候補 | 条件の例 |
|---|---|
| 1分間の急増 | 1分1000件以上、比較対象の平均の5倍以上、最大値の2倍以上 |
| 継続的な増加 | 直近15分の1分平均が50件以上かつ比較平均の3倍以上で、その閾値以上の分が3分以上 |
| 実質的なブロック増加 | 直近15分で10件以上、比較対象よりブロック率が5パーセントポイント以上上昇し、 ブロックが発生した1分枠が3つ以上観測 |
OCI LoggingでWAF Loggingを検索
ログ調査では、メトリック評価に対応する時間帯と対象WAFのOCIDで検索します。集計時刻とログ時刻の境界差に備え、評価対象期間の1分前から検索します。
生成AIでログ分析
また、最新200件を取得できても、200件が期間全体の件数とは限りません。大量アクセス時に最新ページだけを調べると、過去の集中や全体比率を誤解するためです。
本構成では、詳細確認用のサンプルに加え、Logging側のサーバー集計を利用します。
| データ | 用途 |
|---|---|
| 生ログのサンプル | 具体的な送信元、パス、応答元、ルールの例を確認 |
| 1分単位の件数集計 | 短時間のアクセス集中を確認 |
| 送信元IPと時刻等でまとめた集計 | 同一IPの集中、異なるパスへのアクセス、拒否の継続を確認 |
ログでは、件数に加えて継続時間、送信元、パスの種類、既知の攻撃検知機能への一致を確認します。既知のルールIDの意味はローカルの定義を参照し、任意のルール名から攻撃種別を推測させません。
investigateを許可する条件の例
| 候補 | 本構成の初期条件 |
|---|---|
| 1分間の複数パスへの集中 | 同一IPで400・401・403・404が合計100件以上、異なるパス20種類以上 |
| 継続的な複数パスへのアクセス | 同一IPで毎分50件以上の該当エラーが3分連続、計150件以上、異なるパス20種類以上 |
| 低速の複数パスへのアクセス | 同一IPで期間内150件以上、異なるパス50種類以上、5分以上で観測 |
| 設定したログインパスへの拒否集中 | 同一IP・同一ホスト・同一パスで401・403が20件以上/分 |
| 分散したログインパスへの拒否 | 同一ホスト・同一パスで401・403が100件以上/分、送信元10IP以上 |
| 既知の攻撃検知機能への反復一致 | 合計5件以上かつ2分以上で観測、または1分間に20件以上 |
| 重点監視する攻撃検知機能への一致 | 明示した重大なルールIDへの一致 |
| 急激なアクセス集中 | 1分1000件以上で暫定基準からの倍率条件も満たす |
OCI Notificationsで通知
通知条件は、通常の分析経路で最終ログ評価がinvestigateになった場合のみです
実際に通知文が作成された例です(一部情報をマスクしています)
【タイトル】[WAF][investigate] waf1 要調査
【本文】
判定: investigate
WAF名: waf1
WAF OCID: ocid1.webappfirewall.oc1.***
WAFリージョン: ***
ログ検索期間: 2026-10-28 15:30:00 JST ~ 2026-10-28 15:46:00 JST
事象ID: c918d1ab9c46***
【状況(AIによる要約)】
IP **.**.**.* が 3 分間に 179 件のリクエストを送信し、20 異なるパスをアクセス。
403 応答が多く、WAF ルール "waf_e2e_test" が一致。ログサンプルでは同 IP が
20 個のパスを連続でリクエストし、すべて 403。リクエスト数とエラー率が基準を
超えているため、スキャンや不正アクセスの可能性がある。
【ローカル判定条件への一致】
継続した探索候補 / 件数=179 / 送信元IP=**.**.**.* / パス種類数=20
【参照根拠】
{"id": "G01", "metric": "sampled_entries", "value": 200}
{"id": "G02", "metric": "sample_top_client_ip",
"value": [{"value": "**.**.**.*", "count": 188},
{"value": "**.**.**.*", "count": 6},
{"value": "**.**.**.*", "count": 6}]}
【管理者の確認事項】
1. 1) **.**.**.* の過去 24 時間のリクエスト履歴を確認し、
同様のパターンが継続しているか調査。
2. 2) 403 応答の詳細(レスポンスヘッダーやボディ)を取得し、WAF のブロック理由を特定。
3. 3) 同 IP からの 200 応答があるか確認し、認証成功や正常アクセスの有無を検証。
【制約・未確認事項】
- サンプルは最新 200 件のみで、全体の分布は不明。ログ欠損や遅延の可能性がある。
- IP **.**.**.* の行動が必ずしも攻撃を示すわけではなく、
テストや自動化ツールの可能性もある。
- ログの反映遅延・取得上限・誤検知の可能性があります。
- 不審なIP/URLはログ上のデータです。自動遮断やURLへのアクセスは行っていません。
推定AI料金 [メトリック分析]: USD 0.00031906
推定AI料金 [WAFログ分析]: USD 0.00056670
同一WAF・同一の判定条件/ルールの組合せは、設定した間隔で重複通知を抑制します。
生成AI費用を把握するため生成AI呼び出しごとに、APIが返す入力・出力トークン数と設定した単価から推定料金を計算します
まとめ
OCI WAFのメトリックを収集し、Zabbixでアクセス数やブロック数を全体・国別に可視化する仕組みを構築しました。さらに、メトリックの変化から異常候補を抽出し、OCI Loggingのログを生成AIで分析して、調査が必要な攻撃兆候をメールで通知します。数値による判定条件と生成AIの分析を組み合わせ、過剰な通知を抑えながら、管理者が調査を始めるきっかけを提供します。今後は判定条件の改善や生成AIによる遮断の仕組みを検討したいと考えています