記錄 Web ACL 流量資訊 - AWS WAF、AWS Firewall Manager 與 AWS Shield Advanced

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

記錄 Web ACL 流量資訊

注意

這是AWS WAF傳統文件中)。如果您在 2019 年 11 月 AWS WAF 之前建立 AWS WAF 資源 (例如規則和 Web ACL),而且並未將其移轉至最新版本,則應該只使用此版本。若要移轉資源,請參閱 遷移您的AWS WAF傳統資源AWS WAF

如需最新版的AWS WAF,請參AWS WAF

您可以啟用日誌記錄取得您 Web ACL 分析流量的詳細資訊。日誌中包含的信息包括AWS WAF經典收到您的請求AWS資源、請求的詳細資訊,以及適用於符合每個請求規則的動作。

開始請您先建立 Amazon Kinesis Data Firehose。您可以選擇存放日誌的目的地。然後,可以選擇要啟用記錄的 Web ACL。啟用記錄之後,AWS WAF 會透過 firehose 傳遞日誌到儲存目的地。

如需如何建立如何建立 Amazon Kinesis Data Firehose 及檢您存放日誌的資訊,請參什麼是 Amazon Kinesis Data Firehose? 要瞭解 Kinesis Data Firehose 配置所需的權限,請參閲藉助 Amazon Kinesis Data Firehose 控制存取

您必須擁有以下權限,才能順利啟用記錄:

  • iam:CreateServiceLinkedRole

  • firehose:ListDeliveryStreams

  • waf:PutLoggingConfiguration

如需服務連結角色和 iam:CreateServiceLinkedRole 許可的詳細資訊,請參閱使用 的服務連結角色AWS WAF傳統

啟用 Web ACL 記錄

  1. 使用名稱開頭字首「aws-waf-logs-」建立 Amazon Kinesis Data Firehose,例如 aws-waf-logs-us-east-2-analytics。使用 PUT 來源以及您正在操作的區域建立資料 firehose。如果您為 Amazon CloudFront 捕獲日誌,請在美國東部 (維吉尼亞北部) 建立消防管。如需詳細資訊,請參閱建立 Amazon Kinesis Data Firehose 交付串流

    重要

    請勿選擇 Kinesis stream 做為您的來源。

    一AWS WAF經典日誌等同於一個 Kinesis Data Firehose 記錄。如果您每秒通常接收到 10,000 個請求,且您啟用完整的日誌,則您在 Kinesis Data Firehose 中應該會有 10,000 個記錄設定,每秒應該會有 10,000 個記錄設定。如果您沒有正確配置 Kinesis Data Firehose,AWS WAFClassic 不會記錄所有日誌。如需詳細資訊,請參閱 Amazon Kinesis Data Firehose 配額

  2. 登入AWS Management Console,然後開啟AWS WAF主控台https://console.aws.amazon.com/wafv2/

    如果您看到切換至AWS WAF傳統,選取。

  3. 在導覽窗格中,選擇 Web ACL

  4. 選擇您要啟用記錄的 Web ACL 名稱。此操作會在右側窗格中打開頁面,其中包含 Web ACL 詳細資訊。

  5. 記錄標籤中,選擇啟用記錄

  6. 選擇您在第一步驟建立的 Kinesis Data Firehose。您必須選擇開頭為「aws-waf-logs-」的 firehose。

  7. (選用) 如果您不想要特定欄位及其值包含在日誌中,請編寫這些欄位。選擇要編寫的欄位,然後選擇新增。重複其他需要編寫的欄位。在日誌中編寫的欄位顯示為 XXX。例如,如果您編寫 Cookie 欄位,在日誌的 Cookie 欄位則會為 XXX

  8. 選擇 Enable Logging (啟用記錄日誌)

    注意

    成功啟用日誌記錄後,AWS WAFClassic 將建立具有必要許可的服務鏈接角色將日誌寫入到 Amazon Kinesis Data Firehose。如需詳細資訊,請參閱 使用 的服務連結角色AWS WAF傳統

