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