我确实问过几个开发人员,他们如何确保不推送密钥和凭据文件。他们确实给了我一些答案,但我没有发现任何一致之处。 可以说/ config文件夹中有一个creds.json文件。不将这些凭据推送到Github的有效方法是什么。
我在网上找到的答案很少:
我阅读的博客:
https://www.agwa.name/projects/git-crypt/
https://blog.roundingpegs.com/how-i-avoid-committing-passwords-to-github/
是否有任何工具或更有效的方式,使我不会在提交前意外将密钥提交给Github或警告我?
我希望您对防止密钥进入github的所有可能方式进行总结。支持您的摘要的示例将非常有用。
答案 0 :(得分:5)
我更喜欢将它们分别存储在主机或其他文件夹中,并在环境变量上使用它们。这样,您就不会意外提交它们。
此外,您可以在CI构建中使用它们。如果您还需要CI构建中的凭据,则大多数系统都会提供加密的变量,这些变量以加密的方式存储在构建服务器上,并且可用作环境变量。
就像我也可以为每个本地用户或CI使用不同的凭据一样,而无需更改代码。
答案 1 :(得分:3)
当然有更好的方法!
我建议您不要在代码中存储任何硬编码的密码,因为存在将密码上载到Github或任何其他公共存储库的风险。更好的方法是拥有一个可以将您的密码存储在云中并使其只能由您的应用程序访问的密钥环/应用程序。
例如AWS Secrets Manager。我确信还有其他应用程序可以做到这一点,但这是我推荐的应用程序。使用此工具,您可以管理密码,旋转密码和API密钥,而不必担心密钥会被上传到公共仓库。将其存储在此处之后,您需要在代码中有一个秘密管理器,该管理器将获取密码并在应用程序中使用它。
还有其他一些选择:
我还在这里找到了有希望的答案:https://medium.com/slalom-technology/secret-management-architectures-finding-the-balance-between-security-and-complexity-9e56f2078e54
答案 2 :(得分:1)
git-secrets似乎完全符合您的要求。
答案 3 :(得分:1)
您可以有一个单独的项目/程序包,其中包含您的环境特定的配置,包括您的机密。
这些秘密是用只有授权人员才能拥有的私钥加密的。
在安装软件包时,您将需要私钥来解密目标计算机上的机密,这可以由具有私钥访问权限的ops / dev-ops完成。
通过这种方式,您可以将加密的机密安全地推送到github或任何不安全的环境。
或者,您可以查看https://www.agwa.name/projects/git-crypt/,该文件允许您具有加密文件,但是我仍然更喜欢为机密提供一个单独的程序包,因为每个环境(UAT,产品等)需要不同的机密。
或者您可以加密整个存储库https://github.com/spwhitton/git-remote-gcrypt,但是会丢失托管环境功能,例如浏览提交历史记录等。
答案 4 :(得分:1)
您可以使用某些行业标准工具,例如Hashicorp的保险库“ https://www.vaultproject.io/”来存储机密并在需要时检索它们。许多大佬使用此工具来管理自己的秘密。您必须在组织环境中安装Vault才能访问Vault。你可以参考这篇文章
“ https://www.digitalocean.com/community/tutorials/how-to-securely-manage-secrets-with-hashicorp-vault-on-ubuntu-16-04”介绍如何从Vault安装和访问机密。这是PCI投诉,可以用于存储非常敏感的信息。幸运的是,从春天开始就有一个图书馆,您可以使用该图书馆轻松地从Vault中读取机密。请参阅此页面以获取示例代码和更多的“ https://projects.spring.io/spring-vault/”。
另一方面,Amazon Web服务提供了一种称为Secrets Manager的产品。如果您的组织使用的是AWS,并且您的应用程序托管在AWS环境中,那么您很容易将机密放入机密的管理员中并进行访问。但是,机密经理还没有对PCI提出投诉,并且预计在接下来的几个月中将会对PCI提出投诉。请参阅此视频“ https://www.youtube.com/watch?v=HiY2oxR1Jd0”,了解如何在您的应用程序中使用Secret的管理器。
希望这对您有所帮助。欢呼!!