AWS WAF Bot Control ルールグループによってブロックされたボットからのリクエストを許可したいと考えています。正規のボットからのリクエストを許可するにはどうすればよいですか?
簡単な説明
AWS WAF Bot Control ルールグループによってブロックされたボットからのリクエストを許可するには、次の操作を実行します。
- AWS WAF ログのクエリを実行して、AWS WAF ログからのリクエストをブロックしている Bot Control ルールを特定します。
- リクエストをブロックしている Bot Control ルールをカウントに設定します。
- 除外されたルールのラベルと照合し、許可するボットを除くすべての一致リクエストをブロックするカスタムルールを作成します。
- ボットトラフィックが許可されていることを検証します。
Bot Control マネージドルールグループは、AWS WAF の IP アドレスを使用してボットを検証します。リクエストの転送中にクライアント IP アドレスを保持しないプロキシまたは CDN を介してルーティングするボットを検証した場合は、そのボットを明示的に許可する必要があります。
解決方法
リクエストをブロックしている Bot Control ルールを特定する
AWS WAF ログを分析して、必要なボットからのリクエストをブロックしている Bot Control ルールを特定します。
1. Amazon Athena を使用して AWS WAF ログを分析するには、パーティション射影を使用して Athena で AWS WAF ログのテーブルを作成します。手順については、「パーティション射影を使用した Athena での AWS WAF ログ用のテーブルの作成」を参照してください。
2. 次の Athena クエリを実行して、Bot Control ルールグループによってブロックされたリクエストの詳細を見つけます。
注:
waf_logs をテーブル名に置き換えてください。時間間隔
time > now() - interval '3' day
は、指定した時間間隔に置き換えることができます。
WITH waf_data AS
(SELECT from_unixtime(waf.timestamp / 1000) as time,
waf.terminatingRuleId,
waf.action,
waf.httprequest.clientip as clientip,
waf.httprequest.requestid as requestid,
waf.httprequest.country as country,
rulegroup.terminatingrule.ruleid as matchedRule,
labels as Labels,
map_agg(LOWER(f.name),
f.value) AS kv
FROM waf_logs waf,
UNNEST(waf.httprequest.headers)
AS t(f), UNNEST(waf.rulegrouplist) AS t(rulegroup)
WHERE rulegroup.terminatingrule.ruleid IS NOT NULL
GROUP BY 1, 2, 3, 4, 5, 6, 7,8)
SELECT waf_data.time,
waf_data.action,
waf_data.terminatingRuleId,
waf_data.matchedRule,
waf_data.kv['user-agent'] as UserAgent,
waf_data.clientip,
waf_data.country,
waf_data.Labels
FROM waf_data
Where terminatingRuleId='AWS-AWSManagedRulesBotControlRuleSet' and time > now() - interval '3' day
ORDER BY time
DESC
指定した時間範囲のレコードをフィルタリングする Amazon Athena クエリのサンプルについては、「AWS WAF ログのクエリ例」を参照してください。
3. (オプション) 検索結果をさらに絞り込むには、Where 句で AND 演算子を使用して UserAgent にフィルターをさらに追加します。WAF ログのフィールドの説明については、「ログフィールド」を参照してください。例えば、kv['user-agent'] like 'Postman%' のフィルターを追加して、結果を絞り込むことができます。
4. [matchedRule] 列にチェックを入れて、リクエストをブロックしているルールを特定します。 注: Bot Control ルールの詳細については、「AWS WAF Bot Control ルールグループ」を参照してください。
リクエストをブロックしている Bot Control ルールをカウントに設定する
Bot Control Rule グループを編集して、リクエストをブロックしているルールをカウントに設定します。ルールをカウントに設定するには、「ルールグループにおけるルールアクションのカウントへの設定」を参照してください。これにより、ルールは一致するリクエストにラベルを適用し、ブロックされていないボットを許可できます。
除外されたルールのラベルと照合し、許可するボットを除くすべての一致リクエストをブロックするカスタムルールを作成する
リクエストをブロックしているルールラベルに基づいて、ウェブ ACL にラベル一致ルールを追加します。ラベル一致ルールは、Bot Control マネージドルールグループの後に指定する必要があります。Bot Control マネージドルールグループのラベルについては、「AWS WAF Bot Control ルールグループ」を参照してください。
カテゴリラベルを含むルールがリクエストをブロックしている場合
特定のブロックされたボットを許可するカスタムルールを設定します。 重要: ルール設定のボットカテゴリとボット名のラベルを、Athena クエリ結果のボットカテゴリとボット名ラベルに置き換えます。
他のすべてのルールラベル
カスタムルールを作成して、ブロックされたユーザーエージェントの例外を作成します。
重要: ルール設定の [SearchString] フィールドのボットシグナルラベルと [UserAgent] の値を、Athena クエリ結果の [labels] (ラベル) および [UserAgent] 列のボットシグナルラベルと [UserAgent] の値に置き換えます。
ボットトラフィックが許可されていることを検証する
AWS WAF ログをもう一度確認して、ボットが許可されるようになったことを確認します。ボットがまだブロックされている場合は、前のプロセスを繰り返して、リクエストをブロックしている追加のルールを特定します。
関連情報
AWS WAF Bot Control による誤検出
AWS WAF Bot Control の例