别再对你的秘密掉以轻心。改用 GitHub。

发布: (2026年5月1日 GMT+8 00:30)
9 分钟阅读
原文: Dev.to

I’m happy to help translate the article, but I’ll need the full text you’d like translated. Could you please paste the content (excluding the source line you’ve already provided) here? Once I have the text, I’ll translate it into Simplified Chinese while preserving all formatting, markdown, code blocks, and URLs.

.env 问题

三个月前,我的一个朋友为一名承包商办理入职。
他通过私信把 .env 发给了对方——这是标准做法。两天后,承包商在公共仓库里推送了一条调试日志,日志里仍然泄露了其中一个密钥。

  • 他们已经轮换密钥。客户没有察觉。
  • 但该文件仍然保存在他的 Slack 存档中。
  • 仍然保存在承包商的 Slack 存档中。
  • 仍然缓存于两台电脑上。
  • 五年后它仍会在那里。

这就是 .env 问题。大多数团队以同样的方式“解决”它:

方法问题
Slack 私信(明文永久保留在两个聊天存档中)泄露机密
Notion 页面(任何能读取页面的人都能读取生产环境)泄露机密
1Password 保管库条目(可行,但会产生第二套 ACL 需要维护)额外的 ACL 开销
.env.example(使用假值,48 小时后即失效)数据陈旧
“我会通过 Signal 发给你”(仍然是两部手机上的明文)泄露机密

我尝试了现有的工具:

  • Doppler – 适合有预算的 50 人团队($21/用户/月 + 销售电话)。
  • Infisical – 开源但感觉像是为 Kubernetes 设计的,面向 DevOps 团队。
  • dotenvx – 巧妙的 Git 加密方案,但仍需在带外渠道共享加密密钥,且缺乏团队撤销机制。

我真正想要的

  • 零新增账号零新增 ACL
  • 如果 GitHub 已经允许你向仓库推送,那么你也应该能够拉取 env。

于是我构建了 boltenv

  • 撤销队友的 GitHub 访问权限 → 他们失去 env 访问权限。完成。
  • GitHub 仓库权限即为访问列表。无需维护并行的用户系统。

快速开始

将你的 .env 推送(在你的机器上加密,仅密文离开)

npm i -g @boltenv.dev/cli
boltenv push
# ⚡ .env → org/app:development v1 (12 vars, permanent)

队友拉取

boltenv pull
# ⚡ .env ← org/app:development (12 vars)

就这么简单。无需邀请。无需 ACL 面板。无需“创建项目”。

第一次推送会在本地生成一个 AES‑256 密钥。服务器只会看到密文。你只需通过安全渠道一次将密钥分享给队友:

# 你
boltenv key export
# → dGhpcyBpcyBhIDMyIGJ5dGUga2V5...

# 队友
boltenv key import dGhpcyBpcyBhIDMyIGJ5dGUga2V5...

之后,队友只需在任意机器上运行 boltenv pull。他们会通过 Device Flow(与 gh auth login 相同的用户体验)一次性登录 GitHub。

安全细节(三层独立防护)

层级描述
GitHub 权限检查服务器使用用户的 GitHub 令牌调用 GET https://api.github.com/repos/{owner}/{repo}。如果 permissions.pushfalse 或令牌缺失,请求将在 任何数据传输之前 被拒绝。
AES‑256‑GCM(NIST 标准)• 密钥派生:HKDF‑SHA256(加密子密钥和 HMAC 子密钥分离)
• IV:12 字节, 每次推送随机生成
• 认证标签:16 字节(防篡改检测)
密钥管理主密钥永不离开本机。存放在 ~/.boltenv/keys/{owner}/{repo}.key,权限为 0600。服务器保存密文并附带一个 16 字符的密钥指纹,以便提前捕获密钥不匹配。

环境映射

分支环境
main, masterproduction
stagingstaging
developdevelopment
其他任何分支development

