ウェブ ACL トラフィック情報のログ記録 - AWS WAF、AWS Firewall Manager、AWS Shield Advanced

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ウェブ ACL トラフィック情報のログ記録

ログ記録を有効にして、ウェブ ACL で分析されるトラフィックに関する詳細情報を取得できます。ログに含まれる情報には、AWS WAF が AWS リソースからリクエストを受信した時間、このリクエストの詳細と各リクエストが一致したルールのアクションが含まれます。

ウェブ ACL のロギング設定では、AWS WAF がログに送信する内容を次のようにカスタマイズできます。

  • ログのフィルタリング— フィルタリングを追加して、ログに保持するウェブリクエストとドロップするウェブリクエストを指定できます。ルールのアクションと、リクエスト評価時に適用された Web リクエストラベルでフィルタリングできます。ルールアクションの設定については、「」を参照してください。AWS WAF ルールのアクション。ラベルの詳細については、「」を参照してください。ウェブリクエストの AWS WAF ラベル

  • フィールドの改定— ログレコードからいくつかのフィールドを墨消しできます。編集済みのフィールドは次のように表示されます。XXXログの。 たとえば、[] を墨消しした場合URIフィールドを使用したり、URIフィールドはログのXXX。ログフィールドの一覧については、「」を参照してください。ログフィールド

ウェブ ACL から、保存先が設定された Amazon Kinesis Data Firehose にログを送信します。ログ記録を有効にすると、AWS WAF は Kinesis Data Firehose の HTTPS エンドポイントを介してストレージ先にログを送信します。

Amazon Kinesis Data Firehose を作成し、保存されたログを確認する方法についての詳細は、「」を参照してください。Amazon Kinesis Data Firehose とは何ですか? Kinesis Data Firehose の設定に必要な権限については、Amazon Kinesis Data Firehose によるアクセスの制御

ログ記録を正常に有効化するには、以下のアクセス許可がある必要があります。

  • iam:CreateServiceLinkedRole

  • firehose:ListDeliveryStreams

  • wafv2:PutLoggingConfiguration

サービスにリンクされたロールおよび iam:CreateServiceLinkedRole アクセス許可の詳細については、「AWS WAF でのサービスリンクロールの使用」を参照してください。

ウェブ ACL でログ記録の管理

ウェブ ACL でログ記録はいつでもイネーブルおよびディセーブルにすることができます。

