WAF で保護されたドメイン名のログ収集を有効にすると、ログ検索機能を使用して、収集したログデータをリアルタイムでクエリおよび分析できます。これらの結果から、グラフの生成、アラートの作成、その他のアクションを実行できます。
前提条件
Log Service for WAF を有効化していること。詳細については、「WAF 向け Log Service の使用開始」をご参照ください。
WAF で保護されたドメイン名のログ収集を有効化していること。詳細については、「Log Service の使用」をご参照ください。
ログのクエリと分析
WAFコンソールにログインします。 上部のナビゲーションバーで、WAFインスタンスがデプロイされているリソースグループとリージョンを選択します。 リージョンは、中国本土または中国本土以外です。
左側のナビゲーションウィンドウで、 を選択します。
ドメイン名のドロップダウンリストからドメイン名を選択し、ステータス スイッチをオンにします。
ドメイン名のドロップダウンリスト (図の ①) には、WAF で保護されたドメイン名のみが含まれます。まだドメイン名を WAF に追加していない場合は、先に追加してください。詳細については、「チュートリアル」をご参照ください。
ログ照会 タブで、検索文と分析文を使用して WAF のログデータをクエリおよび分析します。
検索ボックス (図の ①) に検索文を入力します。
検索文では、Log Service 固有の構文を使用します。構文の詳細については、「検索構文と関数」をご参照ください。検索文では、クエリフィールドとして WAF のログフィールドを使用できます。サポートされているフィールドのリストについては、「WAF ログフィールド」をご参照ください。
検索構文に慣れていない場合は、詳細検索 を使用します。検索ボックスの上にある 詳細検索 を展開し、検索条件を設定してから、検索 をクリックします。条件に一致する検索文が自動的に生成されます。次の表に、利用可能な検索条件を示します。
検索条件
説明
IP
クライアントの IP アドレス。
リクエスト ID
WAF がクライアントリクエスト用に生成する一意の ID です。WAF は、ブロックページまたはスライダー CAPTCHA チャレンジを返すときにこの ID を提供します。この ID を使用して問題をトラブルシューティングできます。
ルール ID
リクエストがトリガーした WAF 保護ルールの ID です。ルール ID は、セキュリティレポート ページまたは ページで確認できます。
[サーバーレスポンスコード]
オリジンサーバーが返した HTTP ステータスコードです。
[WAFより返されるステータスコード]
WAF がクライアントに返す HTTP ステータスコードです。
[保護機能]
リクエストが一致した WAF 保護ルールのタイプです。WAF 保護モジュールと各モジュールのルールの設定方法の詳細については、「概要」をご参照ください。
クエリ結果に対して統計分析を実行するには、検索ボックス (図の ①) の検索文の後に分析文を追加します。特定の条件を満たすログのみをクエリする場合は、この手順をスキップしてください。
分析文と検索文をパイプ (|) で区切ります。分析文では、標準の SQL-92 構文を使用します。分析文の詳細については、「ログのクエリと分析の概要」をご参照ください。
タイムピッカー (図の ②) を使用して、ログクエリの時間範囲を指定します。
[検索と分析] (図の ③) をクリックします。
クエリと分析の結果 (クエリに一致した WAF ログ) がページの下部に表示されます。結果には、ログ分布ヒストグラム、Rawログ、グラフ が含まれます。結果に基づいて、クイック分析を実行したり、グラフを生成したり、アラートを作成したりできます。詳細については、「クエリと分析結果の管理」および「アラートの作成」をご参照ください。
ログのクエリと分析のその他の例については、「クエリと分析の例」をご参照ください。
クエリと分析結果の管理
Log Service for WAF は、クエリと分析の結果をログヒストグラム、生ログ、グラフとして表示します。アラートを作成したり、クイッククエリを実行したりすることもできます。
ログヒストグラム
ログヒストグラムには、クエリしたログの時間分布が表示されます。
緑色のバーにカーソルを合わせると、対応する時間範囲と一致したログの数が表示されます。
緑色のバーをクリックすると、より詳細な時間分布が表示されます。Rawログ タブも更新され、選択した時間範囲の結果が表示されます。
生ログ
Rawログ タブで、ログクエリの詳細な結果を表示できます。
クイック分析
アイコンをクリックして、キーまたはエイリアスを表示するかを選択します。 インデックスを作成するときにエイリアスを設定できます。 たとえば、host が host_name のエイリアスである場合、[フィールドエイリアスを表示] を選択すると、クイック分析リストに host が表示されます。説明フィールドにエイリアスがない場合、[フィールドエイリアスを表示] を選択しても、そのキーがクイック分析リストに表示されます。
詳細については、「フィールド設定」をご参照ください。
ログ詳細の表示
テーブル をクリックすると、ログが表形式で表示されます。
Raw Data をクリックすると、生ログが表示されます。
アイコンをクリックしてログをコピーします。
アイコンをクリックしてタグの詳細を表示します。
ラップ をクリックして、ログ表示の折り返しを切り替えます。
時間 をクリックすると、ログが時系列で表示されます。
アイコンをクリックして、ログをローカルコンピューターにダウンロードします。Cloud Shell を使用するか、コマンドラインツールを使用して、ログを直接ダウンロードできます。詳細については、「ログのダウンロード」をご参照ください。
アイコンをクリックして、[タグ設定]、[列設定]、[JSON 設定]、イベントの設定 を設定します。
グラフ
グラフ タブでは、クエリと分析結果を可視化したグラフを表示できます。このタブで対応するグラフを表示するには、検索ボックスに SQL-92 分析文を入力する必要があります。
グラフタイプの切り替え:別のグラフタイプを選択して、分析結果を表示します。さまざまなグラフタイプの詳細については、「グラフ」をご参照ください。
グラフのプレビュー:グラフタイプを切り替えた後、表示をプレビューできます。
ダッシュボードに追加 をクリックして、現在のグラフをダッシュボードに追加します。ログのダウンロード をクリックして、ログをローカルコンピューターにダウンロードします。このページのログをダウンロードします。、Cloud Shell でダウンロード、または コマンドラインツールからすべてのログをダウンロードする。 を選択できます。詳細については、「ログのダウンロード」をご参照ください。
グラフ設定の変更
操作
説明
グラフのグローバル設定を行います。たとえば、配色を選択すると、グラフ全体でその配色が使用されます。
単一のクエリの結果または結果内の単一の列に対して、個別の表示設定を行います。たとえば、特定のクエリ結果を選択し、グラフの対応する部分にのみ配色を適用できます。
単一のクエリ結果またはクエリ結果内の単一の列に対して、より詳細な分析を行うためのインタラクションを設定します。
LogReduce
LogReduce タブで LogReduce の有効化 をクリックして、ログ収集中に類似ログをクラスタリングします。詳細については、「LogReduce」をご参照ください。
アラートの作成
現在の検索文と分析文に基づいてアラートを作成できます。アラートを作成すると、Log Service は定期的にクエリ結果を評価します。結果が指定されたトリガー条件を満たす場合、Log Service が通知を送信します。これにより、サービスステータスをリアルタイムで監視できます。
クエリと分析のページで、新規アラームに保存 > [新規アラート] を選択して、クエリ結果に基づいてアラートを作成します。詳細については、「アラートの設定」をご参照ください。
クエリと分析の例
異なる WAF 保護モジュールがブロックした攻撃リクエストの数を 15 分間隔で分析します。結果には、時間 (time) のほか、WAF ルールエンジン (wafmodule)、IP アドレスブラックリストとカスタムアクセスコントロールリスト (ACL) ポリシー (aclmodule)、HTTP フラッド攻撃対策 (httpfloodmodule) の各モジュールがブロックしたリクエストの数が表示されます。
* | 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最終的なアクションをトリガーした保護モジュールタイプ (final_plugin) の分布を分析します。結果には、ヒット数 (times)、リクエスト先のドメイン名 (host)、および最終的な保護モジュール (final_plugin) が表示されます。
* | SELECT count(*) as times, host, final_plugin GROUP by host, final_plugin ORDER by times desc秒間クエリ数 (QPS) を 15 分間隔で分析します。結果には、時間 (time) と QPS が表示されます。
* | SELECT time_series(__time__, '15m', '%H:%i', '0') as time, count(*) / 900 as QPS GROUP by time ORDER by timeHTTP フラッド攻撃の標的になることが多いドメイン名を検索します。結果には、ブロックされたリクエストの数 (times) とリクエスト先のドメイン名 (host) が表示されます。
* and final_plugin: 'cc' | SELECT count(*) as times, host GROUP by host ORDER by times descWeb サイトリクエストログの詳細を 1 秒間隔で分析します。結果には、時間 (time)、リクエスト先のドメイン名 (host)、リクエストパス (request_path)、リクエストメソッド (request_method)、WAF 応答ステータスコード (status)、オリジンサーバー応答ステータスコード (upstream_status)、およびクエリ文字列 (querystring) が表示されます。
* | SELECT date_format(date_trunc('second', __time__), '%H:%i:%s') as time, host, request_path, request_method, status, upstream_status, querystring LIMIT 10Web サイト (your_domain_name) への最新の攻撃リクエストレコードを 10 件クエリします。結果には、リクエスト時刻 (time)、実際のクライアント IP (real_client_ip)、およびクライアントタイプ (http_user_agent) が表示されます。
matched_host: your_domain_name and final_action: block | SELECT time, real_client_ip, http_user_agent ORDER by time desc LIMIT 10Web サイト (your_domain_name) への攻撃リクエストが WAF にブロックされてから経過した日数 (days_passed) を分析します。この値は小数点第 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 10Web サイト (your_domain_name) への攻撃リクエストの日次傾向を分析します。
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 dtdate_trunc 関数は、タイムスタンプを日単位でグループ化するために使用されます。この関数の詳細については、「日付および時刻関数」をご参照ください。
Web サイト (your_domain_name) への攻撃リクエストの送信元国 (country) の分布を分析します。
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 countryWAF ログでは、
real_client_ipフィールドは実際のクライアント IP を表します。ユーザーのプロキシサーバー経由でのアクセスや、リクエストヘッダー内の IP フィールドが正しくないなどの理由で実際のクライアント IP を取得できず、real_client_ipの値が-になる場合は、リモートアドレスを表すremote_addrフィールドを実際のクライアント IP として使用できます。Web サイト (your_domain_name) への攻撃リクエストの送信元省 (province) の分布を分析します。
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 provinceip_to_province 関数は、実際のクライアント IP の省情報を取得します。この関数の詳細については、「IP 関数」をご参照ください。