Common vs Targeted — the two tiers
Common matches against a static signature list: known crawler User-Agents, missing Accept-Language, scripting-engine UAs, datacenter ASNs. It blocks roughly the same traffic that Cloudflare's Bot Fight Mode blocks. curl_cffi with Chrome impersonation defeats Common entirely because the UA, TLS, and headers all match a real browser.
Targeted adds a Silent Challenge (lightweight JS that issues aws-waf-token) and a CAPTCHA Challenge action. When configured to challenge rather than block, a request without the token gets a 405 with an x-amzn-waf-action: challenge header and an HTML page that runs the WAF challenge script. Targeted also adds rate-aggregation per session token.
How AWS labels classified requests
AWS WAF doesn't score in 0–99 like Cloudflare. Instead it attaches labels to each request — awswaf:managed:aws:bot-control:bot:category:scraping_framework, awswaf:managed:aws:bot-control:signal:automated_browser, and so on. The customer site writes rules that act on those labels (block, challenge, count). This makes Bot Control more permissive by default than other vendors — a labelled request only blocks if the customer added the rule, so many AWS-protected sites accept traffic Cloudflare or Akamai would reject.
What works and what doesn't
Common tier: any modern impersonation library (curl_cffi, tls-client, hrequests) plus a non-datacenter IP. The signature list is short and well-known.
Targeted tier: if the customer chose challenge, a real-browser session (Playwright, Camoufox) solves the challenge once and reuses the aws-waf-token cookie for subsequent requests. The token TTL is generous (~5 min default, configurable). If the customer chose block, you need to match the underlying fingerprint — broadly the same approach as Akamai but with a much weaker scoring model.