停用 Web ACL 記錄

  1. 在導覽窗格中,選擇 Web ACL

  2. 選擇您要禁用記錄的 Web ACL 名稱。此操作會在右側窗格中打開頁面,其中包含 Web 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":100 }, { "rateBasedRuleId":"462b169-2083-4a93-bbd4-08851a9aaf30", "limitKey":"IP", "maxRateAllowed":100 } ], "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

Web ACL 的 GUID。

terminatingRuleId

終止請求的規則 ID。如果無法終止請求,則值為 Default_Action

terminatingRuleType

終止請求的規則類型。可能的值如下:RATE_BASED、REGULASED 及 GROUP。

動作

動作。終止規則可能的值如下:允許和阻止。COUNT 並非終止規則的有效值。

terminatingRuleMatchDetails

符合請求之終止規則的詳細資訊。終止規則對 Web 請求具有結束檢查程序的動作。終止規則可能的動作是「允許」和「封鎖」。這只會為 SQL Injection 和跨網站指令碼 (XSS) 符合規則陳述式填入。與所有檢查多個項目的規則陳述式一樣,AWS WAF 會在第一個符合項目上套用動作,並停止檢查 Web 請求。具有終止動作的 Web 請求除了包含記錄中報告的威脅之外,還可能包含其他威脅。

httpSourceName

請求的來源。可能的值如下:CF (若來源為 Amazon CloudFront)、APIGW (若來源為 Amazon API Gateway) 及 ALB (若來源為應用程式負載平衡器)。

httpSourceId

來源 ID。此欄位顯示相關聯亞馬遜的 ID CloudFront 分佈、適用於 API Gateway 的 REST API 或應用程式負載平衡器的名稱。

ruleGroupList

處理此請求的規則群組名單。前述程式碼範例僅有一個規則群組。

ruleGroupId

規則群組的 ID。若規則封鎖請求,則 ruleGroupID 的 ID 將與 terminatingRuleId 的 ID 相同。

terminatingRule

在規則群組中終止請求的規則。若此不是 null 值,則也包含 ruleid (ruleid)action (動作)。在這種情況下,動作一律是 BLOCK。

nonTerminatingMatchingRules

規則群組中符合請求的規則名單。這些一律是 COUNT 規則 (符合的非終止規則)。

動作 (nonTerminatingMatchingRules 群組)

這一律是 COUNT (符合的非終止規則)。

ruleId (nonTerminatingMatchingRules 群組)

在規則群組符合請求的規則 ID 為非終止的。也就是 COUNT (計數) 規則。

excludedRules

規則群組中已排除的規則清單。這些規則的動作設定為 COUNT。

exclusionType (excludedRules 群組)

此類型表示已排除的規則均具備動作 COUNT。

ruleId (excludedRules 群組)

在規則群組中被排除的規則 ID。

rateBasedRuleList

處理請求的以速率為基礎的規則名單。

rateBasedRuleId

處理請求的速率規則 ID。若此項目已終止請求,則 rateBasedRuleId 的 ID 將與 terminatingRuleId 的 ID 相同。

limitKey

AWS WAF 用於判斷請求欄位是否為單一來源,因此可能受速率監控。可能的值如下:IP。

maxRateAllowed

五分鐘內允許的請求數量上限,此值與 limitKey 指定之欄位中的值相同。若請求數超過 maxRateAllowed,而且也滿足規則中指定的其他述詞,AWS WAF 會觸發針對此規則指定的動作。

httpRequest

請求的中繼資料。

clientIp

傳送請求的用戶端 IP 地址。

country

請求來源的國家/地區。如果AWS WAF無法確定原產國,則會將此字段設置為-

標頭

標題清單。

uri

URI 請求。前述程式碼範例說明此欄位經修訂後可能的值。

args

查詢字串。

httpVersion

HTTP 版本。

httpMethod

請求的 HTTP 方法。

requestId

請求的 ID。