AWS WAF ルールのうち、リクエストをブロックしたり、403 Forbidden エラーの応答を返すものを特定したいです。
簡単な説明
デフォルトでは、AWS WAF は、ブロックアクションで AWS WAF ルールと一致するリクエストに対して「403 Forbidden」エラーを返します。ブロックアクションにカスタム応答を設定した場合は、AWS WAF は設定した応答を返します。
「403 Forbidden」エラーのトラブルシューティングを行うには、サンプルリクエストまたは AWS WAF ログを使用して、リクエストをブロックしている AWS WAF ルールまたはルールグループを特定します。次に、ルールを変更してそのリクエストを許可します。
解決策
サンプルリクエストを使用する
AWS WAF が過去 3 時間以内にリクエストをブロックした場合は、ブロックされたウェブリクエストのサンプルを確認します。AWS WAF がリクエストをブロックしてから 3 時間を超えている場合は、同じリクエストを再送信すると新しいサンプルリクエストを生成できます。
[サンプルリクエスト] テーブルで次の列を確認します。
- リクエストを特定するには、[送信元 IP] と [URI] 列を確認します。
- リクエストに一致するルールまたはルールグループを特定するには、[メトリクス名] 列を確認します。ルールグループがリクエストをブロックしている場合は、[ルールグループ内のルール] 列を参照し、ルールを特定します。
- [アクション] 列を参照し、ルールが [ブロック] に設定されていることを確認します。
AWS WAF ログを使用する
注: リクエストの時点で AWS WAF のログ記録を有効にしなかった場合は、AWS WAF のログ記録を有効化し、同じリクエストを再送信してください。
AWS WAF ログでクエリを使用し、ブロックされたリクエストを特定します。Amazon CloudWatch Logs に保存されている AWS WAF ログをクエリするには、Amazon CloudWatch Logs Insights クエリを使用します。Amazon Simple Storage Solution (Amazon S3) に保存されている AWS WAF ログをクエリするには、Amazon Athena を使用します。
CloudWatch Logs Insights のクエリ例
終了の要因である上位 10 件のルールを取得するには、次のクエリを実行します。
fields terminatingRuleId
| stats count() as requestCount by terminatingRuleId
| sort requestCount desc
| limit 10
AWS WAF によってブロックされたリクエストをクライアントの IP アドレス、国、URI、ルール別にまとめるには、次のクエリを実行します。
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 のクエリ例
Athena を使用して Amazon S3 バケットに保存した AWS WAF ログに関する AWS WAF テーブルを作成します。このテーブルでログをクエリしたり、詳細を絞り込んだりします。詳細については、「AWS WAF ログのクエリ」を参照してください。次に、テーブルでクエリを実行します。
たとえば、AWS WAF がクライアントの IP アドレスと国を基準にブロックしたリクエストの数を確認するには、次のクエリを実行します。
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 ルールグループにある場合は、ルールの動作をカスタマイズします。
ブロックを行うルールがカスタムルールの場合は、そのルールのパラメータを更新し、ルールステートメントを使用してリクエストを許可するようにします。
関連情報
AWS WAF のログ記録を有効にし、CloudWatch、Amazon S3、Kinesis Data Firehose にログを送信する方法を教えてください
CloudWatch の AWS WAF ログを分析する方法を教えてください