AWS WAF、AWS Firewall Manager、および AWS Shield アドバンスド
開発者ガイド (API バージョン 2015-08-24)

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

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

開始するには、Amazon Kinesis Data Firehose をセットアップします。このプロセスの一環として、ログの保存先を選択します。次に、ログ記録を有効にするウェブ ACL を選択します。ログ記録を有効にすると、AWS WAF は firehose を介して保存先にログを送信します。Amazon Kinesis Data Firehose を作成し、保存されたログを確認する方法についての詳細は、「Amazon Kinesis Data Firehose とは何ですか。」を参照してください。

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

  • iam:CreateServiceLinkedRole

  • firehose:ListDeliveryStreams

  • waf:PutLoggingConfiguration

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

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

  1. Amazon Kinesis Data Firehose を「aws-waf-logs-」で始まるプレフィックスを使用して作成します (たとえば、aws-waf-logs-us-east-2-analytics)。PUT ソースを使用して、動作しているリージョンでデータ firehose を作成します。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 マネジメントコンソールにサインインし、https://console.aws.amazon.com/waf/ にある AWS WAF コンソールを開きます。

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

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

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

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

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

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

    注記

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

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

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

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

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

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

例 ログの例

{ "timestamp":1533689070589, "formatVersion":1, "webaclId":"385cb038-3a6f-4f2f-ac64-09ab912af590", "terminatingRuleId":"Default_Action", "terminatingRuleType":"REGULAR", "action":"ALLOW", "httpSourceName":"CF", "httpSourceId":"i-123", "ruleGroupList":[ { "ruleGroupId":"41f4eb08-4e1b-2985-92b5-e8abf434fad3", "terminatingRule":null, "nonTerminatingMatchingRules":[ {“action” : “COUNT", “ruleId” : “4659b169-2083-4a91-bbd4-08851a9aaf74”} ] "excludedRules": [ {“exclusionType” : “EXCLUDED_AS_COUNT", “ruleId” : “5432a230-0113-5b83-bbb2-89375c5bfa98”} } ], "rateBasedRuleList":[ { "rateBasedRuleId":"7c968ef6-32ec-4fee-96cc-51198e412e7f", "limitKey":"IP", "maxRateAllowed":2000 }, { "rateBasedRuleId":"462b169-2083-4a93-bbd4-08851a9aaf30", "limitKey":"IP", "maxRateAllowed":2000 } ], "nonTerminatingMatchingRules":[ {“action” : “COUNT", “ruleId” : “4659b181-2011-4a91-bbd4-08851a9aaf52”} ], "httpRequest":{ "clientIp":"192.10.23.23", "country":"US", "headers":[ { "name":"Host", "value":"127.0.0.1:1989" }, { "name":"User-Agent", "value":"curl/7.51.2" }, { "name":"Accept", "value":"*/*" } ], "uri":"REDACTED", "args":"usernam=abc", "httpVersion":"HTTP/1.1", "httpMethod":"GET", "requestId”:”cloud front Request id” } }

以下ではこれらのログに示されている各項目について説明しています。

timestamp

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

formatVersion

ログの形式バージョン。

webaclId

ウェブ ACL の GUID。

terminatingRuleId

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

terminatingRuleType

リクエストを終了したルールのタイプ。可能な値は、RATE_BASED、REGULAR、GROUP です。

action

アクション。ルールを終了する可能性のある値は、次の通りです。ALLOW および BLOCK。COUNT は、ルール終了の有効な値ではありません。

httpSourceName

リクエストの送信元。有効な値: CF (ソースが Amazon CloudFront である場合)、APIGW (ソースが Amazon API Gateway である場合)、および ALB (ソースが Application Load Balancer である場合)。

httpSourceId

ソース ID。このフィールドには、関連する Amazon CloudFront ディストリビューションの ID、API Gateway の REST API、または Application Load Balancer の名前が表示されます。

ruleGroupList

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

ruleGroupId

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

terminatingRule

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

nonTerminatingMatchingRules

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

action (nonTerminatingMatchingRules group)

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

ruleId (nonTerminatingMatchingRules group)

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

excludedRules

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

exclusionType (excludedRules グループ)

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

ruleId (excludedRules グループ)

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

rateBasedRuleList

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

rateBasedRuleId

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

limitKey

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

maxRateAllowed

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

httpRequest

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

clientIp

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

国/地域

リクエストの送信国。

ヘッダ

ヘッダーの一覧。

uri

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

args

クエリ文字列。

httpVersion

HTTP のバージョン。

httpMethod

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

requestId

リクエストの ID。