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

Ran*_*Ran 12 ruby-on-rails github heroku amazon-s3 paperclip

我正在使用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
Run Code Online (Sandbox Code Playgroud)

Heroku通过将代码提交给本地git然后将其推送到Heroku来工作.因为我也在使用github,所以我也将相同的代码推送到github.这意味着我也在那里推出了密钥.
我目前正在使用世界上可读的github帐户,所以如果我支付github,我可以解决一半的问题,但我仍然不满意代码中配置文件中的密钥.我不知道是否有更好的做法.

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

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

shi*_*ara 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'] %>
Run Code Online (Sandbox Code Playgroud)

并在您的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'
Run Code Online (Sandbox Code Playgroud)