2016-08-30 26 views
1

我有一个全局api密钥来验证对我的服务器api的请求。如何在Rails中存储全局api密钥

因此,API密钥必须存储在我的Rails应用程序或服务器上的某个地方。

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

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

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

下面是一个例子railscast用于演示存储使用.yml文件中的关键字:

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

+0

我知道这不是你问什么,但在生产中你可以设置你的API密钥的环境变量,以避免将您的文件生产。 – XavM

+0

你的意思是手动添加密钥到服务器上的env vars? – user3494179

回答

0

Capistrano的将推动你secrets.yml文件在生产中没有经过git

bundle exec cap production setup 
  • 另一种解决方案是把你的钥匙到环境变量:对于为例它真的很容易做到这一点的Heroku在CLI在Web界面(我用这个方法)

  • 一些会谈说也把你在一个单独的git仓库中有非常有限的访问权限。部署脚本从两个存储库部署

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

0

描述使用ENV瓦尔是最强大的,跨平台的,安全的方法来处理配置和秘密。

  • 没有意外将密码提交给源代码管理的风险。
  • 没有意外上传错误配置到生产的风险。
  • 更改配置可以在不重新部署应用程序的情况下完成。
  • 每个开发人员,服务器集群等都可以有自己的配置。

https://12factor.net/config

+0

根据所使用的基础架构,在生产环境中设置ENV变量的准确程度差异很大。 – max

+0

有权访问服务器的人可以以纯文本形式查看密钥?为什么这比将api密钥存储在数据库中更好? – user3494179

+0

有权访问服务器的攻击者完全拥有你。把键放在数据库中只会让你的应用程序变慢 – max