您当前所在的分支决定了推送/拉取的目标环境。如有需要,可使用 -e production 强制覆盖。没有令人困惑的 “环境下拉框” 陷阱。

撤销访问 – 实际场景

今天使用 boltenv
✅ 从 GitHub 移除用户✅ 从 GitHub 移除用户 → 他们无法再拉取任何 env
❌ 将其从 Doppler/Infisical/Vault 中移除(手动,常被忘记)❌ 无需额外平台进行清理
❌ 轮换他们拥有访问权限的所有密钥(很少发生)❌ 没有自动轮换(可手动轮换)
❌ 他们在 ~/projects/* 下的 .env 文件成为生产堆栈的博物馆展品❌ 他们缓存的 .env 仍留在磁盘上(没有工具能修复),但他们无法获取新的文件或推送恶意内容

这并不是完美的安全模型——它对 小团队 来说是务实的。如果需要 HIPAA 级别的合规性,请使用 Vault。如果你们只有五个人在交付 SaaS,这就是合适的控制水平。

比较表

工具每用户成本新账户?加密ACL 来源
Slack DMs免费“我信任你”
dotenvx免费git 中的 AES‑256手动密钥共享
Doppler$21/月服务器管理Doppler 用户
Infisical$8/月服务器管理Infisical 用户
1Password Dev$7.99/月(捆绑)1P 管理1Password 用户
boltenv免费 ≤ 3,之后 $4/月客户端 AES‑256‑GCMGitHub 仓库权限

在 CI/CD 中使用 boltenv(GitHub Actions)

- name: Pull env
  env:
    BOLTENV_TOKEN: ${{ secrets.GITHUB_TOKEN }}   # any PAT with repo scope
    BOLTENV_KEY:   ${{ secrets.BOLTENV_KEY }}    # base64 master key
  run: |
    npm i -g @boltenv.dev/cli
    boltenv pull -e production -y
  • BOLTENV_TOKEN 在 GitHub Actions 中可使用 secrets.GITHUB_TOKEN
  • BOLTENV_KEY 是主密钥,作为单个仓库 secret 存储。
  • 二进制文件 (boltenv) 即 SDK。

最小化本地使用

export BOLTENV_TOKEN=$GITHUB_TOKEN   # any PAT with repo scope
export BOLTENV_KEY=
boltenv pull -y

多个 .env 文件

大多数真实项目都有多个 env 文件(.env.backend.env.frontend.env.workers)。boltenv 会自动发现它们:

$ boltenv push
 Found 3 env files:
     .env.backend   18 vars
     .env.frontend  9 vars
     .env.workers   6 vars

  3 files org/app:development (permanent)

Pull 会保留布局。将文件列表保存到 .boltenv.yaml 并提交——团队成员在拉取时会得到相同的集合,避免配置漂移。

Scope & Limitations (Honest Disclosure)

  • No org‑level RBAC – repo permissions are the rules.
  • No automated key rotation – rotating means everyone re‑imports.
  • No HSM, no compliance certifications – pre‑SOC2 product.
  • No native Coolify / Railway / Vercel sync yet – on the roadmap.
    • Today you can do boltenv pull --stdout --format dotenv and paste, or run boltenv on the VPS itself with the env‑var auth above.

If any of those are deal‑breakers, boltenv isn’t for you – and that’s fine.

安装并开始使用

npm i -g @boltenv.dev/cli
cd your-project
boltenv push

代码仓库:
网站:(如果不同,请替换为实际站点)

boltenv.dev


许可证: FSL-1.1-MIT
(免费供所有人使用,包括商业用途,且不竞争)

我很想了解哪些地方对你不起作用。请评论、提交 issue,或私信我——我会阅读每一条。

如果这帮你避免了一次 Slack 私信的 .env,那就是我们的全部目标。

0 浏览
Back to Blog

相关文章

阅读更多 »

模型越智能,节省越多。

神话:更智能的模型会让插件变得多余。自从 WOZCODE 推出以来,许多 Claude Code 高级用户低声说插件的优势将会消失。