在 GitHub 等公共(public)存储库中 stash 凭据(例如 API key 或数据库凭据)的最佳做法是什么?我的首选解决方案是拥有一个存储凭据的配置文件,然后添加一个 gitignore 文件以在推送期间不包含该配置文件。
需要注意的是,每次推送都会使用此存储库进行部署,例如Netlify 或 Heroku。所以 Netlify/Heroku 网站从 repo 推送中在线。在这种情况下,如果有 API 调用或数据库请求,则凭证需要位于公共(public)存储库中,因为这是“生产文件夹”。
我听说过 Travis CI,它可以在 GitHub 推送后构建,但我没有深入研究它。从公共(public)存储库部署时,其他项目如何使用其凭据?
最佳答案
通常,人们将 secret 传递给他们的代码的方式是通过环境,这被认为是最佳实践。原因如下:
- 环境中的 secret 永远不会写入磁盘,因此意外发现或泄露的风险要小得多。
- 环境中的 secret 仅对具有相同用户 ID 的其他进程可见,这在部署到硬件时很有用。
如果您的凭据足够小,您可以使用您正在使用的任何提供商的 secret 存储或环境存储。所有主要的 CI 提供商都有这个,我希望大多数主要的托管站点也有;我知道 Heroku 有。诸如 必须 为文件的 SSH key 之类的东西可以从环境写入磁盘,最好是写入清理过的临时目录。
如果您要部署到自己的基础架构,通常您会为此目的使用一些加密的 secret 存储。保险柜是一种常见的。
如果您需要用于开发的凭据,您可以构建您的代码,以便在没有设置变量的情况下有一个安全的默认值(如硬编码短语 secret
)供开发使用,或者您可以在开发和测试代码中提供一组回退。一些项目也使用 .env
文件,尽管这需要一些人不想安装的额外代码。
如果您有无法存储在 secret 存储中的大量凭据,您可以 encrypt them and store the passphrase in the secret store .
关于git - 在用于实时部署的公共(public)仓库中 stash 凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64519443/