Log Service for WAF を使用して、WAF トラフィックログをリアルタイムで検索・フィルター・分析します。クエリ結果には、ブロックされたリクエスト、攻撃元、トリガーされた保護ルールが表示されるため、コンソールから離れることなくインシデントを調査し、ルールを調整し、対応措置を実行できます。
前提条件
作業を開始する前に、以下の条件を満たしていることを確認してください。
Log Service for WAF が有効になっていること。セットアップ手順については、「Log Service for WAF 機能の概要」をご参照ください。
ログのクエリと分析
WAF コンソールにログインします。上部ナビゲーションバーで、ご利用の WAF インスタンスがデプロイされているリソースグループとリージョン(中国本土または中国本土以外)を選択します。
左側ナビゲーションウィンドウで、セキュリティ運用 > Log Service を選択します。
ドロップダウンリストからドメイン名を選択し、ステータスをオンにして、そのドメイン名のログ収集を有効にします。ドロップダウンリスト(図中のラベル 1)には、WAF によって保護されているドメイン名のみが表示されます。必要なドメイン名がリストにない場合は、事前に WAF に追加してください。「チュートリアル」をご参照ください。

ログ検索タブで、クエリを作成して実行します。
検索ボックス(図中のラベル 1)にクエリ文を入力します。クエリ文は Log Service の検索構文を使用します。構文の詳細については、「検索構文」をご参照ください。クエリ条件として使用可能な WAF ログフィールドの完全な一覧については、「WAF でサポートされるログフィールド」をご参照ください。ガイド付きの操作を希望する場合は、検索ボックス上部の高度な検索を展開し、条件を入力して検索をクリックします。これにより、コンソールが自動的にクエリ文を生成します。利用可能な条件は以下のとおりです。
検索条件
説明
IP
リクエストを送信したクライアントの IP アドレス
リクエスト ID
WAF が各リクエストに割り当てる一意の ID。WAF はこの ID をエラーページおよびスライダー CAPTCHA ページに含めるため、トラブルシューティング時に特定のリクエストをトレースできます。
ルール ID
リクエストに一致した WAF 保護ルールの ID。セキュリティレポートページ、またはシステム管理 > 保護ルールグループでルール ID を確認できます。
サーバーのレスポンスコード
オリジンサーバーが WAF に返した HTTP ステータスコード
WAF が返したステータスコード
WAF がクライアントに返した HTTP ステータスコード
保護機能
リクエストに一致した WAF 保護ルールのタイプ。ルールタイプと構成の詳細については、「概要」をご参照ください。
(オプション)結果を集計または計算する場合は、縦棒(
|)の後に分析文を追加します。分析文は標準 SQL-92 構文を使用します。詳細については、「ログのクエリと分析の概要」をご参照ください。単に一致するログエントリを表示するだけの場合は、このステップをスキップしてください。タイムセレクター(図中のラベル 2)を使用して時間範囲を設定します。
検索と分析(図中のラベル 3)をクリックします。

結果はログヒストグラムおよび下部の生ログタブとグラフタブに表示されます。実用的なクエリ例については、「クエリと分析の例」をご参照ください。
クエリ結果の管理
ログヒストグラム
ログヒストグラムは、クエリされたログが時間軸上でどのように分布しているかを示します。

緑色の長方形にカーソルを合わせると、その範囲が表す時間帯とその時間帯内のログ数が表示されます。
緑色の長方形をクリックすると、より細かい時間分解能でドリルダウンし、生ログタブで一致するエントリを表示できます。
生ログ
生ログタブには、個別のログエントリが表示されます。

