为啥要保留从存储库中检查出来的秘密?

Posted

技术标签:

【中文标题】为啥要保留从存储库中检查出来的秘密?【英文标题】:Why should you keep secrets checked out of your repository?为什么要保留从存储库中检查出来的秘密? 【发布时间】:2017-03-29 13:00:47 【问题描述】:

似乎众所周知,将机密文件(包含密码、API 密钥等的任何内容)从您的 git 存储库中检出(指示 here、here、here、@987654324 @ 还有更多)

为什么?

【问题讨论】:

这里是“秘密”一词的字典条目:dictionary.com/browse/secret。 注意:“签出”是错误的短语。直接说“out of”。被“签出”意味着它们首先是 in 存储库。根据定义,存储库中的任何内容不是机密。 【参考方案1】:

这通过使这些“秘密”的值(以及其他与密码/安全/令牌相关的值)仅在生产环境中知道,而不是在任何地方检出存储库,从而增强了安全性。如果可能,每个环境(例如,本地开发、开发服务器、登台/演示服务器、生产环境等)都应该有自己单独的身份验证或安全参数配置,并且这些应该在本地环境中配置,而不是存储在应用程序的代码中。

即使您的存储库是私有的,它仍然不安全。开发人员来来去去。操作人员来来去去。项目管理来来去去。您可能有一些具有 repo 访问权限的第三方承包商。一个足够大的项目往往会随着时间的推移有很多参与者在工作,而且他们中的任何一个都没有必要知道生产配置值(也许除了操作人员)。即使使用私有存储库,将密钥/值暴露给具有存储库访问权限的任何人仍然存在安全风险。

【讨论】:

我经常看到人们在开发过程中需要其中一些密钥,然后无论如何都要将密钥的一个版本复制到他们的计算机上。如果您在 dev 中需要其中一些键,是否意味着您做错了什么? @MarcoPrins 这取决于使用这些密钥的服务的重要性,并且需要您的经验和专业知识来做出判断。在您与开发人员协调并努力创建该服务的仅开发版本,并最终为每个项目迁移到单独的环境配置文件时,可以在您的新 MVP 项目上快速移动以在其中存储一些不太重要的密钥环境。只是不要将此信息存储在应用程序中作为长期计划,并且不要存储关键(财务?prod db creds?)服务身份验证数据。

以上是关于为啥要保留从存储库中检查出来的秘密?的主要内容,如果未能解决你的问题,请参考以下文章

您如何处理公共 git 存储库中的敏感数据?

terraform 从 gcp 秘密创建 k8s 秘密

移动应用中的OAuth秘密

Azure KeyVault 迭代保管库中的所有机密

在 iOS 中,如何存储允许我与服务器通信的秘密“密钥”?

快速上手搜索引擎的秘密武器——Lucene