Ruby on Rails,Paperclip,Heroku,GitHub和AWS – 保护密钥

我正在使用Heroku托管的RoR,我想使用paperclip在s3上存储文件。 我的源代码托管在github上,并且具有全局可读性。 将密钥与世界其他地方保密的最佳做法是什么?
Paperclip建议访问密钥存储在配置文件中(或代码中),例如我有:

file:config / 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所以我可能会被认为是newbe,请体谅;)谢谢!

您需要使用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应用程序中添加此ENV VARIABLE

 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' 

不久前,亚马逊发布了适用于Ruby的官方AWS SDK 。 它适用于S3,支持美国,欧洲和日本的S3实例,并且维护良好。

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

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

错误..如果你使用heroku,没有别的办法。 你必须把所有东西都放在一个仓库中并推送给他们。

Reg github,如果你打算使用公共回购 – 如果你需要这些密钥来使你的应用程序工作,那么“私有”它们。 即使您向选定的几个人提供对该私人github回购的访问权限,您也必须信任您的团队成员。

我不知道任何其他想法。