用 Veil 保护 AI 编码 Agent 的 API 密钥安全
AI 编码 Agent(如 Claude Code、Cursor、GitHub Copilot)正在改变开发者的工作方式。但在使用过程中,有一个被严重忽视的安全隐患——你的 API 密钥和敏感凭证正在被 Agent 直接读取。
当你的 Agent 能够读取 .env 文件、浏览目录结构、自动执行脚本时,它实际上拥有你项目中的所有秘密。传统的 .gitignore 防止了密钥被提交到 Git 仓库,但没有任何机制防止正在运行的 AI Agent 读取并泄露这些凭证。
Veil 正是为解决这一问题而生的开源工具。它的定位很清晰——”写给 AI 编码 Agent 的 .gitignore“。
Veil 的工作原理
Veil 的核心逻辑非常简单但有效,分为三步:
1. 提取密钥,留下占位符
运行 veil init 后,工具会自动扫描项目中的 .env 文件,将 Bearer 类型的 API Token(如 ANTHROPIC_API_KEY、OPENAI_API_KEY、GITHUB_TOKEN 等)迁移到操作系统的密钥链(Keychain)中。同时,在原位置留下格式一致、长度相同的占位符,让 Agent 看起来密钥仍然存在。
2. 本地 HTTPS 代理实时注入
当通过 veil run claude 启动 Agent 时,Veil 启动一个本地 HTTPS 代理,自动设置 HTTP_PROXY / HTTPS_PROXY 环境变量。Agent 发起的每个出站请求都会经过这个代理,Veil 在代理层将占位符替换为真实凭证再发送出去。
3. 审计日志
每次凭证注入和 Agent 操作都会被记录到本地 SQLite 数据库。你可以通过 veil log 查看所有代理请求,了解 Agent 正在访问哪些外部服务。
veil log --since 1h # 查看最近 1 小时的代理活动 veil log --blocked # 查看被 Veil 拦截的请求
快速上手
安装(推荐使用 Homebrew):
brew install getveil/tap/veil
初始化:
cd your-project/ veil init
Veil 会自动扫描 .env 文件中的 Bearer Token,将其移入密钥链,留下占位符。你可以用 veil status 查看当前管理的密钥列表。
启动 Agent:
veil run claude # 通过 Veil 代理运行 Claude Code veil run cursor # 通过 Veil 代理运行 Cursor veil run curl # 任何尊重 HTTP_PROXY 的工具都可以
Veil 会为子进程单独注入自定义 CA 证书,不影响系统信任存储。
支持的凭证类型
目前 Veil 支持以下场景:
| 类别 | 支持情况 |
|---|---|
| Bearer 凭证 | GitHub PAT · OpenAI · Anthropic · Stripe · Slack · SendGrid · Resend · Supabase · Vercel · Replicate · Hugging Face · Google · GitLab |
| Agent 工具 | Claude Code · Cursor · Copilot · Windsurf · 任何尊重 HTTP_PROXY 的 CLI 工具 |
| 密钥存储 | macOS Keychain · Linux Secret Service · 无头 Linux age 加密文件回退 |
未识别的 Bearer 密钥会被检测并报告,你可以通过 veil add NAME --host 手动管理。
实际使用场景
场景一:保护团队项目中的敏感 API
假设你的项目集成了 Stripe、OpenAI、GitHub 等多个第三方服务,.env 文件中存储了价值数万美元的 API 配额密钥。AI 编码 Agent 在自动补全代码、运行测试或重构文件时,可能无意中将这些密钥输出到日志、错误报告或对话历史中。使用 Veil 后,Agent 只看到占位符,真正密钥始终在密钥链中。
场景二:CI/CD 环境中的安全编码
无头 Linux 服务器上的 CI 环境通常没有桌面密钥链。Veil 为这种情况提供了 age 加密文件回退方案:
export VEIL_PASSPHRASE="your-strong-passphrase" veil init veil run claude
密钥文件保存在 ~/.local/state/veil/ 下,由 passphrase 加密保护。
场景三:并行管理多个项目的凭证
Veil 是按项目管理的。不同的项目可以有不同的 .env 文件和不同的密钥集。veil status 和 veil list 可以让你随时查看当前项目下管理的密钥:
veil status # 概览状态 veil list # 列出所有管理的密钥和作用域
与其他工具的对比
Veil 不是密钥管理器的替代品,而是补充:
| 工具 | 存储密钥 | 扫描泄露 | 对 Agent 隐藏密钥 | 本地优先 | 免费 |
|---|---|---|---|---|---|
| Doppler | ✓ | — | — | — | 免费增值 |
| Infisical | ✓ | 部分 | — | 自托管 | ✓ |
| gitleaks | — | ✓ | — | ✓ | ✓ |
| Veil | OS 密钥链 | — | ✓ | ✓ | ✓ |
最佳实践总结
- 操作前备份:
veil uninstall支持--dry-run预览变更计划,安全放心 - 定期审计:使用
veil log检查 Agent 的 API 访问模式,发现异常行为 - 手动添加未识别密钥:对于内部 API 或自定义服务的密钥,使用
veil add显式管理 - 团队推广:在项目的
CONTRIBUTING.md中添加 Veil 初始化步骤,确保所有开发者使用相同的安全标准
结语
AI 编码 Agent 正在成为开发者的标配工具,但安全隐患也随之而来。Veil 用极简的方式填补了”密钥在 Agent 面前裸奔”这一安全缺口——不需要修改 Agent 配置,不需要运行守护进程,一条 brew install 命令就能让你的 API 密钥在 Agent 面前隐形。
对于每天使用 AI 编码工具的开发者来说,这可能是今天最简单的安全升级。