文档 / 安全

凭据保险库

Yuli 会找出项目中散落的 .env、密钥和令牌,并建议把它们加密保存到仓库之外,同时不影响运行。

Yuli 会检测项目中散落的凭据(根目录下的 .env、私钥、.npmrc 中的令牌、服务账号、直接写在代码里的机密……),并建议把它们保存到 仓库之外的加密保险库 中。未经你确认,任何东西都不会被移动。

检测哪些内容

类型 示例
环境 .env、.env.local、.env.production……模板 .env.example、.env.sample 和 .env.template 不计入。
密钥和密钥库 *.pem、*.key、*.p12、*.pfx、*.jks、id_rsa、id_ed25519
工具凭据 JSON 服务账号、credentials.json、带令牌的 .npmrc、.yarnrc 或 .pypirc、.aws/credentials、kubeconfig、Docker 的 config.json、*.tfvars、.netrc、.git-credentials、.pgpass
代码 直接写在源代码中的机密

每个发现都会标明它在 git 中的状态。以下情况会被标记为更严重:

徽章 含义
Git 正在跟踪 该文件已纳入版本控制。
未在 .gitignore 中 该文件没有被忽略:下一次 commit 可能会把它提交上去。
在 git 历史中 它曾经被提交到仓库。

“凭据暴露”卡片

当 Yuli 发现问题时,会出现 凭据暴露 卡片。对每个发现,你可以选择:

  • 移到保险库(推荐):Yuli 把它加密复制到保险库,校验副本,确认无误后才删除原文件。它会创建一个键值为空的 .env.example,并把相应模式添加到 .gitignore。
  • 保持现状:留在原处。填写 原因 并点击 记住,之后就不会再询问。
  • 打开:在编辑器中打开它。

被移动的文件随时都可以 恢复。

逐步移动 .env

已完成 0/6

如果文件 曾被提交到 git,仅仅移动它是不够的:机密仍然留在历史中。Yuli 会提醒你必须 轮换 它(更换密码或令牌),并告诉你如何用 git filter-repo 清理历史。Yuli 绝不会 自行改写历史。

存放位置与加密方式

默认位置 <configuración>/yuli-ide/vault/<id-del-proyecto>/,位于你用户的配置文件夹中,不在任何项目内
权限 仅限你本人:macOS 和 Linux 上为 0700/0600,Windows 上为针对你用户的 ACL
Windows 上的加密 DPAPI
macOS 和 Linux 上的加密 AES-256-GCM,主密钥保存在系统钥匙串中

如果系统无法提供这种保护,Yuli 不会移动任何东西。

你可以通过 更改位置… 选择其他文件夹(例如外部磁盘),只要它位于项目和任何 git 仓库之外即可。

选项

在 全局选项 › 安全 › 凭据保险库 中:

选项 作用
更改位置… 为保险库选择其他文件夹。
注入 把保险库中的变量传给运行进程。默认注入 .env、.env.local 和 .env.development。
运行时生成文件 在运行期间写入一个临时 .env。
添加变量 直接向保险库添加一个新变量。
在项目中创建 .env.example 生成键值为空的模板。
显示 将某个值显示 20 秒。

你的项目照常运行

运行时(运行配置、任务和集成终端),Yuli 会把保险库中的变量作为环境变量注入。dotenv 库会遵从它们,因为真实的环境变量优先。

如果你的工具需要磁盘上的文件,请开启 运行时生成文件:Yuli 只在运行期间写入一个临时 .env(权限 0600,被 git 忽略),并在运行结束时删除。

至于 AI 智能体

智能体(Claude Code、Kiro、Codex、Antigravity、Copilot 和 Yuli 聊天)永远看不到这些值。智能体的 hooks 会拒绝访问保险库文件夹;如果某个值出现在终端输出中,也会被遮蔽。

不过,智能体可以借助两个不返回任何值的工具帮你找到问题:

工具 作用
yuli_vault_findings 只读:路径、类型、严重程度、git 状态、变量的 名称,以及保险库中已保存的内容。绝不返回值。
yuli_vault_propose_move 向你显示 Yuli 的卡片,列出它建议移动的文件及原因。它不会移动任何东西:由你在卡片上决定。

这样,智能体可以说“根目录下有一个 .env,要把它移到保险库吗?”,但永远无法读取它。另请参阅机密与隐私。