2011-02-10 90 views
12

我使用由Heroku托管的RoR,并且我想使用回形针在s3上存储文件。我的源代码托管在github上,并且是世界可读的。将密钥与世界其他地方保密的最佳做法是什么?
回形针表明访问密钥被存储在配置文件(或代码),因此,例如,我有:Ruby on Rails,回形针,Heroku,GitHub和AWS - 安全密钥

文件:配置/ s3.yml

access_key_id: my_access_key_id 
secret_access_key: my_very_secret_key 
bucket: bucket_name 

Heroku的工作原理是提交代码到本地git,然后推送到Heroku。 由于我也使用github,我也将相同的代码推送到github。这意味着我也在那里推秘密钥匙。
我目前正在使用一个世界可读的github帐户,所以如果我付了github,我可以让一半的问题消失,但仍然不满意密钥躺在代码中的配置文件中。我不知道是否有更好的做法。

将密钥保密并仍然使用上述库和服务列表的最佳做法是什么?

顺便说一句,我只上周开始与ror和heroku,所以我可能被认为是一个新人,请体贴;)谢谢!

回答

21

您需要在您的heroku应用程序中使用ENV变量。

如果你做一个heroku配置,你可以访问所有的ENV变量。您只需添加一些并直接在您的应用程序中使用它。

有了这个技巧,你不需要更新你的代码来改变你的配置和配置,如果没有在你的代码库中定义。

在你s3.yml你只需要做到:

access_key_id: <%= ENV['S3_ACCESS_KEY'] %> 
secret_access_key: <%= ENV['S3_SECRET_KEY'] %> 
bucket: <%= ENV['S3_BUCKET_NAME'] %> 

而在你的Heroku应用

heroku config:add S3_ACCESS_KEY='your_key' 
heroku config:add S3_SECRET_KEY='your_secret' 
heroku config:add S3_BUCKET_NAME='your_nucket_name' 
+0

有关信息,config:add已被替换为config:set。 – thomasb 2013-09-01 15:55:36

-5

err ..如果您使用的是heroku,没有其他方法。你必须把所有东西都放入回购站并推送给他们。

注册github,如果你打算使用公共回购 - “私人”他们,如果你需要这些密钥,使您的应用程序工作。即使您授予访问某个选定的少数人的私人github回购,您也必须信任您的团队成员。

我不知道有任何其他想法。

+1

这个答案应该被删除。 – user664833 2012-03-25 21:07:09

1

前不久亚马逊公布的官方AWS SDK for Ruby添加这个环境变量。它在S3上运行得非常好,从盒子中支持美国,欧洲和日本的S3实例,并且维护良好。

我已经为Paperclip创建了一个名为paperclip-aws的存储模块,以使用AWS SDK。

随意使用它。我希望这会有所帮助。