Web ACL トラフィック情報をログ中 - AWS WAF、AWS Firewall Manager、および AWS Shield アドバンスド

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

Web ACL トラフィック情報をログ中

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

Web ACLからログを Amazon Kinesis Data Firehose 構成済みのストレージ・デスティネーションを使用する。ログ記録を有効にすると、AWS WAF は Kinesis Data Firehose の HTTPS エンドポイントを介してストレージ先にログを送信します。

作成方法についての詳細は、 Amazon Kinesis データ Firehose および保存されたログの確認については、以下を参照してください。 とは Amazon Kinesis Data Firehose? 自分の Kinesis データ Firehose構成、参照 Amazon Kinesis Data Firehoseによるアクセスの制御.

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

  • iam:CreateServiceLinkedRole

  • firehose:ListDeliveryStreams

  • wafv2:PutLoggingConfiguration

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

Web ACLのログの管理

Web ACL のログは、いつでも有効または無効にできます。

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

  1. プレフィックスで始まる名前を使用して、Amazon Kinesis Data Firehose を作成します。 aws-waf-logs-. たとえば、 aws-waf-logs-us-east-2-analytics. データ ファイヤーホースを PUT および が、業務を行っている地域内にあります。Amazon CloudFront でログをキャプチャしている場合には、米国東部(バージニア北部) で firehose を作成します。詳細については、「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. ナビゲーション ペインで、 ウェブ ACLs.

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

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

  6. _を選択 Kinesis Data Firehose 作成することができます。で始まるファイヤーホースを選択する必要があります。 aws-waf-logs-.

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

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

    注記

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

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

  1. ナビゲーション ペインで、 ウェブ ACLs.

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

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

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

ログフィールド

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

タイムスタンプ

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

formatVersion

ログの形式バージョン。

webaclId

ウェブ ACL の GUID。

terminatingRuleId

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

terminatingRuleType

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

アクション

アクション。終了ルールの可能な値: ALLOWとBLOCK。COUNT は、ルール終了の有効な値ではありません。

terminatingRuleMatchDetails

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

httpSourceName

リクエストの送信元。使用できる値: CF の Amazon CloudFront、 APIGW の Amazon API Gateway、 ALB の Application Load Balancer、および APPSYNC の AWS AppSync.

httpSourceId

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

ruleGroupList

このリクエストで動作したルールグループのリスト。前述のコード例では、1 つのみです。

ruleGroupId

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

terminatingRule

リクエストを終了したルールグループ内のルール。これが null 以外の値の場合、[ruleid] および [action (アクション)] も含まれます。この場合、アクションは常に BLOCK です。

nonTerminatingMatchingRules

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

action (nonTerminatingMatchingRules group)

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

ruleId (非終了一致規則グループ)

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

ruleMatchDetails (非終了一致規則グループ)

要求に一致するルールに関する詳細情報。このフィールドは、SQL インジェクションとクロスサイトスクリプティング (XSS) 一致ルールステートメントに対してのみ入力されます。

excludedRules

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

exclusionType (除外ルールグループ)

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

ruleId (除外ルールグループ)

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

rateBasedRuleList

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

rateBasedRuleId

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

limitKey

このフィールドは、リクエストが単一ソースから送信された可能性が高いためにレートモニタリングの対象となるかを AWS WAF が判断するために使用されます。可能な値: IP。

maxRateAllowed

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

httpRequest

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

clientIp

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

country

リクエストの送信国。次の場合: AWS WAF は原産国を特定できません。このフィールドはに設定されています。 -.

ヘッダー

ヘッダーの一覧。

uri

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

args

クエリ文字列。

httpVersion

HTTP のバージョン。

httpMethod

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

requestId

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

limitKey

次の IP アドレスのソースを示します。 AWS WAF は、レートベースのルールによるレート制限のリクエストの集計に使用します。可能な値は、 IP、ウェブリクエストの発信元、および FORWARDED_IP要求のヘッダーで転送される IP の場合。

limitValue

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

ログの例

例 トリガーされたルールのログ出力 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" } }

例 トリガーされたルールのログ出力 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" } }

例 ルールグループ内でトリガされた複数のルールのログ出力 (ルールA-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" } }