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

12
我正在使用Heroku托管的RoR,并希望使用paperclip将文件存储在s3上。我的源代码托管在github上并且是可读的。如何最好地保证密钥不被泄露给其他人?
Paperclip建议将访问密钥存储在配置文件(或代码中),例如:

文件: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账户,所以如果我付费了github,我可以解决一半的问题,但我仍然不满意将密钥放在代码的配置文件中。我不知道是否有更好的做法。

在使用上述库和服务的情况下,保持密钥的机密性的最佳实践是什么?

顺便说一句,我上周才开始使用ror和heroku,所以可能被认为是新手,请理解一下;)谢谢!

3个回答

21
你需要使用来自你的heroku应用程序的ENV变量。
如果你执行heroku config命令,你可以访问所有的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'

请注意,config:add 已被 config:set 替换。 - thomasb

1
不久前,亚马逊发布了官方的AWS SDK for Ruby。它与S3非常兼容,支持美国、欧洲和日本的S3实例,并且得到了良好的维护。
我已经为Paperclip创建了一个存储模块,称为paperclip-aws,可以与AWS SDK一起使用。
请随意使用它。我希望它能够帮助到您。

-5

如果你在使用Heroku,那么没有其他的方法。你必须把所有东西放在一个仓库里并将其推送给他们。

关于Github,如果你要使用公共仓库,那么如果需要这些密钥来使你的应用程序工作,就将它们“私有化”。即使你向一些特定的人授予了对这个私有Github仓库的访问权限,你也必须信任你的团队成员。

我不知道还有什么其他的想法。


1
这个回答应该被删除。 - user664833

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接