社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

我如何才能不将我的API密钥/凭证推送到GitHub,尤其是公共回购

DeathJack • 4 年前 • 908 次点击  

我问过一些开发人员如何确保密钥和凭证文件不会被推送。他们给了我很少的答案,但我没有找到一致的答案。 假设在/config文件夹中有creds.json文件。不将这些凭证推送到GitHub的有效方法是什么?

我在网上找到的答案很少:

  • 将它们添加到.gitignore
  • 将密钥单独存储在主机或不同文件夹中
  • 小心点。

我读到的博客:

https://www.agwa.name/projects/git-crypt/

https://blog.roundingpegs.com/how-i-avoid-committing-passwords-to-github/

是否有任何工具或更有效的方法,使我不会在提交之前意外地将密钥提交给Github或警告我?

我希望您总结一下防止密钥进入Github的所有可能方法。支持你的总结的例子会很好。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38905
 
908 次点击  
文章 [ 5 ]  |  最新文章 4 年前
Illya Kysil
Reply   •   1 楼
Illya Kysil    5 年前

看起来像 git-secrets 完全按照你的要求去做。

Keerthikanth Chowdary
Reply   •   2 楼
Keerthikanth Chowdary    5 年前

您可以使用一些行业标准工具,如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的管理器。

希望这对你有帮助。干杯!!

Guillaume
Reply   •   3 楼
Guillaume    5 年前

您可以有一个单独的项目/包,其中包含特定于环境的配置,包括您的秘密。

这些秘密是用一个只有授权人员才能拥有的私人密钥加密的。

在安装包时,您将需要私钥来解密目标计算机上的机密,这可以由具有访问私钥权限的ops/dev ops完成。

这样,您就可以安全地将加密的秘密推送到GitHub或任何不安全的环境中。

或者,你可以看看 https://www.agwa.name/projects/git-crypt/ 这允许您拥有加密的文件,但我仍然希望有一个单独的包来存放这些秘密,因为您需要每个环境(UAT、PROD等)使用不同的秘密。

或者你可以加密整个回购协议 https://github.com/spwhitton/git-remote-gcrypt 但是,您将丢失托管环境功能,如浏览提交历史记录等。

theBuzzyCoder
Reply   •   4 楼
theBuzzyCoder    5 年前

当然有更好的方法!

我建议您不要将任何硬编码的密码存储在代码中,因为它有被上传到Github或任何其他公共存储库的风险。更好的方法是拥有一个钥匙圈/应用程序,它可以将您的密码存储在云中,并且只允许您的应用程序访问它们。

例如, AWS Secrets Manager . 我确信还有其他应用程序可以做到这一点,但这是我推荐的应用程序。使用此工具,您可以管理密码、旋转密码和API密钥,而不必担心密钥上载到公共repo。将其存储在此处后,您的代码中需要有一个秘密管理器,用于获取密码并在应用程序中使用。

此外,还有一些其他选项:

  1. 将api密钥保存在数据库中并从中加载
  2. 保存在/etc文件夹中的.ini文件或.conf文件或.env文件
  3. 当然是AWS秘密经理

我在这里也找到了有希望的答案: https://medium.com/slalom-technology/secret-management-architectures-finding-the-balance-between-security-and-complexity-9e56f2078e54

FreshD
Reply   •   5 楼
FreshD    5 年前

我更喜欢将它们单独存储在主机或其他文件夹中,并在环境变量之外使用它们。就像你拥有的那样,你不能不小心把它们交给别人。

此外,您可以在CI构建中使用它们。如果在CI构建中还需要凭证,大多数系统都会提供加密变量,这些变量存储在构建服务器上,并且可以用作环境变量。

这样,我还可以为每个本地用户或CI使用不同的凭据,而无需更改代码。