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 并行支付 |
|---|---|
|  |  |
左图:**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开发, 加密货币, 流量变现, 漏洞探索, 自动化攻击