Current State vs. Future State
Consolidating from CloudFront + AWS WAF to Cloudflare as the single edge in front of Clay's AWS origins (app / api / staging.clay.com).
Cloudflare
AWS / CloudFront (removed)
Clay infra / origin
traffic + headers to origin
logs / telemetry (Logpush)
Full Target Architecture
Every request to app / api / staging.clay.com passes once through Cloudflare's edge — inspected, scored, and enforced in a single pass — then enriched to origin and streamed to Datadog.
Cloudflare edge (single pass)
Existing CF footprint
Clay origins
Observability
abuse traffic
clean traffic + headers
Why this wins: every request is inspected once at Cloudflare's edge across all controls, then passed to origin — no stacked point products. The ASN + JA3 rule stops the exact /v3/actions/run-enrichment abuse (multiple accounts, one ASN) that AWS WAF could not, and all of it lands in Datadog for full visibility Clay doesn't have today.
What Clay gets in headers & logs
Ian's requested fields, mapped to exactly where they surface. Delivered via the Transform Rules and Logpush stages above.
| Signal | As header to origin | In logs |
|---|---|---|
| Bot score | cf-bot-score | BotScore, BotScoreSrc |
| Action + reasoning | — | SecurityAction(s), SecurityRuleIDs, SecurityRuleDescription, SecuritySources |
| ASN | ip.src.asnum (custom rule) | ClientASN, ClientASNDescription |
| GeoIP | cf-ipcountry, cf-region, cf-ipcity, cf-iplatitude/longitude | ClientCountry, ClientRegionCode, ClientCity, ClientLatitude/Longitude |
| Anon vs non-anon IP | Managed IP Lists (cf.anonymizer) | firewall event fields |
| JA3 | cf-ja3-hash | JA3Hash |
| JA4 | cf-ja4 | JA4, JA4Signals |
| Verified bot | cf-verified-bot | bot detection fields |
Bot Management Flow
How a request to Clay is detected, scored, and acted on.