2011-02-10 69 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。

隨意使用它。我希望這會有所幫助。

相關問題