2026年7月2日 2 分钟阅读

场景:AI 编码 Agent 调用 API 时,你的密钥可能正在裸奔——用 Nenya Gateway 做一层安全守卫

tinyash 0 条评论

你的 AI 编码 Agent(Cursor、Claude Code、Codex)正在帮你写代码。它需要调用外部 API——GitHub、AWS、Stripe。于是你复制了一个 API Key 到提示词里,Agent 把它塞进 HTTP 请求,请求穿过 LLM 服务商,密钥以明文形式出现在云端日志中。

这不是危言耸听。这是每一个重度使用 AI 编码工具的开发者每天都在做的事。而 Nenya——一个用 Go 写的零依赖 AI API 网关,就是来解决这个问题的。

问题:AI Agent 的密钥裸奔困境

AI 编码工具的核心工作流是:开发者输入需求 → Agent 调用 LLM → LLM 生成代码/命令 → Agent 执行。当 Agent 需要访问外部服务时,API Key 必须出现在请求中。但问题在于:

  • LLM 提供商收到包含密钥的完整请求
  • Agent 的对话历史可能包含密钥原文
  • Cursor/Claude Code 的云端会话日志可能记录密钥
  • 当切换提供商或 Agent 工具时,密钥管理完全没有一致性

现有的解决方案无非两种:要么人工盯着每一行输出检查有没有密钥泄露(不现实),要么指望 LLM 自己”懂事”地不打印密钥(更不靠谱)。

Nenya 的思路完全不同——它作为一个透明的中间层,在 Agent 和 LLM 之间做请求拦截和安全过滤。

Nenya 的架构:零依赖的安全中间层

Nenya 用 Go 编写,编译后是一个单二进制文件,零外部依赖。它不依赖 OpenSSL、不依赖 libc 以外的任何动态库,甚至连数据库都不需要。

它的部署位置很清晰:

Cursor / OpenCode / Aider
        │
        ▼  POST /v1/chat/completions
┌──────────────────────────┐
│      Nenya Gateway       │
│  ┌─ 密钥脱敏(正则)    │
│  ├─ RBAC 权限检查        │
│  ├─ Agent 路由 + 熔断    │
│  ├─ MCP 工具注入          │
│  └─ Token 预算裁剪        │
└──────────────────────────┘
        │
        ▼ 转发至上游
Anthropic / Gemini / DeepSeek / ...

开发者只需要把 Agent 工具的 API 端点改成指向本地 Nenya,所有流量自动经过安全过滤。

三层密钥保护机制

Nenya 在安全层面做了三层防护:

第一层:Tier-0 正则密钥过滤器(始终开启)

这是最基础也最关键的一层。Nenya 内置了一组正则规则,覆盖 AWS Access Key、GitHub Token、Stripe API Key、数据库连接串等常见密钥格式。任何匹配规则的字符串在请求到达 LLM 之前就被替换为 ***。这条规则是”always-on”的,无法被关闭——即使 Nenya 的其他管道全部失效,密钥脱敏依然生效。

第二层:可插拔的拦截器链

除了基础正则过滤,Nenya 还提供三级内容管道:

  • RedactInterceptor:用户自定义的正则脱敏规则,覆盖第一层未覆盖的特有密钥格式
  • EntropyInterceptor:检测高熵字符串(典型的密钥特征:随机字符序列),自动标记并脱敏
  • TFIDFInterceptor:相关性评分,避免过度脱敏导致 Agent 上下文丢失
  • BouncerInterceptor:引擎摘要,为后续 token 预算裁剪提供依据

第三层:内存级密钥保护

Nenya 使用 mlock 将密钥锁定在物理内存中,防止被换出到磁盘交换分区。进程启动后密钥存储区被密封为只读,同时禁用 core dump。即使 Nenya 进程被攻击者获取,密钥也不会出现在磁盘上。

Agent 路由与智能回退

Nenya 不仅仅是一个安全过滤器,它还是一个智能路由网关。配置中的 agent 可以定义多条 fallback 链:

{
  "agents": {
    "coding-agent": {
      "strategy": "fallback",
      "models": ["gemini-2.5-flash", "claude-sonnet-4", "deepseek-chat"]
    }
  }
}

当主模型超时或返回错误时,Nenya 自动切换到下一个模型,并带有断路器机制——连续失败的提供商会被暂时移除出路由池,避免重复超时耗费 token。

它还支持延迟感知路由:根据历史响应时间的中位数自动排序提供商,加入 ±5% 的随机抖动防止惊群效应。

MCP 工具的双向集成

Nenya 不仅仅是个 API 网关——它可以连接 MCP 服务器,实现工具的多轮执行:

  1. Agent 发送的请求中包含工具调用(tool call)
  2. Nenya 拦截并转发到 MCP 服务器执行
  3. MCP 服务器的结果回传给 Nenya
  4. Nenya 将结果合并到 SSE 流中返回给 Agent

这个模式的好处是:Agent 不需要知道 MCP 服务器的存在,所有 MCP 工具的调用对 Agent 透明。且 Nenya 可以在 MCP 工具执行前后做安全检查。

部署体验:一行命令启动

Nenya 的零依赖特性让部署极其简单。用 Docker/Podman 一行命令启动:

podman run -d \
  --name nenya \
  -p 8080:8080 \
  -v ./config:/etc/nenya:ro \
  -v ./secrets:/run/secrets/nenya:ro \
  -e NENYA_SECRETS_DIR=/run/secrets/nenya \
  --cap-drop=ALL \
  --cap-add=IPC_LOCK \
  --security-opt=no-new-privileges:true \
  --read-only \
  --tmpfs /tmp:rw,noexec,nosuid,size=64M \
  ghcr.io/gumieri/nenya:latest

配置文件和密钥文件分离,密钥通过 systemd credentials 或容器挂载注入,永不落盘。

对于 Linux 用户,还有更原生的方式——直接安装 deb/rpm 包,用 systemd socket activation 管理生命周期:

sudo systemctl enable --now nenya.socket
sudo systemctl enable --now nenya.service

然后配置 Cursor 或 OpenCode 将 API 端点指向 http://localhost:8080/v1/chat/completions,所有流量自动经过安全过滤和智能路由。

适合什么样的团队

Nenya 特别适合以下场景:

  • 使用多个 AI 编程工具的团队:Cursor、OpenCode、Aider 一起用,需要一个统一的安全层
  • 对密钥安全有合规要求的项目:SOC2、ISO 27001 审计中,不能接受 API Key 出现在 LLM 提供商日志中
  • 自建 AI 基础设施的团队:用 Ollama 跑本地模型 + 云端模型做 fallback,Nenya 的统一路由和管理能力刚好匹配
  • MCP 工具生态的深度使用者:多个 MCP 服务器的管理和安全接入需要一个统一的入口

结语

AI 编码 Agent 的普及让开发者生产力大幅提升,但也带来了新的安全挑战。你的 API Key 在被发送到 LLM 提供商之前,是否经过了安全检查?如果你同时使用 Cursor、Claude Code 和 Codex,每个工具的密钥管理是否一致?

Nenya 用一个单二进制文件解决了这些问题。它不追求大而全的平台功能,而是专注于一个明确的场景——在 AI 编码 Agent 和 LLM 之间做一层安全、智能、透明的中间层。这正是当下 AI 工具生态中最需要的基础设施。


相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。