Azure Web アプリケーション ファイアウォールのリソース ログ
ログを使用して、Web アプリケーション ファイアウォールのリソースを監視することができます。 リソースのパフォーマンス、アクセス、その他のデータを保存し、監視のために使用することができます。
注意
Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。
診断ログ
Azure の各種ログを使用して、アプリケーション ゲートウェイの管理とトラブルシューティングを行うことができます。 一部のログにはポータルからアクセスできます。 どのログも Azure Blob Storage から抽出し、Azure Monitor ログ、Excel、Power BI などのさまざまなツールで表示できます。 各種ログの詳細については、以下の一覧を参照してください。
- アクティビティ ログ:Azure アクティビティ ログ を使用すると、Azure サブスクリプションに送信されるすべての操作とその状態を表示できます。 アクティビティ ログ エントリは既定で収集され、Azure Portal で表示できます。
- アクセス リソース ログ: このログを使用して Application Gateway のアクセス パターンを表示し、重要な情報を分析できます。 これには、呼び出し元の IP、要求された URL、応答の待機時間、リターン コード、入出力バイト数が含まれます。このログには、要求ごとに個別のレコードが含まれており、その要求が、要求を処理した一意の Application Gateway に関連付けられています。 Application Gateway のインスタンスは、instanceId プロパティで識別できます。
- パフォーマンス リソース ログ: このログを使用すると、Application Gateway のインスタンスの実行状況を確認できます。 このログでは、インスタンスごとのパフォーマンス情報 (処理された要求の総数、スループット (バイト単位)、失敗した要求の数、正常および異常なバックエンド インスタンスの数など) が取得されます。 パフォーマンス ログは 60 秒ごとに収集されます。 パフォーマンス ログは v1 SKU でのみ使用できます。 v2 SKU の場合は、パフォーマンス データにメトリックを使用します。
- ファイアウォール リソース ログ: このログを使用すると、Web アプリケーション ファイアウォールが構成された Application Gateway の、検出モードまたは防止モードでログに記録された要求を表示することができます。
Note
ログは、Azure Resource Manager デプロイ モデルでデプロイされたリソースについてのみ使用できます。 クラシック デプロイ モデルのリソースには使用できません。 2 つのモデルについて理解を深めるには、「Resource Manager デプロイとクラシック デプロイ」を参照してください。
ログを保存するための 3 つのオプションがあります。
- ストレージ アカウント: ストレージ アカウントは、ログを長期間保存し、必要に応じて参照する場合に最適です。
- イベント ハブ:イベント ハブは、他のセキュリティ情報/イベント管理 (SIEM) ツールと統合してリソースに関するアラートを取得する場合に便利なオプションです。
- Azure Monitor ログ: Azure Monitor ログは、アプリケーションをリアルタイムに監視したり、傾向を見たりする一般的な用途に最適です。
PowerShell を使用したログの有効化
アクティビティ ログは、Resource Manager のすべてのリソースで自動的に有効になります。 アクセス ログとパフォーマンス ログで使用可能なデータの収集を開始するには、これらのログを有効にする必要があります。 ログ記録を有効にするには、次の手順に従います。
ログ データを保存するストレージ アカウントのリソース ID をメモしておきます。 この値の形式は、/subscriptions/<サブスクリプション ID>/resourceGroups/<リソース グループ名>/providers/Microsoft.Storage/storageAccounts/<ストレージ アカウント名> です。 サブスクリプション内の任意のストレージ アカウントを使用できます。 この情報は、Azure Portal で確認できます。
ログを有効にするアプリケーション ゲートウェイのリソース ID をメモしておきます。 この値の形式は、/subscriptions/<サブスクリプション ID>/resourceGroups/<リソース グループ名>/providers/Microsoft.Network/applicationGateways/<Application Gateway 名> です。 この情報は、ポータルで確認できます。
次の PowerShell コマンドレットを使用して、リソース ログを有効にします。
Set-AzDiagnosticSetting -ResourceId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name> -StorageAccountId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name> -Enabled $true
ヒント
アクティビティ ログでは別のストレージ アカウントは "必要" ありません。 アクセス ログとパフォーマンス ログにストレージを使用すると、サービス料金が発生します。
Azure Portal を使用したログの有効化
Azure portal で、ご使用のリソースを見つけ、 [診断設定] を選択します。
Application Gateway では、次の 3 つのログを使用できます。
- アクセス ログ
- パフォーマンス ログ
- ファイアウォール ログ
[診断設定の追加] を選択します。
[診断設定] ページに、リソース ログの設定が表示されます。 この例では、Log Analytics を使用してログを保存します。 イベント ハブ、ストレージ アカウント、またはパートナー ソリューションを使用して、リソース ログを保存することもできます。
設定の名前を入力し、設定を確認した後、 [保存] を選択します。
アクティビティ ログ
アクティビティ ログは、既定では Azure によって生成されます。 ログは、Azure のイベント ログ ストアに 90 日間保存されます。 これらのログの詳細については、「イベントとアクティビティ ログの表示」を参照してください。
アクセス ログ
アクセス ログは、前の手順で示したように、Application Gateway のインスタンスごとにログを有効にした場合にのみ生成されます。 データは、ログ記録を有効にしたときに指定したストレージ アカウントに格納されます。 次の v1 の例に示すように、Application Gateway の各アクセスは JSON 形式でログに記録されます。
値 | 説明 |
---|---|
instanceId | 要求を処理した Application Gateway のインスタンス。 |
clientIP | 要求の送信元 IP。 |
clientPort | 要求の送信元ポート。 |
httpMethod | 要求で使用される HTTP メソッド。 |
requestUri | 受信した要求の URI。 |
RequestQuery | Server-Routed: 要求が送信されたバックエンド プールのインスタンス。 X-AzureApplicationGateway-LOG-ID: 要求に使用される関連付け ID。 この ID を使用すると、バックエンド サーバー上のトラフィックの問題をトラブルシューティングできます。 SERVER-STATUS: Application Gateway でバックエンドから受信した HTTP 応答コード。 |
UserAgent | HTTP 要求ヘッダーからのユーザー エージェント。 |
httpStatus | Application Gateway からクライアントに返される HTTP 状態コード。 |
httpVersion | 要求の HTTP バージョン。 |
receivedBytes | 受信したパケットのサイズ (バイト単位)。 |
sentBytes | 送信したパケットのサイズ (バイト単位)。 |
timeTaken | 要求の処理および応答の送信にかかった時間 (ミリ秒単位)。 これは、Application Gateway がHTTP 要求の最初のバイトを受信してから、応答の送信操作が完了するまでの間隔として計算されます。 通常、timeTaken フィールドには、要求パケットと応答パケットがネットワーク経由で移動する時間が含まれています。 |
sslEnabled | バックエンド プールへの通信に TLS または SSL を使用するかどうか。 有効な値は on と off です。 |
host | 要求がバックエンド サーバーに送信されたときに使用されたホスト名。 バックエンドのホスト名が上書きされている場合、この名前にそのことが反映されます。 |
originalHost | Application Gateway がクライアントから要求を受信したときに使用されたホスト名。 |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayAccess",
"timestamp": "2017-04-26T19:27:38Z",
"category": "ApplicationGatewayAccessLog",
"properties": {
"instanceId": "ApplicationGatewayRole_IN_0",
"clientIP": "203.0.113.97",
"clientPort": 46886,
"httpMethod": "GET",
"requestUri": "/phpmyadmin/scripts/setup.php",
"requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e&SERVER-STATUS=404",
"userAgent": "-",
"httpStatus": 404,
"httpVersion": "HTTP/1.0",
"receivedBytes": 65,
"sentBytes": 553,
"timeTaken": 205,
"sslEnabled": "off",
"host": "www.contoso.com",
"originalHost": "www.contoso.com"
}
}
Application Gateway と WAF v2 の場合、ログにはさらにいくつかの情報が表示されます。
値 | 説明 |
---|---|
instanceId | 要求を処理した Application Gateway のインスタンス。 |
clientIP | 要求の送信元 IP。 |
clientPort | 要求の送信元ポート。 |
httpMethod | 要求で使用される HTTP メソッド。 |
requestUri | 受信した要求の URI。 |
UserAgent | HTTP 要求ヘッダーからのユーザー エージェント。 |
httpStatus | Application Gateway からクライアントに返される HTTP 状態コード。 |
httpVersion | 要求の HTTP バージョン。 |
receivedBytes | 受信したパケットのサイズ (バイト単位)。 |
sentBytes | 送信したパケットのサイズ (バイト単位)。 |
timeTaken | 要求の処理および応答の送信にかかった時間 (ミリ秒単位)。 これは、Application Gateway がHTTP 要求の最初のバイトを受信してから、応答の送信操作が完了するまでの間隔として計算されます。 通常、timeTaken フィールドには、要求パケットと応答パケットがネットワーク経由で移動する時間が含まれています。 |
sslEnabled | バックエンド プールへの通信に TLS を使用するかどうか。 有効な値は on と off です。 |
sslCipher | TLS 通信に使用されている暗号スイート (TLS が有効な場合)。 |
sslProtocol | 使用されている TLS プロトコル (TLS が有効な場合)。 |
serverRouted | アプリケーション ゲートウェイから要求がルーティングされる先のバックエンド サーバー。 |
serverStatus | バックエンド サーバーの HTTP 状態コード。 |
serverResponseLatency | バックエンド サーバーからの応答の待機時間。 |
host | 要求のホスト ヘッダーに表示されているアドレス。 |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayAccess",
"time": "2017-04-26T19:27:38Z",
"category": "ApplicationGatewayAccessLog",
"properties": {
"instanceId": "appgw_1",
"clientIP": "203.0.113.97",
"clientPort": 46886,
"httpMethod": "GET",
"requestUri": "/phpmyadmin/scripts/setup.php",
"userAgent": "-",
"httpStatus": 404,
"httpVersion": "HTTP/1.0",
"receivedBytes": 65,
"sentBytes": 553,
"timeTaken": 205,
"sslEnabled": "off",
"sslCipher": "",
"sslProtocol": "",
"serverRouted": "104.41.114.59:80",
"serverStatus": "200",
"serverResponseLatency": "0.023",
"host": "www.contoso.com",
}
}
パフォーマンス ログ
パフォーマンス ログは、前の手順で示したように、Application Gateway のインスタンスごとにログを有効にした場合にのみ生成されます。 データは、ログ記録を有効にしたときに指定したストレージ アカウントに格納されます。 パフォーマンス ログ データは、1 分間隔で生成されます。 これは v1 SKU でのみ使用できます。 v2 SKU の場合は、パフォーマンス データにメトリックを使用します。 次のデータがログに記録されます。
値 | 説明 |
---|---|
instanceId | パフォーマンス データを生成中の Application Gateway のインスタンス。 複数インスタンスの Application Gateway の場合、インスタンスごとに 1 行が使用されます。 |
healthyHostCount | バックエンド プール内の正常なホストの数。 |
unHealthyHostCount | バックエンド プール内の異常なホストの数。 |
requestCount | 処理された要求の数。 |
latency | インスタンスから要求を処理するバックエンドへの要求の平均待機時間 (ミリ秒単位)。 |
failedRequestCount | 失敗した要求の数。 |
throughput | 最後のログ以降の平均スループット (1 秒あたりのバイト数)。 |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayPerformance",
"time": "2016-04-09T00:00:00Z",
"category": "ApplicationGatewayPerformanceLog",
"properties":
{
"instanceId":"ApplicationGatewayRole_IN_1",
"healthyHostCount":"4",
"unHealthyHostCount":"0",
"requestCount":"185",
"latency":"0",
"failedRequestCount":"0",
"throughput":"119427"
}
}
Note
待機時間は、HTTP 要求の最初のバイトが受信されたときから、HTTP 応答の最後のバイトが送信されたときまでで計算されます。 これは、Application Gateway の処理時間、バックエンドへのネットワーク コスト、およびバックエンドが要求の処理に要した時間を加えたものです。
ファイアウォール ログ
ファイアウォール ログは、前の手順で示したように、Application Gateway のインスタンスごとにログを有効にした場合にのみ生成されます。 このログを使用するには、Application Gateway で Web アプリケーション ファイアウォールを構成する必要もあります。 データは、ログ記録を有効にしたときに指定した宛先に格納されます。 次のデータがログに記録されます。
値 | 説明 |
---|---|
instanceId | ファイアウォール データを生成中の Application Gateway のインスタンス。 複数インスタンスの Application Gateway の場合、インスタンスごとに 1 行が使用されます。 |
clientIp | 要求の送信元 IP。 |
requestUri | 受信した要求の URL。 |
ruleSetType | ルール セットの種類。 使用できる値は OWASP です。 |
ruleSetVersion | 使用されるルール セットのバージョン。 使用できる値は 2.2.9 と 3.0 です。 |
ruleId | トリガーするイベントのルール ID。 |
message | トリガーするイベントのわかりやすいメッセージ。 詳細は details セクションに示されます。 |
action | ポリシー モード: 検出 - 検出済み - これは、検出モードの場合の WAF の唯一のアクションです。 特定のルールのすべての条件が一致し、要求がログに記録され、バックエンドに渡されました。 ポリシー モード: 防止 - 許可 - 特定のルールに対してすべての条件が一致し、要求がバックエンドに渡されました。 - ブロック - 特定のルールに対してすべての条件が一致し、要求がブロックされました。 - 一致済み - 特定のルールに対して 1 つ以上の条件が一致しましたが、要求をブロックまたは渡す決定についてさらに評価する必要があり、最終的な異常スコアリング ルールに基づいて評価されます。 ポリシー モード: JS チャレンジ - JSChallengeIssued: チャレンジ クリアランスがないか無効のため、または応答がないために発行されました。 このログは、クライアントが初めて Web アプリケーションへのアクセスを要求し、以前にチャレンジが行われていない場合に作成されます。 このクライアントは JS チャレンジ ページを受け取り、JS チャレンジの計算に進みます。 計算が成功すると、クライアントには有効性 Cookie が付与されます。 - JSChallengePass: 有効なチャレンジ応答のため、合格しました。 このログは、クライアントが JS チャレンジを解決し、正しい応答で要求を再送信したときに作成されます。 この場合、Azure WAF は Cookie を検証し、別の JS チャレンジを生成せずに残りのルールの処理に進みます。 - JSChallengeValid: 有効なチャレンジのため、ログおよびパススルーされました このログは、クライアントが以前にチャレンジを解決したときに作成されます。 この場合、Azure WAF は要求をログに記録し、残りのルールの処理に進みます。 - JSChallengeBlock: ブロックされました このログは、JS チャレンジの計算に失敗したときに作成されます。 |
サービス拠点 | ログの生成対象のサイト。 ルールがグローバルであるため、現時点では Global のみ表示されます。 |
details | トリガーするイベントの詳細。 |
details.message | ルールの説明。 |
details.data | 要求で見つかった、ルールに一致するデータ。 |
details.file | ルールが含まれている構成ファイル。 |
details.line | イベントをトリガーした、構成ファイル内の行番号。 |
hostname | Application Gateway のホスト名または IP アドレス。 |
transactionId | 同じ要求内で発生した複数の規則違反をグループ化するのに役立つ、指定されたトランザクションの一意の ID。 |
policyId | Application Gateway、リスナー、またはパスに関連付けられているファイアウォール ポリシーの一意の ID。 |
policyScope | ポリシーの場所。値は、"Global"、"Listener"、"Location" のいずれかです。 |
policyScopeName | ポリシーが適用されるオブジェクトの名前。 |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayFirewall",
"time": "2017-03-20T15:52:09.1494499Z",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "ApplicationGatewayRole_IN_0",
"clientIp": "203.0.113.147",
"requestUri": "/",
"ruleSetType": "OWASP",
"ruleSetVersion": "3.0",
"ruleId": "920350",
"ruleGroup": "920-PROTOCOL-ENFORCEMENT",
"message": "Host header is a numeric IP address",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \"^[\\\\d.:]+$\" at REQUEST_HEADERS:Host ....",
"data": "127.0.0.1",
"file": "rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
"line": "791"
},
"hostname": "127.0.0.1",
"transactionId": "16861477007022634343",
"policyId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/perListener",
"policyScope": "Listener",
"policyScopeName": "httpListener1"
}
}
}
アクティビティ ログの表示と分析
次のいずれかの方法を使用して、アクティビティ ログのデータを表示および分析できます。
- Azure Tools:Azure PowerShell、Azure CLI、Azure REST API、または Azure portal を使用して、アクティビティ ログから情報を取得します。 それぞれの方法の詳細な手順については、「リソース マネージャーの監査操作」を参照してください。
- Power BI: Power BI アカウントをまだ所有していない場合は、無料で試すことができます。 Power BI テンプレート アプリを使用して、データを分析できます。
アクセス ログ、パフォーマンス ログ、ファイアウォール ログの表示と分析
Azure Monitor ログでは、BLOB ストレージ アカウントからカウンターとイベントのログ ファイルを収集できます。 このツールには、ログを分析するための視覚化と強力な検索機能が含まれています。
自身のストレージ アカウントに接続して、アクセス ログとパフォーマンス ログの JSON ログ エントリを取得することもできます。 JSON ファイルをダウンロードした後、そのファイルを CSV に変換し、Excel、Power BI などのデータ視覚化ツールで表示できます。
ヒント
Visual Studio を使い慣れていて、C# の定数と変数の値を変更する基本的な概念を理解している場合は、GitHub から入手できるログ変換ツールを使用できます。
GoAccess を介してアクセス ログを分析する
Microsoft は、人気のある GoAccess ログ アナライザーをインストールし、Application Gateway アクセス ログに対して実行する、Resource Manager テンプレートを発行しています。 GoAccess では、ユニーク ビジター、要求されたファイル、ホスト、オペレーティング システム、ブラウザー、HTTP 状態コードなど、重要な HTTP トラフィック統計情報が提供されます。 詳細については、GitHub の Resource Manager テンプレート フォルダーにある Readme ファイルを参照してください。
次のステップ
- Azure Monitor ログを使用して、カウンターとイベント ログを視覚化します。
- Power BI を使用した Azure アクティビティ ログの視覚化に関するブログ
- Power BI などでの Azure アクティビティ ログの表示と分析に関するブログ