CubeSandbox凭证保险库完全指南:API密钥永不进入沙箱
【免费下载链接】CubeSandboxInstant, Concurrent, Secure & Lightweight Sandbox for AI Agents.项目地址: https://gitcode.com/GitHub_Trending/cu/CubeSandbox
CubeSandbox 是一个面向 AI Agent 的即时、并发、安全、轻量级沙箱平台,其内置的凭证保险库机制(Credential Injection)让 API 密钥全程留在宿主机一侧,沙箱内的工作负载永远看不到原始密钥。本文将带你快速理解这套"密钥永不进沙箱"的凭证保护方案是如何运作的,以及如何在你的 Agent 工作流中启用它。
为什么密钥不应该进沙箱?
AI Agent 的沙箱本质上是"不可信代码执行环境"——Agent 生成的代码可能包含提示词注入、恶意脚本,甚至就是普通的"手滑"。传统的做法是把 API Key 写进环境变量或挂载到文件系统,一旦沙箱内代码被攻破或产生泄漏(比如把os.environ打印出来),密钥就直接暴露了。
CubeSandbox 的凭证保险库思路完全相反:密钥不下发,请求代签。
CubeEgress:透明出网代理是保险库的核心
凭证保险库由 CubeSandbox 的出网代理组件CubeEgress实现。它以透明代理的方式拦截沙箱发出的每一个 HTTP/HTTPS 请求,在宿主机侧完成三件事:
- 🛡️域名过滤— 按 SNI、Host、方法、路径决定放行或拒绝
- 🔐凭证注入— 在请求离开沙箱前,自动追加
Authorization: Bearer …等头部 - 📝访问审计— 每次决策写入宿主机 JSONL 审计日志,密钥自动脱敏
由于代理运行在宿主机的 TPROXY 链路上,沙箱不离开宿主机就无法绕过它。
一键配置:3 条规则完成密钥托管
启用凭证注入只需要在创建沙箱时声明一条 inject 规则(以 Python SDK 为例):
rules = [ Rule( name="deepseek_api", match=Match(scheme="https", host="api.deepseek.com", method=["POST"], path="/v1/chat"), action=Action( allow=True, audit="metadata", inject=[Inject( header="Authorization", format="Bearer ${SECRET}", secret="sk_xxxxxxxx", # 只存在于规则中,沙箱永远看不到 )], ), ), ]行为要点:
- 沙箱内的代码不需要任何认证头,直接
POST即可,CubeEgress 会在转发前补上Authorization format默认是${SECRET},可换成任意模板适配非 Bearer 方案- 注入仅在
allow=true的规则上生效;拒绝规则里写注入属于配置错误,会被直接丢弃
密钥的三道安全防线
| 防线 | 机制 | 说明 |
|---|---|---|
| 隔离 | 密钥只存在于规则列表 | 沙箱创建时推送到 CubeEgress,不进入沙箱的环境变量、文件系统或进程空间 |
| 脱敏 | 审计日志自动清洗 | 写入日志前,所有命中token / secret / key / password等特征的头部与 JSON 字段值被替换为<redacted> |
| 不可绕过 | TPROXY + eBPF 标记 | 出网流量在数据平面被强制引流,沙箱无法绕过代理直连 |
脱敏逻辑位于 redactor.lua,对请求头按名称黑名单 + 关键字段匹配,对 JSON 请求体做递归扫描,连"pin": 1234这样的数字型凭证也不放过。
工作原理速览
- 引流:eBPF(mvmtap)根据 L7 规则把出网流量标记为 HTTP/HTTPS,iptables 将其 TPROXY 到 CubeEgress 监听器
- 解密:CubeEgress 为请求的 SNI 即时签发叶子证书(由模板构建时预置的根 CA 签名),沙箱内的 TLS 客户端完全无感
- 决策与注入:access_phase.lua 执行 匹配 → 放行/拒绝 → 凭证注入
- 审计:audit.lua 将每次请求写为
/data/log/cube-egress/access.jsonl中的一行 JSON,密钥在写盘前已被redactor清除
环境变量注入 vs 凭证保险库对比
| 维度 | 传统环境变量注入 | CubeSandbox 凭证保险库 |
|---|---|---|
| 密钥位置 | 沙箱进程环境内 | 宿主机 CubeEgress 内 |
| 泄漏风险 | 一次printenv即暴露 | 沙箱侧无任何密钥副本 |
| 适用范围 | 任意出站请求可携带 | 可按域名/路径精确控制 |
| 审计能力 | 无 | 每次注入均有脱敏审计记录 |
| 密钥轮换 | 重建沙箱/重启 | 更新规则即可,业务无感 |
适用边界与延伸阅读
需要知道几种代理不在链路中的场景:沙箱间互通流量、未被 L7 规则覆盖的 TCP/UDP 端口,以及未内置 CubeEgress 根 CA 的模板(HTTPS 请求会因证书校验失败而中断)。
更多细节可阅读官方文档:
- 安全代理完整指南:docs/guide/security-proxy.md
- 网络策略(L3/L4 放行与拒绝):docs/guide/network-policy.md
- CubeEgress 数据平面源码:CubeEgress/lua/
🔐 一句话总结:把密钥交给 CubeEgress,沙箱里的 Agent 只管发请求——API 密钥永不进入沙箱,这正是 CubeSandbox 凭证保险库的核心承诺。
【免费下载链接】CubeSandboxInstant, Concurrent, Secure & Lightweight Sandbox for AI Agents.项目地址: https://gitcode.com/GitHub_Trending/cu/CubeSandbox
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考