クイック分析
アイコンをクリックして、フィールド名とフィールドエイリアスの表示を切り替えます。エイリアスはインデックスを構成する際に設定されます。たとえば、host_nameのエイリアスをhostに設定した場合、エイリアス表示が有効な状態ではクイック分析リストにhostが表示されます。
フィールドにエイリアスが設定されていない場合、エイリアス表示設定に関係なく常にフィールド名が表示されます。
詳細については、「クイック分析」をご参照ください。
ログの表示とダウンロード
| 操作 | 方法 |
|---|---|
| テーブルビューと生データビューの切り替え | テーブルまたは生データ |
| ログエントリのコピー | |
| タグ詳細の表示 | |
| 複数行表示の切り替え | [新規行] |
| 時間順での並べ替え | 時間 |
| ログのダウンロード | |
| 表示設定の構成 |
グラフ
グラフタブは、分析結果を視覚化します。この機能を使用するには、クエリに分析文(SQL-92)が必要です。
| 操作 | 方法 |
|---|---|
| チャートタイプの変更 | チャートピッカーからチャートタイプを選択します。利用可能なタイプについては、「チャート設定」をご参照ください。 |
| チャートのプレビュー | チャートタイプを変更した後、チャートをプレビューします |
| ダッシュボードへの追加 | 新規ダッシュボードに追加 |
| ログのダウンロード | ログをダウンロードをクリックします。オプション:現在のページのログをダウンロード、Cloud Shell で全ログをダウンロード、コマンドラインツールで全ログをダウンロード。「ログのダウンロード」をご参照ください。 |
チャートを微調整するには、以下の設定項目を使用します。
| 設定項目 | 説明 |
|---|---|
| 一般設定 | すべてのクエリ文の結果に適用される配色など、チャート全体のグローバル設定 |
| フィールド設定 | 個別のクエリ結果またはカラムごとの表示設定(例:単一のクエリ結果に対するカスタム配色) |
| 対話発生の設定 | クエリ結果またはデータカラムのドリルダウン動作を設定し、詳細な分析を可能にします |
LogReduce
LogReduceタブで、LogReduce を有効にするをクリックすると、類似したログエントリをクラスター化してパターンを抽出できます。詳細については、「LogReduce」をご参照ください。
クエリ結果に基づく対応
ログから必要な情報を得た後、コンソールから離れることなく以下の操作を実行できます。
| 操作 | 方法 |
|---|---|
| アラートの作成 | アラートとして保存 > 新規アラートを選択します。Log Service はスケジュールに従ってルールを評価し、トリガー条件が満たされるたびに通知を送信します。構成の詳細については、「アラートルールの構成」をご参照ください。 |
| チャートのダッシュボードへの追加 | グラフタブで、新規ダッシュボードに追加をクリックします。 |
| オフライン分析用のログダウンロード | 生ログタブのダウンロードアイコン、またはグラフタブのログをダウンロードをクリックします。「ログのダウンロード」をご参照ください。 |
重要なログフィールド
以下のフィールドは、WAF ログクエリで頻繁に使用されます。フィールドの完全なリファレンスについては、「WAF でサポートされるログフィールド」をご参照ください。
| フィールド | 説明 | 有効値 |
|---|---|---|
final_plugin | リクエストに対して動作した保護機能 | waf(保護ルールエンジン)、acl(IP アドレスブラックリストおよびカスタム保護ポリシー)、cc(HTTP フラッド攻撃対策およびカスタム保護ポリシー) |
final_action | リクエストに対して実行された操作 | block、およびルール構成に応じたその他の値 |
real_client_ip | クライアントの送信元 IP アドレス。プロキシが利用中または IP ヘッダーが無効な場合、値は-になります。その場合は、remote_addrを使用してください。 | IP アドレスまたは- |
remote_addr | WAF に接続した IP アドレス | IP アドレス |
matched_host | リクエストと一致したドメイン名 | ドメイン名文字列 |
host | リクエストされたドメイン名 | ドメイン名文字列 |
request_path | リクエストパス | パス文字列 |
request_method | HTTP リクエストメソッド | GET、POST、PUT、DELETE など |
status | WAF がクライアントに返した HTTP ステータスコード | HTTP ステータスコード |
upstream_status | オリジンサーバーが WAF に返した HTTP ステータスコード | HTTP ステータスコード |
querystring | リクエストのクエリ文字列 | URL エンコードされた文字列 |
http_user_agent | クライアントのユーザーエージェント | ユーザーエージェント文字列 |
クエリと分析の例
以下の例では、一般的なセキュリティ調査シナリオをカバーしています。各例では、検索文(| の前)および分析文(| の後)を使用します。
15 分間隔での保護機能別ブロックリクエスト数
15 分間隔で、各保護機能によってブロックされたリクエスト数を表示します。
* |
SELECT
time_series(__time__, '15m', '%H:%i', '0') as time,
COUNT_if(final_plugin = 'waf') as "wafmodule",
COUNT_if(final_plugin = 'acl') as "aclmodule",
COUNT_if(final_plugin = 'cc') as "httpfloodmodule"
GROUP by
time
ORDER by
timeドメイン別の保護機能内訳
ドメイン名ごとに、各保護機能がトリガーされた回数を表示します。
* |
SELECT
count(*) as times,
host,
final_plugin
GROUP by
host,
final_plugin
ORDER by
times desc15 分間隔での秒間クエリ数 (QPS)
* |
SELECT
time_series(__time__, '15m', '%H:%i', '0') as time,
count(*) / 900 as QPS
GROUP by
time
ORDER by
timeHTTP フラッド攻撃の標的となった上位ドメイン
and acl_action :block |
SELECT
count(*) as times,
host
GROUP by
host
ORDER by
times desc最新 10 件の秒間リクエスト詳細
最新のリクエストについて、時刻、ドメイン、パス、メソッド、WAF ステータスコード、オリジンサーバーステータスコード、クエリ文字列を返します。
* |
SELECT
date_format(date_trunc('second', __time__), '%H:%i:%s') as time,
host,
request_path,
request_method,
status,
upstream_status,
querystring
LIMIT
10特定ドメインに対する最新 10 件のブロック攻撃
your_domain_nameを実際のドメイン名に置き換えてください。
matched_host: your_domain_name
and final_action: block |
SELECT
time,
real_client_ip,
http_user_agent
ORDER by
time desc
LIMIT
10特定ドメインに対する最後のブロック攻撃からの経過日数
結果は小数点以下 1 桁に四捨五入されます。
matched_host: your_domain_name
and final_action: block |
SELECT
time,
round((to_unixtime(now())-__time__) / 86400, 1) as "days_passed",
real_client_ip,
http_user_agent
ORDER by
time desc
LIMIT
10日次の攻撃傾向
date_trunc関数を使用して、攻撃のタイムスタンプを日単位でグループ化します。この関数の詳細については、「日時関数」をご参照ください。
matched_host: your_domain_name
and final_action: block |
SELECT
date_trunc('day', __time__) as dt,
count(1) as PV
GROUP by
dt
ORDER by
dt国別の攻撃内訳
ip_to_country関数を使用して、クライアントの IP アドレスを国にマッピングします。real_client_ipが-(プロキシ利用中または IP ヘッダーが無効)の場合、クエリはremote_addrを使用します。
matched_host: your_domain_name
and final_action: block |
SELECT
ip_to_country(
if(real_client_ip = '-', remote_addr, real_client_ip)
) as country,
count(1) as "Number of attacks"
GROUP by
country都道府県別の攻撃内訳
ip_to_province関数を使用して、クライアントの IP アドレスを都道府県にマッピングします。この関数の詳細については、「IP 関数」をご参照ください。
matched_host: your_domain_name
and final_action: block |
SELECT
ip_to_province(
if(real_client_ip = '-', remote_addr, real_client_ip)
) as province,
count(1) as "Number of attacks"
GROUP by
province次のステップ
WAF でサポートされるログフィールド — クエリ可能なすべてのログフィールドのリファレンス
アラートルールの構成 — 攻撃のしきい値を超えた場合の通知設定
ログのダウンロード — オフライン分析用のログエクスポート