Azure Application GatewayのアクセスログをLog Analyticsで確認
Azure Application Gateway(アプリケーションゲートウェイ)のログ(アクセスログ、WAFログ)の収集方法と、それらのログを検索する手順の紹介です。
Azure Application Gatewayのログは診断設定を使用して、Azure Monitorログ(Log Analyticsワークスペース)などのリソースに収集できます。
ログを収集するための診断設定、収集されるログの内容、KQL(Kusto Query Language)を利用したログ検索方法について確認します。
WAF(Azure Web Application Firewall)のログについても確認します。
Azure Application Gatewayのサービス概要からリソースの作成手順はこちらに纏めています。
※2022年7月にv2を加筆修正しました。
Azure Application Gatewayで取得できるログ
Azure Application Gatewayではアクセスログ関連のログや操作やリソース操作に関するログを取得できます。
Azure Application Gateway データの監視のリファレンス
Activity Log(アクテビティログ)
リソースの設定変更などのリソース操作に関するログを、Activity Log(アクテビティログ)として収集します。
ログ検索時には"AzureActivity"と指定します。
Activity Log(アクテビティログ) | |
AzureActivity | Azure Application Gatewayのリソース操作などに関するログを収集します。 |
AzureActivityの検索結果(Cerateを条件に検索) |
Azure Diagnostics(アクセスログやWAFログ)
Azure Application Gatewayを経由するアクセス(トラフィック)に関するログを収集します。
-
- ApplicationGatewayAccessLog:アクセスログ(WAFの利用有無関わらず記録される)
- ApplicationGatewayFirewallLog:WAFログ(WAF利用時のみ記録される)
Azure Diagnostics | |
ApplicationGatewayAccessLog | アクセス時間や呼び出し元の IP、要求されたURL、ステータスコード、バックエンド転送先などのトラフィック処理に関する内容を記録します。 |
ApplicationGatewayFirewallLog | WAFルールにマッチしたトラフィックやブロックした内容を記録します。 |
ApplicationGatewayAccessLogの検索結果 |
※V1にのみ含まれる項目として"ApplicationGatewayPerformanceLog"があります。リソースのパフォーマンス状況やバックエンドの正常性等の情報を記録します。
AllMetrics(メトリック)
Azure Application Gatewayのパフォーマンスに関する情報を取得します。
ログの内容にはトラフィック状況も含まれます。
バックエンドからの応答速度をログから確認して、サイトの応答速度が遅い原因の切り分けと言った事に活用できます。
Azure Application Gateway データの監視のリファレンス(Application Gateway V2 のメトリック)
All Metrics | |
AllMetrics | パフォーマンス情報(処理された要求の総数、スループット (バイト単位)、応答速度等)を確認できます。 パフォーマンス情報にはバックエンド、フロントエンドそれぞれの通信に関する内容が含まれます。 バックエンド正常性などの情報もメトリックに含まれます。 |
AllMetricsの検索結果 |
Azure Application Gatewayのアクセスログで出力される項目
アクセスログで取得される項目の抜粋です。
ログには多くの項目が含まれています。
Application Gateway と WAF v2 SKU の場合
※project句を利用して表示項目を抜粋しています。
今回利用したAzure Application Gatewayはこちらで構築したものを利用しています。
概要やリソース自体の構築手順についてはこちらに纏めています。
—広告—
Azure Application Gatewayのログ取得には診断設定を使う
ログをAzure Monitorログ(Log Analyticsワークスペース)へ転送する場合は診断設定を使います。
診断設定で取得対象のログを指定します。
※Log AnalyticsワークスペースはAzure Application Gatewayと同じ地域のリソースを使用します。
※ログ転送先にはストレージアカウント、イベントハブなども指定できます。
Azure Application GatewayのアクセスログをKQLで検索
Log Analyticsワークスペースでアクセスログを検索
Log Analyticsワークスペースでアクセスログを検索します。
Application Gatewayのログのメニューや診断設定で指定したLog Analyticsワークスペースで検索できます。
アクセスログはAzureDiagnosticsに含まれます。
カテゴリー(Category)には"ApplicationGatewayAccessLog"を指定します。
ログ検索の実行結果はCSVとして出力できる
ログ検索の実行結果はCSV形式で出力できます。
診断設定 | |
エクスポート使うと、CSVなどの形式でエクスポートできます。 |
時間指定してアクセスログを検索する
Log Analyticsワークスペースでログ検索する時、デフォルトの検索対象時間は24時間になります。
ago(時間)を使用して、現在からの時間範囲を指定できます。
AzureDiagnostics | where TimeGenerated > ago(24h) | where Category == “ApplicationGatewayAccessLog" |
時間帯を指定する場合はbetweenを使います。
Timezoneもextendを利用して指定できます。
日本時間(UTC+9時間)で指定するようにlocaltimestampという項目を追加しています。
出力結果を日本時間(order by localTimestamp)で並び替えています。
AzureDiagnostics | where Category contains “ApplicationGatewayAccessLog" | extend localTimestamp = TimeGenerated + 9h | where localTimestamp between(datetime(“202x-07-15 15:00:00") .. datetime(“202x-07-15 16:00:00")) | order by localTimestamp |
アクセス元IP単位でアクセス数を集計
アクセス元のIPアドレスは、clientIP_sに含まれます。
count() by clientIP_sとする事でアクセス元IP単位のアクセス数を集計できます。
AzureDiagnostics | where Category == “ApplicationGatewayAccessLog" | summarize total_hits = count() by clientIP_s |
アクセスURI単位でアクセス数を集計
URI単位でのアクセス集計もできます。
アクセスがあったURIはrequestUri_sに含まれます。
AzureDiagnostics | where Category == “ApplicationGatewayAccessLog" | summarize count() by requestUri_s |
IPアドレスからロケーション情報を取得し国別アクセス集計と言った事もできます。
IPアドレスから国を識別する方法についてはこちらで紹介しています。
ーーーー
Azure Web アプリケーション ファイアウォール(WAF)で取得できるログ
Azure Application GatewayのWAF設定手順についてはこちらで紹介しています。
WAFのログはカテゴリがApplicationGatewayFirewallLogになる
アクセスログと同様に、WAFログもAzureDiagnosticsに含まれます。
WAFログの場合はカテゴリー(Category)が"ApplicationGatewayFirewallLog"になります。
AzureDiagnostics | where Category == “ApplicationGatewayFirewallLog" |
WAFのログに含まれる出力項目
カテゴリがApplicationGatewayFirewallLogとして出力されるWAFログの抜粋です。
各出力項目の詳細は公式サイトを参照ください。
Azure Web アプリケーション ファイアウォールのリソース ログ(ファイアウォール ログ)
項目名 | 実際に取得される値 | 説明 |
TimeGenerated | 202x/7/15 5:17:00.000 | ログの時間 |
Category | ApplicationGatewayFirewallLog | ログ種別 |
Resource | APGW-TEST | Azure Application Gateway名(リソース名) |
host_s | www.tama-negi.com XXX.XXX.XXX.XXX(フロントエンドのIP) |
アクセスされたホスト名もしくはIPアドレス |
clientIP_s | XXX.XXX.XXX.XXX(アクセス元のIPアドレス) | アクセス元のIPアドレス |
action_s | Blocked,Detected,Matched,Allowed | WAFルールの処理内容 アクセス拒否された場合はBlockedと表示されます |
ruleSetType_s | OWASP_CRS,Custom | ルール セットの種類 カスタムルールの場合はCustomと表示されます |
ruleSetVersion_s | 3.1.0 | 使用されるルール セットのバージョン |
ruleId_s | 920350,testapgwwafblock01 | イベントの発生起因となっているWAFのルール ID カスタムルールの場合はルール名が表示されます |
Message | Host header is a numeric IP address | ルールの概要メッセージ |
details_message_s | Warning. Pattern match \"^[\\d.:]+$\" at REQUEST_HEADERS:Host …. | ルールの詳細内容 |
policyScope_s | Listener | ポリシーのスコープ |
policyScopeName_s | APGW-TEST-Listener | 適用されているスコープ名 |
※クエリ実行結果はproject句を利用して表示項目を抜粋てしています。
WAFでの検知件数を確認する
検知モード(Detected)で検知されたアクセスを集計できます。
検知件数をIP単位で集計する事もできます。
クエリのサンプルは公式サイトでも紹介されています。
Log Analytics を使用して Application Gateway Web アプリケーション ファイアウォール (WAF) のログを調べる
AzureDiagnostics |
最後に
Azure Application Gatewayで取得できるログについて確認してみました。
診断設定を使って、Log Analyticsワークスペースへログ転送して検索できる事が分かりました。
アクセスログには多くの情報が含まれており、アクセス分析やサイトのパフォーマンスのグラフ化と言った事もできそうです。
Log Analyticsワークスペースへログを収集する事によって、定期的にクエリを実行してレポート送付などといった事もできます。
WAFログでは検出状況も確認できる事が分かりました。
不正なアクセスを行っているIPアドレスを抽出して、ブロックさせると言う事もできそうです。
引き続き色々試してみたいと思います。
Azure Front Doorでのログ確認手順についてはこちらに纏めています。
Logic Appsを使ったLog Analyticsワークスペースのログ検索自動化方法についてはこちらで紹介しています。
バックエンド側でのApacheアクセスログについてはこちらで紹介しています。