aws-samples/sample-managed-monetization-using-cloudfront-and-waf

GitHub: aws-samples/sample-managed-monetization-using-cloudfront-and-waf

基于 x402 协议在 AWS CloudFront 和 WAF 边缘节点实现 AI 流量按次付费变现的一键部署示例。

Stars: 3 | Forks: 1

# 通过 Amazon CloudFront 和 AWS WAF 实现 AI 流量变现 (x402) 这是一个基于 [x402 协议](https://www.x402.org/) 的 **AWS WAF 原生 AI 流量变现** **极简、一键 `cdk deploy`** 示例。AWS WAF 在边缘节点为内容路由设定价格:未付费的 请求会直接从 WAF 收到一个 `402` 状态码;已付费的请求会在 Base Sepolia 上进行验证和结算,随后正常提供服务 —— 全程仅需一次往返,无需 Lambda@Edge,且付费墙中不含任何源站代码。 买家端是一个单一的静态页面(使用 React + TypeScript 构建,由 CDK 打包)。它会**在你的浏览器中**生成一个一次性钱包,通过测试网水龙头为其充值,并使用官方的 [x402](https://www.x402.org/) 客户端库完成 402 付款——整个过程被拆分为多个步骤,因此挑战、已签名的 payload 以及结算回执在每个阶段都清晰可见。它还可以模拟不同 AI bot 的并发流量,并展示其在 WAF 控制台中的记录情况。 | 单次支付解析 | 多个 AI bot 并行支付 | |---|---| | ![一次已付费的 x402 往返过程:请求 → 402、签名、请求 + 支付 → 200,以及随后渲染出的 JSON](https://raw.githubusercontent.com/aws-samples/sample-managed-monetization-using-cloudfront-and-waf/main/docs/media/paid-json.png) | ![多个 AI-bot 客户端的并行支付爆发,各自在 Base Sepolia 上进行结算](https://raw.githubusercontent.com/aws-samples/sample-managed-monetization-using-cloudfront-and-waf/main/docs/media/multi-payment.png) | 左图:**Call & pay**(调用并支付)展示了三个阶段(请求 → 签名 → 请求 + 支付)并渲染出已付费的响应。右图:并行爆发请求,每个客户端占一行,逐步填满 requested → paid → settled。(ID 已作匿名处理。) ## 架构 ``` ┌──────────────────────── Amazon CloudFront ────────────────────────┐ Browser ───▶ │ AWS WAF (native x402) CloudFront Function S3 (static) │ (buyer) │ ├─ Bot Control v6 (Count → AI-traffic labels) └─ the SPA │ │ ├─ / → allow (free) │ │ ├─ /weather → MONETIZE ─┐ │ │ ├─ /sports → MONETIZE ├─ no pay → 402 PAYMENT-REQUIRED │ │ ├─ /main.html → MONETIZE ─┘ valid pay → verify + settle ──▶ CFF │ │ └─ /proxy → Lambda (real-UA traffic generator, IAM + OAC) │ └────────────────────────────────────────────────────────────────────┘ Edge order is WAF → CloudFront Function → origin: WAF prices/verifies FIRST, so only a paid request reaches the function that generates the content. ``` 执行一次 `cdk deploy` 即可创建所有资源: - **AWS WAF WebACL** (CLOUDFRONT 范围) 承载了 x402 的核心逻辑 —— Bot Control v6 (Count 模式,用于 AI-bot 标签识别)、一个 WebACL `MonetizationConfig` (包含 payee + price + Base Sepolia),以及每个路由对应的一条 `Monetize` 规则。这些都是通过 `addPropertyOverride` 注入的真实的 `AWS::WAFv2::WebACL` 属性(当前的 `aws-cdk-lib` 尚未对它们进行类型定义)—— 属于纯粹的 CloudFormation 操作,**没有自定义资源,也没有运行时的 API 调用**。 - **CloudFront + S3** —— `/` 路径提供 SPA 服务;每个路由运行一个 **CloudFront Function**,返回其相应的 内容类型 (`/weather` 返回 JSON · `/sports` 返回 Markdown · `/main.html` 返回 HTML),这一切发生在 WAF 验证付款*之后*。 - **一个 UA 代理 Lambda** (`/proxy`,配置了 IAM Function URL + OAC) —— 浏览器无法在 `fetch` 请求中设置 `User-Agent`,因此 流量生成器会通过此函数重新发送每个请求,并携带真实的 bot UA,以便 WAF 能够进行真实的标记。 - **一个 seller payTo** 接收地址,在部署时生成一次并进行本地缓存。 路由维护在一个注册表中 (`cdk/lib/routes.ts`) —— 只需添加一条记录,即可同时生成一个 CloudFront Behavior、一条 Monetize 规则以及一个 SPA 选项。 ## 快速开始 前置条件:一个 AWS 账户、**us-east-1** 区域的凭证、Node 24+,以及完成 CDK 引导。 ``` cd cdk && npm install npx cdk bootstrap # first time in the account/region only npx cdk deploy --outputs-file ../cdk-outputs.json ``` **查看 WAF 为请求定价**(无需钱包): ``` curl -i "$(jq -r '.X402WafSample.DistributionUrl' cdk-outputs.json)/weather" # → HTTP/2 402 包含 base64 PAYMENT-REQUIRED header(price, payTo, asset, network) ``` **在浏览器中完成支付** —— 打开 `DistributionUrl`: 1. 页面会自动创建一个钱包。在钱包下拉菜单中点击链接跳转至 [Circle 水龙头](https://faucet.circle.com/) 为其充值 (Base Sepolia USDC;无需 gas)。 2. 选择一个路由 → 点击 **Call** 查看 402 响应,或点击 **Call & pay** 运行完整的往返流程并渲染出 已付费的内容。 3. 将 count 设置 > 1 并选择不同的客户端,通过代理**爆发 AI-bot 流量**;**WAF traffic** / **revenue** 链接将在新窗口打开 AWS WAF AI 流量控制台。 **销毁环境:** `cd cdk && npx cdk destroy`。 ## 安全 这是一个测试网演示。买家密钥在浏览器中生成,且永远不会离开浏览器的 localStorage;seller payTo 不保存任何私钥(仅用于接收)。`/proxy` Lambda 仅针对配置的路由重新发起 GET 请求,并仅返回上游的状态码。切勿在此示例中使用真实资金或主网密钥。请按照 [CONTRIBUTING.md](CONTRIBUTING.md) 中的说明报告安全问题。 此示例在测试网上结算加密货币支付,不处理任何支付卡数据。如果你计划将此模式进行调整以 处理银行卡数据或运行生产环境的支付系统,请务必遵守 [PCI-DSS](https://aws.amazon.com/compliance/pci-dss-level-1-faqs/) 以及任何适用的金融监管法规。 ## 许可证 MIT-0。详情请参阅 [LICENSE](LICENSE)。
标签:AI代理, AWS CDK, Syscall, Web3, Web开发, 加密货币, 流量变现, 漏洞探索, 自动化攻击