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

时间:2020-10-25 01:06:10

标签: git github heroku netlify

在诸如GitHub之类的公共仓库中隐藏凭证(例如API密钥或数据库凭证)的最佳实践是什么?我的首选解决方案是拥有一个存储凭据的配置文件,然后添加一个gitignore文件,以在推送期间不包括该配置文件。

警告:此回购被用于每次推送时进行部署,例如Netlify或Heroku。因此,一个Netlify / Heroku网站通过回购推送而在线。在这种情况下,如果有API调用或数据库请求,则凭据需要在公共存储库中,因为这是“生产文件夹”。

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

1 个答案:

答案 0 :(得分:3)

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

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

如果您的凭据足够小,则可以使用所使用的任何提供程序的秘密存储区或环境存储区。所有主要的CI服务提供商都具有此功能,我希望大多数主要的托管站点也能做到这一点。我知道Heroku知道。可以将SSH密钥( 必须是文件)之类的内容从环境写入磁盘,理想情况下是将其写入要清理的临时目录。

如果要部署到自己的基础结构,通常将为此目的使用一些加密的秘密存储。保险柜很普通。

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

如果您拥有无法存储在秘密存储中的大量凭证,则可以encrypt them and store the passphrase in the secret store