【问题标题】:How to store global api keys in Rails如何在 Rails 中存储全局 api 密钥
【发布时间】:2016-08-30 14:15:20
【问题描述】:

我有一个全局 api 密钥,用于验证对我服务器 api 的请求。

所以 api 密钥必须存储在我的 rails 应用程序或服务器上的某个位置。

经过快速搜索,大多数人似乎建议将您的密钥存储在 .yml 文件中,然后将其加载到您的应用程序中。他们声称这是安全的,因为 .yml 文件未检查到 git/源代码控制。

显然你应该将.yml文件添加到.gitignore,否则会被添加git。

但是如果你这样做,那么如果 .yml 文件没有签入到 git 并且服务器上不存在,那么如何在部署后加载文件(capistrano)?

这是一个示例 railscast,它演示了将密钥存储在 .yml 文件中:

http://railscasts.com/episodes/85-yaml-configuration-file?autoplay=true

【问题讨论】:

  • 我知道这不是您所要求的,但在生产环境中,您可以将 api 密钥设置为环境变量,以避免将文件投入生产环境。
  • 您的意思是手动将密钥添加到服务器上的环境变量中?

标签: ruby-on-rails git api credentials api-key


【解决方案1】:

Capistrano 将直接在生产环境中推送您的 secrets.yml 文件,无需通过 git

bundle exec cap production setup
  • 另一种解决方案是将您的密钥放入环境变量中:例如,在 cli 中的 Heroku 上就像在 Web 界面中一样(我使用此方法)

  • 有些谈话还说要将您的密钥放在单独的 git 存储库中,访问权限确实受到限制。部署脚本从两个存储库部署

  • 您还可以在您的密钥文件和真正的密钥文件(在 app_folder/shared/key.yml 中)之间创建符号链接。如this post

  • 中所述

【讨论】:

    【解决方案2】:

    使用 ENV vars 是处理配置和机密的最强大、跨平台和安全的方法。

    • 不存在意外将机密提交到源代码控制的风险。
    • 不会有意外将错误的配置上传到生产环境的风险。
    • 无需重新部署应用程序即可更改配置。
    • 每个开发人员、服务器集群等都可以有自己的配置。

    https://12factor.net/config

    【讨论】:

    • 如何在您的生产环境中准确设置 ENV 变量取决于所使用的基础架构。
    • 有权访问您服务器的人可以看到纯文本的密钥吗?为什么这比将 api 密钥存储在数据库中更好?
    • 无论如何,一个可以访问您服务器的攻击者已经完全拥有了您。将密钥放在数据库中只会让您的应用变慢
    猜你喜欢
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    相关资源
    最近更新 更多