软件开发中安全存储密钥的最佳实践
docs The open-source repo for docs.github.com 项目地址: https://gitcode.com/gh_mirrors/do/docs
什么是密钥?
在软件开发领域,密钥(Secret)是指用于认证或授权访问系统、服务、数据和API的敏感信息。常见的密钥类型包括:
- API密钥和访问令牌:用于与外部服务交互
- 数据库凭证:用于访问本地和外部数据库
- 私钥:如SSH私钥和PGP私钥,用于服务器访问和数据加密
这些密钥一旦泄露,可能导致严重后果,因此必须妥善保管。
密钥泄露的风险
密钥泄露可能带来以下风险:
- 未授权访问:第三方可获得密钥所允许的所有访问权限
- 数据窃取:可能导致用户敏感数据泄露,引发隐私和法律问题
- 经济损失:第三方可能在云服务上运行未经授权的工作负载
- 服务中断:第三方可删除、修改或破坏服务器,导致服务中断和数据丢失
密钥管理最佳实践
最小权限原则(PoLP)
- 只授予密钥完成其功能所需的最小权限
- 如果密钥仅用于读取数据,不要赋予写入权限
- 考虑使用专门的服务账户而非个人账户来管理密钥
应用中的密钥保护
- 永远不要硬编码密钥:使用环境变量或专门的密钥管理工具
- 安全共享密钥:使用密码管理器,避免通过邮件或即时消息发送
- 设置过期时间:定期轮换密钥,降低旧密钥被利用的风险
- 日志脱敏:确保日志中不会记录明文密钥
密钥泄露后的应急措施
- 立即撤销:即使只是短暂泄露,也应视为密钥已泄露
- 检查日志:查看是否有可疑活动记录
- 改进流程:分析泄露原因,防止类似事件再次发生
实践:安全存储和使用密钥
1. 创建练习仓库
首先创建一个新仓库作为练习环境。确保仓库设置为公开可见。
2. 模拟错误提交(仅用于练习)
在YAML工作流文件中故意添加一个假令牌,体验密钥扫描警报功能:
- 编辑
.github/workflows/comment.yml
文件 - 在
GH_TOKEN: ""
中添加假令牌 - 尝试提交时,系统会触发推送保护警报
- 取消提交以避免"泄露"密钥
3. 创建真实令牌
遵循最小权限原则创建个人访问令牌:
- 设置7天有效期
- 仅选择需要的仓库
- 仅授予"问题"的读写权限
- 生成令牌后立即安全存储
4. 安全存储令牌
将生成的令牌安全存储在仓库密钥中:
- 进入仓库设置
- 选择"Secrets and variables" → "Actions"
- 添加新的仓库密钥,命名为
MY_TOKEN
- 粘贴令牌值并保存
5. 在工作流中引用密钥
更新工作流文件以使用存储的密钥:
GH_TOKEN: {% raw %}${{ secrets.MY_TOKEN }}{% endraw %}
6. 测试工作流
- 创建一个新问题
- 工作流会自动运行并在问题下添加评论
- 评论将以你的身份发布,因为使用了你的令牌
后续学习建议
要深入了解密钥扫描和推送保护功能,可以完成相关学习课程。此外,学习如何识别和修复代码安全问题也是代码安全的重要组成部分。
通过遵循这些最佳实践,你可以显著降低密钥泄露的风险,即使发生泄露也能快速响应,将损失降到最低。记住,密钥安全是开发过程中不可忽视的重要环节。
docs The open-source repo for docs.github.com 项目地址: https://gitcode.com/gh_mirrors/do/docs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考