Cloudflare 上部署的 LLM API 网关:按预算与 IP 限制客户端调用
一款托管在 Cloudflare Workers 上的 LLM API 网关,通过不透明令牌隔离真实密钥,并按提供商、用…
工具概述
近日在 Hacker News 上出现了一款部署在 Cloudflare Workers 上的 LLM API 网关项目。它的核心目标有两个:一是将真实的上游 API 密钥完全藏在服务端,客户端只持有不透明的代理令牌;二是为这些代理令牌提供细粒度的预算与权限控制,方便开发者在团队或代理场景下管理多家 LLM 厂商的调用。
目前该网关支持 DeepSeek、OpenAI 与 Anthropic 三家上游提供商,并已在 OpenCode、Claude Code CLI、Codex CLI 等几款主流 AI 编程工具中验证可用。
令牌机制:细粒度但非严格
每个不透明令牌在创建时绑定以下参数:
- 单一提供商:令牌只对创建时指定的上游生效,例如
deepseek、openai或anthropic。 - 过期时间:以毫秒时间戳表示,过期后令牌立即失效。
- IP 白名单:基于 Cloudflare 边缘设置的
CF-Connecting-IP字段校验,无法被客户端伪造。 - 花费预算:以美元为单位的上限,超过后该令牌后续请求将被拒绝。
发起请求时,网关在 D1 数据库中查找该令牌,校验有效期、IP 与预算后,注入真实密钥并转发到上游。
不过项目作者也明确指出两项已知限制:
- 预算非严格实时:仅在请求开始时检查累计花费是否超限,单次大请求或并发请求仍可能导致超支。
- 计费非 100% 可靠:客户端或上游异常中断、或网关未能成功持久化成本时,请求仍会被服务但不会被记账。
支持的客户端与部署方式
| 提供商 | 端点 | 鉴权方式 | 已验证客户端 |
|---|---|---|---|
| DeepSeek | /deepseek/chat/completions | API key | OpenCode |
| DeepSeek | /deepseek/v1/messages | API key | Claude Code CLI |
| OpenAI | /openai/v1/responses | API key | OpenCode、Codex CLI |
| Anthropic | /anthropic/v1/messages | API key 或 OAuth 令牌 | Claude Code CLI |
目前仅支持静态凭证(长期 API key 或 claude setup-token 类长生命周期 access token),尚不支持 refresh-token + access-token 模式,主要原因是相关刷新接口并非公开稳定 API,且无法从不断轮换的 access token 中稳定识别用户。
部署方面,需在 Cloudflare 控制台创建 Worker 与 D1 数据库,执行 db_init.sql 初始化表结构,并通过 Wrangler 完成构建与发布。构建需要 Rust 工具链及 wasm32-unknown-unknown 目标。
使用示例
以 OpenCode 调用 DeepSeek 与 OpenAI 为例,先在 Worker 中配置 DEEPSEEK_API_KEY、OPENAI_API_KEY 等密钥,随后在 ~/.config/opencode/opencode.json 中将 baseURL 指向网关域名;最后将创建的测试令牌填入 ~/.local/share/opencode/auth.json 即可,重启 OpenCode 后生效。
适用场景与局限
对于需要在多团队或多项目间共享 LLM 密钥、又希望对每个使用方设置用量上限与 IP 限制的开发者,这类网关提供了一种轻量自托管方案。但其「预算非严格」与「计费可能丢失」的限制,意味着它更适合作为内部试用或低风险场景下的成本隔离工具,而非严格的财务级计量系统。