ウェブ ACL でログ記録を有効にするには

  1. Amazon Kinesis Data Firehose を aws-waf-logs- で始まるプレフィックスを使用して作成します。例:aws-waf-logs-us-east-2-analyticsPUT ソースを使用して、動作しているリージョンでデータ firehose を作成します。Amazon CloudFront のログをキャプチャする場合は、米国東部 (バージニア北部) にファイアーホースを作成します。詳細については、「」を参照してください。Amazon Kinesis Data Firehose 配信ストリームの作成

    重要

    ソースとして Kinesis stream を選択しないでください。

    1 つの AWS WAF ログは、1 つの Kinesis Data Firehose レコードに相当します。通常の場合に 1 秒あたり 10,000 リクエストを受信し、完全ログを有効にすると、Kinesis Data Firehose では 1 秒あたり 10,000 レコードに設定されます。Kinesis Data Firehose を正しく設定しないと、AWS WAF はすべてのログを記録しません。詳細については、「Amazon Kinesis Data Firehose のクォータ」を参照してください。

  2. AWS マネジメントコンソールにサインインし、AWS WAF コンソール () を開きます。https://console.aws.amazon.com/wafv2/

  3. ナビゲーションペインの [Web ACLs] を選択します。

  4. ログ記録を有効にするウェブ ACL を選択します。

  5. [ログ記録] タブで [ログの有効化] を選択します。

  6. 最初のステップで作成した Kinesis Data Firehose を選択します。で始まる firehorse を選ぶ必要があります。aws-waf-logs-

  7. (オプション) 特定のフィールドとその値がログに含まれることを希望しない場合には、このフィールドを編集します。編集するフィールドを選び、[追加] を選択します。必要に応じて手順を繰り返し、追加のフィールドを編集します。編集されたフィールドは、ログに XXX と表示されます。たとえば、「」を編集した場合URIフィールドを使用したり、URIフィールドはログのXXX

  8. (オプション) すべてのリクエストをログに送信しない場合は、フィルタリング条件と動作を追加します。[]ログのフィルタリングで、適用する各フィルターについて、[フィルタの追加を選択し、フィルタリング条件を選択し、条件に一致するリクエストを保持するかドロップするかを指定します。フィルターの追加が完了したら、必要に応じて、デフォルトのログ記録動作

  9. [ログの有効化] を選択します。

    注記

    ログを正常に有効化すると、AWS WAF は、必要なアクセス権限を使用してサービスにリンクされたロールを作成し、Amazon Kinesis Data Firehose にログを書き込みます。詳細については、「AWS WAF でのサービスリンクロールの使用」を参照してください。

ウェブ ACL でログ記録を無効にするには

  1. ナビゲーションペインの [Web ACLs] を選択します。

  2. ログ記録を無効にするウェブ ACL を選択します。

  3. [ログ記録] タブで [ログの無効化] を選択します。

  4. 確認ダイアログボックスで、[ログの無効化] を選択します。

ログフィールド

次のリストは、可能なログフィールドについて説明しています。

action

アクション。終了ルールに指定できる値は、次のとおりです。ALLOWおよびBLOCKCOUNTは終了しないルールアクションです。

args

クエリ文字列。

clientIp

リクエストを送信するクライアントの IP アドレス。

country

リクエストの送信国。AWS WAF が原産国を特定できない場合、このフィールドは-

excludedRules

除外されているルールグループ内のルールのリスト。これらのルールのアクションは COUNT に設定されます。

exclusionType

除外されたルールにアクション COUNT があることを示すタイプ。

ruleId

除外されたルールグループ内のルールの ID。

formatVersion

ログの形式バージョン。

ヘッダー

ヘッダーの一覧。

httpMethod

リクエストの HTTP メソッド。

httpRequest

リクエストに関するメタデータです。

httpSourceId

ソース ID。このフィールドには、関連付けられたリソースの ID が表示されます。

httpSourceName

リクエストの送信元。使用できる値: CFAmazon CloudFront,APIGWAmazon API Gateway の場合ALB、Application Load Balancer の場合はAPPSYNCAWS AppSync 用。

httpVersion

HTTP のバージョン。

labels

ウェブリクエストのラベル。これらのラベルは、リクエストを評価するために使用されたルールによって適用されました。

limitKey

レートベースのルールによるレート制限のリクエストを集約するために AWS WAF が使用する IP アドレスソースを示します。想定される値は次のとおりです。IP、Webリクエストオリジン用、FORWARDED_IP、リクエストのヘッダーで転送されたIPの場合。

限界値

レート制限の要求を集約するためにレートベースのルールによって使用される IP アドレス。リクエストに有効でない IP アドレスが含まれている場合、limitvalueINVALID

maxRateAllowed

5 分間に許可される limitKey で指定されたフィールドに同じ値を持つ、リクエストの最大数。リクエストの数が maxRateAllowed を超え、このルールで指定されるほかの述語が一致した場合、AWS WAF はこのルールで指定されるアクションをトリガーします。

nonTerminatingMatchingRules

リクエストに一致するルールグループ内の終了しないルールのリスト。これは常に COUNT ルール (一致する終了しないルール) です。

action

これは常に COUNT (一致する終了しないルール) です。

ruleId

リクエストに一致して、終了しなかったルールグループ内のルールの ID。これが COUNT ルールです。

ルールマッチ詳細

リクエストに一致したルールに関する詳細情報。このフィールドは、SQL インジェクションおよびクロスサイトスクリプティング (XSS) 一致ルールステートメントに対してのみ設定されます。

rateBasedRuleId

このリクエストで動作したレートベースのルールの ID。このリクエストが終了した場合、rateBasedRuleId の ID は、terminatingRuleId の ID と同じです。

rateBasedRuleList

このリクエストで動作したレートベースのルールのリスト。

要求ヘッダーが挿入されました

カスタムリクエスト処理用に挿入されるヘッダーのリスト。

requestId

基盤となるホストサービスによって生成されるリクエストの ID。Application Load Balancer の場合、これはトレース ID です。他のすべての場合、これはリクエスト ID です。

レスポンス・コード・セント

カスタムレスポンスで送信されたレスポンスコード。

ruleGroupId

ルールグループの ID ルールがリクエストをブロックした場合、ruleGroupID の ID は、terminatingRuleId の ID と同じです。

ruleGroupList

このリクエストで動作したルールグループのリスト。

terminatingRule

リクエストを終了したルールグループ内のルール。これが null 以外の値の場合、[ruleIdおよびaction

terminatingRuleId

リクエストを終了したルールの ID。リクエストを終了したものがない場合、この値は Default_Action となります。

terminatingRuleMatchDetails

リクエストに一致した終了ルールに関する詳細情報。終了ルールには、ウェブリクエストに対する検査プロセスを終了するアクションがあります。終了ルールに対して実行できるアクションは、次のとおりです。ALLOWおよびBLOCK。これは、SQL インジェクションおよびクロスサイトスクリプティング (XSS) 一致ルールステートメントに対してのみ設定されます。複数の対象を検査するすべてのルールステートメントと同様に、AWS WAF は最初の一致にアクションを適用し、ウェブリクエストの検査を停止します。終了アクションを伴うウェブリクエストには、ログで報告された脅威に加えて、他の脅威が含まれている可能性があります。

terminatingRuleType

リクエストを終了したルールのタイプ。使用できる値: RATE_BASED、GROUP、MANAGED_GROUP。

timestamp

タイムスタンプ (ミリ秒単位)。

uri

リクエストの URI。上記のコードの例では、このフィールドが編集された場合の値を示しています。

webaclId

ウェブ ACL の GUID。

ログの例

例 SQLi 検出 (終了) でトリガーされたルールのログ出力

{ "timestamp": 1576280412771, "formatVersion": 1, "webaclId": "arn:aws:wafv2:ap-southeast-2:EXAMPLE12345:regional/webacl/STMTest/1EXAMPLE-2ARN-3ARN-4ARN-123456EXAMPLE", "terminatingRuleId": "STMTest_SQLi_XSS", "terminatingRuleType": "REGULAR", "action": "BLOCK", "terminatingRuleMatchDetails": [ { "conditionType": "SQL_INJECTION", "location": "HEADER", "matchedData": [ "10", "AND", "1" ] } ], "httpSourceName": "-", "httpSourceId": "-", "ruleGroupList": [], "rateBasedRuleList": [], "nonTerminatingMatchingRules": [], "httpRequest": { "clientIp": "1.1.1.1", "country": "AU", "headers": [ { "name": "Host", "value": "localhost:1989" }, { "name": "User-Agent", "value": "curl/7.61.1" }, { "name": "Accept", "value": "*/*" }, { "name": "x-stm-test", "value": "10 AND 1=1" } ], "uri": "/foo", "args": "", "httpVersion": "HTTP/1.1", "httpMethod": "GET", "requestId": "rid" }, "labels": [ { "name": "value" } ] }

例 SQLi 検出でトリガーされたルールのログ出力 (非終了)

{ "timestamp":1592357192516 ,"formatVersion":1 ,"webaclId":"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hello-world/5933d6d9-9dde-js82-v8aw-9ck28nv9" ,"terminatingRuleId":"Default_Action" ,"terminatingRuleType":"REGULAR" ,"action":"ALLOW" ,"terminatingRuleMatchDetails":[] ,"httpSourceName":"-" ,"httpSourceId":"-" ,"ruleGroupList":[] ,"rateBasedRuleList":[] ,"nonTerminatingMatchingRules": [{ "ruleId":"TestRule" ,"action":"COUNT" ,"ruleMatchDetails": [{ "conditionType":"SQL_INJECTION" ,"location":"HEADER" ,"matchedData":[ "10" ,"and" ,"1"] }] }] ,"httpRequest":{ "clientIp":"3.3.3.3" ,"country":"US" ,"headers":[ {"name":"Host","value":"localhost:1989"} ,{"name":"User-Agent","value":"curl/7.61.1"} ,{"name":"Accept","value":"*/*"} ,{"name":"foo","value":"10 AND 1=1"} ] ,"uri":"/foo","args":"" ,"httpVersion":"HTTP/1.1" ,"httpMethod":"GET" ,"requestId":"rid" }, "labels": [ { "name": "value" } ] }

例 ルールグループ内でトリガーされた複数のルールのログ出力(ルール-XSS は終了しており、ルール B は終了していません)

{ "timestamp":1592361810888, "formatVersion":1, "webaclId":"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hello-world/5933d6d9-9dde-js82-v8aw-9ck28nv9" ,"terminatingRuleId":"RG-Reference" ,"terminatingRuleType":"GROUP" ,"action":"BLOCK", "terminatingRuleMatchDetails": [{ "conditionType":"XSS" ,"location":"HEADER" ,"matchedData":["<","frameset"] }] ,"httpSourceName":"-" ,"httpSourceId":"-" ,"ruleGroupList": [{ "ruleGroupId":"arn:aws:wafv2:us-east-1:123456789012:global/rulegroup/hello-world/c05lb698-1f11-4m41-aef4-99a506d53f4b" ,"terminatingRule":{ "ruleId":"RuleA-XSS" ,"action":"BLOCK" ,"ruleMatchDetails":null } ,"nonTerminatingMatchingRules": [{ "ruleId":"RuleB-SQLi" ,"action":"COUNT" ,"ruleMatchDetails": [{ "conditionType":"SQL_INJECTION" ,"location":"HEADER" ,"matchedData":[ "10" ,"and" ,"1"] }] }] ,"excludedRules":null }] ,"rateBasedRuleList":[] ,"nonTerminatingMatchingRules":[] ,"httpRequest":{ "clientIp":"3.3.3.3" ,"country":"US" ,"headers": [ {"name":"Host","value":"localhost:1989"} ,{"name":"User-Agent","value":"curl/7.61.1"} ,{"name":"Accept","value":"*/*"} ,{"name":"xssfoo","value":"<frameset onload=alert(1)>"} ,{"name":"bar","value":"10 AND 1=1"} ] ,"uri":"/foo" ,"args":"" ,"httpVersion":"HTTP/1.1" ,"httpMethod":"GET" ,"requestId":"rid" }, "labels": [ { "name": "value" } ] }

例 コンテンツタイプ JSON のリクエストボディの検査のためにトリガーされたルールのログ出力

AWS WAF は現在、JSON 本体検査の場所をUNKNOWN

{ "timestamp": 1576280412771, "formatVersion": 1, "webaclId": "arn:aws:wafv2:ap-southeast-2:12345:regional/webacl/test/111", "terminatingRuleId": "STMTest_SQLi_XSS", "terminatingRuleType": "REGULAR", "action": "BLOCK", "terminatingRuleMatchDetails": [ { "conditionType": "SQL_INJECTION", "location": "UNKNOWN", "matchedData": [ "10", "AND", "1" ] } ], "httpSourceName": "ALB", "httpSourceId": "alb", "ruleGroupList": [], "rateBasedRuleList": [], "nonTerminatingMatchingRules": [], "requestHeadersInserted":null, "responseCodeSent":null, "httpRequest": { "clientIp": "1.1.1.1", "country": "AU", "headers": [], "uri": "", "args": "", "httpVersion": "HTTP/1.1", "httpMethod": "POST", "requestId": "null" }, "labels": [ { "name": "value" } ] }