如何安全地向团队成员传递 API 密钥和 Secret
了解如何在开发团队中安全地共享 API 密钥、Secret Key 和环境变量。避免危险的共享方式,掌握密钥管理的最佳实践。
如何安全地向团队成员传递 API 密钥和 Secret
在开发过程中,经常需要向团队成员传递 API 密钥、Secret Key、数据库密码、服务器登录信息等。问题在于如何安全地共享这些敏感信息,而不造成安全隐患。
危险的共享方式
首先来看绝对不应该使用的方法。令人惊讶的是,许多开发团队至今仍在使用这些方式。
1. 提交到 Git 仓库
将 .env 文件提交到 Git 是最常见也最危险的错误。
# 绝对不要这样做
git add .env
git commit -m "添加环境变量"
git push origin main
一旦 Secret 进入 Git 历史记录,即使用 git rm 删除,它仍然存在于历史中。如果是公开仓库,自动化机器人会在几秒内检测到。
2. 粘贴到 Slack/飞书/钉钉
在即时通讯工具中直接粘贴 API 密钥同样非常危险。
- 频道中有权限的所有人都能看到
- 通过消息搜索可以在之后被发现
- 员工离职后消息仍然保留
- 管理员可以查看所有消息记录
3. 通过邮件发送
邮件默认不加密。消息在邮件服务器之间传输时可能被截获,凭证会永久留在收件人邮箱中。
API 密钥泄露的实际损失
API 密钥泄露不仅是安全事件,更会直接造成经济损失。
AWS 密钥泄露案例
| 案例 | 损失规模 |
|---|---|
| 个人开发者 AWS 密钥暴露 | 一夜之间产生 $6,000 账单 |
| 创业公司 GitHub 公开仓库 | 3天内超过 $50,000 账单 |
| 企业内部文档泄露 | 数百万美元数据泄露事故 |
当 AWS、GCP、Azure 等云服务的密钥泄露后,攻击者会在几分钟内创建大量计算资源,通常用于加密货币挖矿。
安全的 API 密钥共享方法
方法一:LOCK.PUB 秘密备忘录(即时共享)
需要立即向团队成员传递密钥时,这是最实用的方法。
工作流程:
- 在 LOCK.PUB 上创建秘密备忘录
- 输入 API 密钥和相关信息
- 设置密码和较短的过期时间(如1小时)
- 通过即时通讯发送链接,通过私信单独发送密码
# 秘密备忘录内容示例
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI...
AWS_REGION=ap-east-1
注意:这些密钥仅用于 staging 环境。
生产环境密钥请另外申请。
优势:
- 过期后自动删除
- 需要密码才能查看
- 在服务器上加密存储
- 聊天记录中不会留下密钥原文
方法二:密钥管理工具(团队级别管理)
当团队规模扩大时,需要引入专业的密钥管理工具。
| 工具 | 特点 | 适合团队 |
|---|---|---|
| HashiCorp Vault | 最强大的密钥管理 | 大型企业 |
| AWS Secrets Manager | AWS 生态集成 | AWS 为主的基础设施 |
| 1Password Teams | 开发者友好的界面 | 创业公司、中小团队 |
| Doppler | 环境变量自动同步 | DevOps 团队 |
方法三:环境变量管理(.env.example 模式)
在项目中包含 .env.example 文件是标准做法。
# .env.example(提交到 Git)
DATABASE_URL=
API_KEY=
SECRET_KEY=
STRIPE_SECRET=
# .env(不提交到 Git)
DATABASE_URL=postgresql://user:pass@host:5432/db
API_KEY=sk-abc123...
SECRET_KEY=mysecret...
STRIPE_SECRET=sk_live_...
务必在 .gitignore 中添加 .env。
密钥管理最佳实践
1. 定期轮换密钥
API 密钥应定期更换,以便在密钥泄露时将损失降到最低。
| 密钥类型 | 建议轮换周期 |
|---|---|
| 生产环境 API 密钥 | 90天 |
| 数据库密码 | 60天 |
| 服务令牌 | 30天 |
| 开发/测试密钥 | 有人离职时立即更换 |
2. 按环境分离密钥
为开发、测试、生产环境分别使用不同的密钥。
3. 最小权限原则
为每个 API 密钥仅授予必要的最小权限。
- 只读操作使用只读密钥
- 发放仅能访问特定服务的密钥
- 管理员密钥限制在最少人员范围内
4. 自动化泄露检测
使用 GitHub Secret Scanning、GitGuardian、TruffleHog 等工具自动检测代码仓库中提交的密钥。
使用 LOCK.PUB 的快速共享工作流
以下是开发团队中最常见场景的工作流程。
新成员入职
新开发者加入时,将所有必要的环境变量整理在秘密备忘录中,设置24小时过期,分享链接和密码。
向外部合作伙伴共享密钥
为合作方专门发放独立密钥,通过短过期时间的秘密备忘录传递,合作结束后撤销密钥。
故障响应时紧急共享密钥
服务器故障需要紧急传递访问信息时,创建1小时过期的秘密备忘录,电话告知密码,故障解决后轮换密钥。
总结
API 密钥和 Secret 管理是开发安全的基础。在即时通讯中粘贴密钥或通过邮件发送虽然方便,但一次泄露可能造成数十万甚至数百万的损失。
如果你现在需要向团队成员传递密钥,试试秘密备忘录。