
LLM API密钥如何永远不进沙箱nono代理凭据注入完整教程【免费下载链接】nonoagent runtime security - zero trust, zero setup, zero latency.项目地址: https://gitcode.com/gh_mirrors/non/nono运行 Claude Code、Codex 等 AI 智能体时大多数人习惯把OPENAI_API_KEY直接塞进环境变量——这意味着 LLM API 密钥长期躺在 agent 进程的环境里随时可能被 prompt 注入偷走。nono是一款零信任 AI agent 沙箱无容器、无守护进程、零延迟它的代理凭据注入功能让真实密钥永远不进入沙箱本地反向代理在转发请求时替你签名即使 agent 被攻破也读不到密钥。本文带你 3 步完成配置。为什么不要把 LLM API 密钥放进沙箱把密钥写成环境变量只是解决了硬编码问题并没有解决暴露问题密钥出现在进程环境如/proc/pid/environ和内存里沙箱内任何代码都能读agent 的每一次工具输出都是不可信输入——一条恶意的 prompt 注入就可能诱导 agent 读取并外发自己的环境变量沙箱的网络白名单往往必须放行 LLM API密钥一旦泄露就有一条现成的外发通道。nono 的思路是把执行体与秘密彻底切开agent 运行在内核沙箱边界之下而密钥始终留在边界之上的宿主侧。nono 代理凭据注入的工作原理启用--credential后nono 在宿主机上启动一个不受沙箱约束的本地反向代理流程只有四步agent 把请求发往localhost:端口/服务/...代理剥离服务前缀验证本次会话的幻影令牌从系统钥匙串取出真实密钥注入为 HTTP 头通过 TLS 转发到上游 API并把流式响应SSE 等原样传回。Agent 发送: POST http://127.0.0.1:PORT/openai/v1/chat/completions Proxy 发送: POST https://api.openai.com/v1/chat/completions Authorization: Bearer sk-...从钥匙串注入关键细节幻影令牌Phantom Token沙箱内的子进程只拿得到一个会话级伪令牌如nono_sess_a1b2c3...真正的密钥只存在于代理一侧。每个会话生成唯一的 256 位会话令牌经NONO_PROXY_TOKEN传入防止本机其他进程蹭用注入路由。自动改道代理会把OPENAI_BASE_URL、ANTHROPIC_BASE_URL等变量设置为http://127.0.0.1:端口/服务主流 LLM SDK 会自动遵循无需改任何业务代码。️零落盘、零日志密钥在内存中使用ZeroizingString存储、退出即擦除审计日志只记录ALLOW REVERSE openai POST /v1/chat/completions - 200永远不含密钥值。三步配置从存密钥到跑通第 1 步把密钥存入系统钥匙串所有 nono 密钥都统一存放在系统钥匙串macOS Keychain / Linux Secret Service下的nono服务中。macOSsecurity add-generic-password -s nono -a openai -w sk-...Linux需要libsecret-toolsecho -n sk-... | secret-tool store --labelnono: openai \ service nono username openai target default⚠️ Linux 下属性名必须是username而非account且要带上target default否则 keyring 库找不到条目。第 2 步带凭据注入运行 agentnono run --allow-cwd --network-profile claude-code --credential openai -- my-agent启动时 nono 会列出授予沙箱的完整能力清单然后进入 agent第 3 步验证密钥没进沙箱子进程环境里只有指向本地代理的OPENAI_BASE_URL与幻影令牌没有sk-开头的真实密钥nono 审计日志中每次经代理的调用都会留下ALLOW REVERSE openai ...记录方便事后追溯在沙箱内执行nono why可随时查询某个地址是否被放行。内置 LLM 服务路由开箱即用nono 内置了主流 LLM 与开发平台的凭据路由直接--credential 服务名即可无需任何自定义配置服务上游地址注入头格式openaihttps://api.openai.com/v1AuthorizationBearer {}anthropichttps://api.anthropic.comx-api-key{}gemini/google-aihttps://generativelanguage.googleapis.comx-goog-api-key{}githubhttps://api.github.comAuthorizationtoken {}gitlabhttps://gitlab.com/apiAuthorizationBearer {}这些路由定义在内置的网络策略 crates/nono-cli/data/network-policy.json 中配套的域名白名单分组llm_apis、package_registries等也在同一文件里维护。进阶在 profile 中声明自定义凭据要把配置固化到团队可复用的 profile组合式 JSON在network段写custom_credentials即可。支持从钥匙串、1Passwordop://、Bitwardenbw://、Apple Passwordsapple-password://、文件file://、宿主环境变量env://甚至 CLI 命令捕获cmd://例如gh auth token取密钥{ meta: { name: my-agent }, network: { network_profile: claude-code, credentials: [openai], custom_credentials: { telegram: { upstream: https://api.telegram.org, credential_key: telegram_bot_token, inject_header: Authorization, credential_format: Bearer {} } } } }nono run --profile my-agent -- my-agent此外还支持四种注入模式请求头 / URL 路径 / 查询参数 / Basic Auth以及面向 Amazon Bedrock 等场景的AWS SigV4 主机侧签名——代理在宿主上解析凭据并逐请求重签名沙箱内连能用的 AWS 凭据都不存在。完整字段说明见 docs/cli/features/credential-injection.mdx。注意事项与常见坑WSL2代理注入默认被禁用网络封禁无法在内核级强制环境变量注入--env-credential不受影响可正常工作Go 编写的 CLImacOSgh、terraform等只信任系统证书库会拒绝代理签发的证书加--trust-proxy-ca一次性把代理 CA 存入钥匙串即可流式响应chat completions 的 SSE、MCP Streamable HTTP 均无缓冲直转打字机体验不受影响混用模式同一 profile 里可对非网络类秘密如数据库口令用env_credentials走环境变量注入对 LLM 密钥用custom_credentials走代理注入两不耽误。总结真实 LLM API 密钥只留在宿主侧钥匙串沙箱内只有幻影令牌——这是代理注入与塞环境变量的本质区别会话令牌 域名白名单 审计留痕构成完整的零信任链路内置 6 条主流服务路由3 条命令即可完成配置profile 化后可在团队间共享。延伸阅读官方文档docs/cli/features/credential-injection.mdx、docs/cli/features/networking.mdx、docs/cli/internals/security-model.mdx凭据代理源码crates/nono-proxy/src/credential.rs、crates/nono-proxy/src/token.rs钥匙串读写实现crates/nono/src/keystore.rs【免费下载链接】nonoagent runtime security - zero trust, zero setup, zero latency.项目地址: https://gitcode.com/gh_mirrors/non/nono创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考