如何在开发和生产环境中存储凭据?

时间:2012-06-08 07:26:08

标签: ruby-on-rails ruby-on-rails-3 security

我在Best way to create custom config options for my Rails app?阅读了解决方案,这似乎很有希望。即在config/config.yml中存储开发和生产凭证。但后来我想。

如果我们有一组开发人员和实习生,他们将使用所有生产凭据公开此文件。共识是信任你的团队。但诚实的人为错误确实发生了:计算机停止/解锁,特洛伊木马,使用计算机的朋友等等。

我知道Heroku有一个名为config vars + foreman的东西。但是,对于像AWS这样的东西,它并不像创建新的访问密钥和将访问密钥委托给特定的存储桶那么简单。它不像那样工作。我能想到的唯一方法是创建一个仅用于开发目的的新AWS账户。如果我走这条路,我也必须为其他类似的第三方服务创建开发帐户。

还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

我使用SettingsLogic

我为此创建了两个模型:设置和私有设置。我将设置分开:密码,令牌,api密钥......在PrivateSettings中,其余设置在“设置”中。

对于设置:

class Settings < Settingslogic
  source "#{Rails.root}/config/settings.yml"
  namespace Rails.env
end

settings.yml文件存储在Git中。

对于PrivateSettings:

class PrivateSettings < Settingslogic
  source "#{Rails.root}/config/private_settings.yml"
  namespace Rails.env
end

我在Git中存储了一个private_settings-sample.yml文件,以保持示例同步。生产数据显然没有填充。一个dev克隆了repo,并将其重命名为private_settings.yml以便能够工作。

config/private_settings.yml也位于.gitignore,以避免错误包含。

为了刺激,我使用Capistrano中的特定任务创建指向存储在服务器中的正确private_settings.yml文件的符号链接(config旁边的current releases { {1}}和shared):

namespace :deploy do
  task :config_settings do
    run "cd #{current_path}/config && ln -sf #{shared_path}/../config/private_settings.yml private_settings.yml"
  end
end
after "deploy:update", "deploy:config_settings"

答案 1 :(得分:0)

我不确定您是否可以阻止开发人员知道密码。即使您已经完全分离了为您提供正确凭据/密钥的服务,开发人员也可以随时调试工作应用程序,添加记录密码等的代码,这些是您必须信任的人。我认为可能的唯一方法是让管理员在类路径上放置所需的密钥,并始终进行代码审查以防止在运行时读取凭据的所有尝试