Azure Application GatewayのアクセスログをLog Analyticsで確認

2019-07-15Application Gateway,Azure,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を条件に検索)

Application Gatewayのアクティビティログ確認結果画面

Azure Diagnostics(アクセスログやWAFログ)

Azure Application Gatewayのアクセスに関するログを収集します。

    • ApplicationGatewayAccessLog:アクセスログ(WAFの利用有無関わらず記録される)
    • ApplicationGatewayFirewallLog:WAFログ(WAF利用時のみ記録される)
Azure Diagnostics
ApplicationGatewayAccessLog アクセス時間や呼び出し元の IP、要求されたURL、ステータスコード、バックエンド転送先等トラフィック処理に関する内容が記録されます。
ApplicationGatewayFirewallLog トラフィックの中でWAFルールにマッチしたやブロック内容が記録されます。

ApplicationGatewayAccessLogの検索結果

ApplicationGatewayAccessLogの検索結果画面

※V1にのみ含まれる項目として"ApplicationGatewayPerformanceLog"があります。リソースのパフォーマンス状況やバックエンドの正常性等の情報が記録されます。

AllMetrics(メトリック)

Azure Application Gatewayのパフォーマンスに関する情報を取得します。
WEBサイトの応答速度が遅い場合などに利用できます。
バックエンドから応答速度やトラフィックサイズを確認し切り分け利用できます。

Azure Application Gateway データの監視のリファレンス(Application Gateway V2 のメトリック)

All Metrics
AllMetrics パフォーマンス情報(処理された要求の総数、スループット (バイト単位)、応答速度等)が確認できます。
パフォーマンス情報にはバックエンド、フロントエンドそれぞれの通信に関する内容が含まれます。
バックエンド正常性等の情報もメトリックに含まれます。

AllMetricsの検索結果

Application GatewayのAllMetrics検索結果画面

Azure Application Gatewayのアクセスログ出力項目

アクセスログで取得される項目の抜粋です。
多くの項目がログとして取得出来る事が分かります。

Application Gateway と WAF v2 SKU の場合

項目名 取得値(例) 説明
TimeGenerated 202x/7/15 5:17:00.000 ログの時間
Category ApplicationGatewayAccessLog ログ種別
Resource APGW-TEST Azure Application Gateway名(リソース名)
host_s www.tama-negi.com
XXX.XXX.XXX.XXX(フロントエンドのIP)
アクセスされたホスト名もしくはIPアドレス
listenerName_s APGW-TEST-Listener 受信したリスナー名
clientIP_s XXX.XXX.XXX.XXX(アクセス元のIPアドレス) アクセス元のIPアドレス
serverRouted_s 10.0.2.5:80 トラフィック転送先のIPアドレスとポート番号
requestUri_s / アクセスパス
userAgent_s Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36 ユーザーエージェント情報
httpMethod_s GET HTTPアクセスメソッド
httpStatus_d 200 応答のHTTPステータスコード
timeTaken_d 0.004  フロントエンド側の応答時間
serverResponseLatency_s 0.004 バックエンド側の応答時間
ruleName_s APGW-TEST-Rule Azure Application Gatewayのルール名
backendPoolName_s  APGW-TEST-BackendPool Azure Application Gatewayのバックエンドプール名
backendSettingName_s APGW-TEST-Backend Azure Application Gatewayのバックエンド設定名
Azure Application Gatewayのアクセスログ検索結果画面

※project句を利用して表示項目を抜粋しています。

今回利用したAzure Application Gatewayはこちらで構築したものを利用しています。
概要やリソース自体の構築手順についてはこちらに纏めています。

—広告—

Azure Application Gatewayのログ取得は診断設定を使う

ログをAzure Monitorログ(Log Analyticsワークスペース)へ転送する場合は診断設定を使います。
診断設定で取得対象のログを指定します。

※Log AnalyticsワークスペースはAzure Application Gatewayと同じ地域のもの使用します。
※ログ転送先にはストレージアカウント、イベントハブなども指定できます。

診断設定
リソースメニューで診断設定を選択します。
“診断設定を追加する"を選択します。

Application Gatewayの診断設定画面

診断設定では転送先リソース、転送するログの種別を設定します。
今回はログのカテゴリはすべてを選択します。
Log Analyticsワークスペースへの送信にチェックを入れます。
転送先のLog Analyticsワークスペースを選択します。

※転送開始まで5分~10分程度かかります。(メトリックの方が収集開始まで若干時間かかるようです。)

Application Gatewayの診断設定画面(ログを指定)

Azure Application GatewayのアクセスログをKQLクエリで検索

アクセスログを検索

Log Analyticsワークスペースでアクセスログを検索してみます。
Application Gatewayのログのメニューか診断設定で指定したLog Analyticsワークスペースから検索できます。
アクセスログはAzureDiagnosticsに含まれ、カテゴリー(Category)が"ApplicationGatewayAccessLog"となります。

アクセスログを検索

リソースメニューでログをクリックします。
診断設定で指定したLog Analyticsワークスペースが表示されます。
クエリ入力欄に入力する事でログ検索ができます。

アクセスログは"AzureDiagnostics"に含まれます。
カテゴリが"ApplicationGatewayAccessLog"のログがアクセスログになります。
where句で"ApplicationGatewayAccessLog"に絞り検索を実行するとアクセスログが出力されます。
AzureDiagnostics
| where 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 適用されているスコープ名
Application Gateway(WAF)のログ検索結果画面

※クエリ実行結果はproject句を利用して表示項目を抜粋てしています。

WAFでの検知件数を確認する

検知モード(Detected)で検知されたアクセスを集計する事もできます。
IP単位での集計もできます。
クエリのサンプルは公式サイトで確認出来ます。

Log Analytics を使用して Application Gateway Web アプリケーション ファイアウォール (WAF) のログを調べる

AzureDiagnostics
| where Category == “ApplicationGatewayFirewallLog"
| where action_s contains “Detected"
| summarize count()by clientIp_s

最後に

Azure Application Gateway関連のログについて纏めてみました。
アクセスログを見る事でサイトのパフォーマンスやアクセス分析をすることも出来ます。
WAFログでは検出状況も確認できる為、不正アクセスのIPアドレス抽出してブロックさせると言う事も出来そうです。

定期的にクエリを実行させる事でレポートを定期的に送付することなども出来そうです。
引き続き色々試してみたいと思います。

Azure Front Doorでのログ確認手順についてはこちらに纏めています。

バックエンド側でのApacheアクセスログについてはこちらに纏めています。

スポンサーリンク