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