首页 > 解决方案 > 在用于实时部署的公共存储库中隐藏凭据

问题描述

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

需要注意的是,每次推送都使用这个 repo 进行部署,例如 Netlify 或 Heroku。所以一个 Netlify / Heroku 网站从 repo push 上线。在这种情况下,如果有 API 调用或数据库请求,则凭证需要在公共存储库中,因为这是“生产文件夹”。

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

标签: gitgithubherokunetlify

解决方案


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

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

如果您的凭据足够小,您可以使用您正在使用的任何提供者的秘密存储或环境存储。所有主要的 CI 提供商都有这个,我希望大多数主要的托管站点也有。我知道 Heroku 知道。诸如必须是文件的 SSH 密钥之类的东西可以从环境写入磁盘,理想情况下是写入一个已清理的临时目录。

如果您要部署到自己的基础架构,通常您将为此目的使用一些加密的秘密存储。Vault是一个常见的。

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

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


推荐阅读