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のパフォーマンスに関する情報を取得します。
WEBサイトの応答速度が遅い場合などに利用できます。
バックエンドから応答速度やトラフィックサイズを確認し切り分け利用できます。
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ワークスペースでアクセスログを検索してみます。
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関連のログについて纏めてみました。
アクセスログを見る事でサイトのパフォーマンスやアクセス分析をすることも出来ます。
WAFログでは検出状況も確認できる為、不正アクセスのIPアドレス抽出してブロックさせると言う事も出来そうです。
定期的にクエリを実行させる事でレポートを定期的に送付することなども出来そうです。
引き続き色々試してみたいと思います。
Azure Front Doorでのログ確認手順についてはこちらに纏めています。
バックエンド側でのApacheアクセスログについてはこちらに纏めています。