我想識別封鎖我的請求或回應 403 禁止錯誤的 AWS WAF 規則。
簡短說明
預設情況下,AWS WAF 對符合 AWS WAF 規則且採用封鎖動作的請求,會回傳「403 Forbidden」錯誤。如果您設定了自訂封鎖動作回應,則 AWS WAF 會回傳您設定的回應。
若要對「403 Forbidden」錯誤進行疑難排解,請使用取樣請求或 AWS WAF 日誌來識別封鎖請求的 AWS WAF 規則或規則群組。接著,修改規則以允許您的請求。
解決方法
使用取樣請求
如果 AWS WAF 在過去 3 小時內封鎖了您的請求,您可以檢視遭封鎖的 web 請求的範本。如果 AWS WAF 封鎖您的請求已超過 3 小時,請重新傳送相同的請求以產生新的取樣請求。
在 Sampled requests (取樣請求) 表中,檢視以下欄:
- 若要識別請求,請檢視 Source IP (來源 IP) 和 URI 欄位。
- 若要識別符合請求的規則或規則群組,請檢視 Metric name (指標名稱) 欄。如果規則群組封鎖了請求,請使用 Rule inside rule group (規則群組內的規則) 欄位來識別規則。
- 若要確認規則設定為 Block (封鎖),請檢視 Action (動作) 欄。
使用 AWS WAF 日誌
**注意:**如果您在請求時未啟用 AWS WAF 記錄,請開啟 AWS WAF 記錄並重新傳送相同請求。
使用 AWS WAF 日誌中的查詢來識別遭封鎖的請求。若要查詢儲存在 Amazon CloudWatch Logs 的 AWS WAF 日誌,請使用 Amazon CloudWatch Logs Insights 查詢。若要查詢儲存在 Amazon Simple Storage Service (Amazon S3) 的 AWS WAF 日誌,請使用 Amazon Athena 查詢。
CloudWatch Logs Insights 範例查詢
若要取得前 10 個終止規則,請執行下列查詢:
fields terminatingRuleId
| stats count() as requestCount by terminatingRuleId
| sort requestCount desc
| limit 10
若要依用戶端 IP 位址、國家/地區、URI 和規則彙總 AWS WAF 封鎖的請求,請執行以下查詢:
fields httpRequest.clientIp as ClientIP, httpRequest.country as Country, httpRequest.uri as URI, terminatingRuleId as Rule
| filter action = "BLOCK"
| stats count() as RequestCount by Country, ClientIP, URI, Rule
| sort RequestCount desc
**注意:**在輸出中,terminatingRuleId 欄位可識別封鎖請求的 AWS WAF 規則或規則群組。
Athena 範例查詢
對於儲存在 Amazon S3 儲存貯體中的 AWS WAF 日誌,請使用 Athena 建立用於查詢日誌和篩選詳細資訊的 AWS WAF 表。如需詳細資訊,請參閱查詢 AWS WAF 日誌。接著,在資料表上執行查詢。
例如,若要依用戶端 IP 位址與國家/地區檢視 AWS WAF 封鎖的請求數量,請執行以下查詢:
SELECT "httprequest"."clientip"
,"count"(*) "count"
, "httprequest"."country"
FROM
waf_logs
WHERE ("action" LIKE 'BLOCK')
GROUP BY "httprequest"."clientip", "httprequest"."country"
ORDER BY "count" DESC
修改 AWS WAF 規則以允許您的請求
如果封鎖規則位於 AWS Managed Rules rule group (AWS 管理規則群組),請自訂規則行為。
如果封鎖規則是自訂規則,請更新規則參數以使用規則陳述式允許請求。
相關資訊
如何啟用 AWS WAF 記錄,並將日誌傳送到 CloudWatch、Amazon S3 或 Firehose?
如何分析 CloudWatch 中的 AWS WAF 日誌?