在用于实时部署的公共回购中隐藏凭据



在GitHub等公共存储库中隐藏凭据(如API密钥或数据库凭据(的最佳实践是什么?我的解决方案是有一个存储凭据的配置文件,然后添加一个gitignore文件,在推送过程中不包括配置文件。

需要注意的是,这种回购被用于每次推送的部署,例如Netlify或Heroku。因此,Netlify/Heroku网站在回购推送中处于在线状态。在这种情况下,如果存在API调用或数据库请求,则凭证将需要在公共回购中,因为这是;生产文件夹";。

我听说过Travis CI,它可以在GitHub推送后构建,但我没有深入研究。从公共存储库部署时,其他项目如何使用其凭据?

通常,人们将机密传递给代码的方式是通过环境,这被认为是最佳实践。原因如下:

  • 环境中的秘密永远不会写入磁盘,因此发现或泄露的意外风险要小得多
  • 环境中的秘密只对具有相同用户ID的其他进程可见,这在部署到硬件时很有帮助

如果您的凭据足够小,则可以使用您正在使用的任何提供商的秘密存储或环境存储。所有主要的CI提供商都有这一点,我预计大多数主要的托管网站也会这样做;我知道赫罗库知道。必须为文件的SSH密钥之类的东西可以从环境中写入磁盘,最好是写入到一个已清理的临时目录中。

如果您要部署到自己的基础设施,通常您会为此目的拥有一些加密的秘密存储。保险库是一种常见的保险库。

如果您需要用于开发的凭据,您可以对代码进行结构化,以便在没有设置变量的情况下有一个安全的默认值(如硬编码短语secret(用于开发,或者您可以在开发和测试代码中提供一组回退。一些项目也使用.env文件,尽管这需要一些人不想安装的额外代码。

如果您有无法存储在秘密存储中的巨大凭据,则可以对其进行加密并将密码短语存储在秘密存储器中。

最新更新