2011-02-10 3 views
12

Я использую RoR, размещенный в Heroku, и я хотел бы хранить файлы на s3 с помощью paperclip. Мой исходный код размещен на github и доступен для чтения в мире. Какова наилучшая практика держать ключи в тайне от остального мира?
Скрепка предполагает, что ключи доступа хранятся в файле конфигурации (или в коде), так, например, у меня есть:Ruby on Rails, Paperclip, 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, я мог бы решить половину проблемы, но все же я не доволен секретными ключами, лежащими в файле конфигурации в коде. Я не знаю, есть ли для этого лучшая практика.

Какова наилучшая практика хранения ключей в тайне и при использовании вышеупомянутого списка библиотек и служб?

BTW, я только начал с ror и heroku на прошлой неделе, поэтому я могу считаться новичком, пожалуйста, будьте внимательны;) Спасибо!

ответ

21

Вам нужно использовать переменную ENV из вашего приложения heroku.

Если вы используете конфигурацию heroku, вы можете получить доступ ко всей своей переменной ENV. Вы просто добавляете и используете его прямо в своем приложении.

С помощью этого трюка вам не нужно обновлять свой код, чтобы изменить конфигурацию и конфигурацию, если она не определена в вашей базе кода.

В вашем s3.yml вам просто нужно сделать:

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

И добавить ENV ПЕРЕМЕННОЙ в приложении 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

-5

ошибка .. нет другой способ если вы используете heroku. Вы должны положить все в репо и нажать на них.

Reg github, если вы собираетесь использовать публичные репозитории - «частные», если вам нужны эти ключи, чтобы ваше приложение работало. Вы должны доверять своим членам команды, даже если вы предоставляете доступ к этому частному репозиторию github выбранным немногим людям.

Я не знаю других идей.

+1

Этот ответ следует просто удалить. – user664833

1

Не так давно Amazon выпустила официальный AWS SDK for Ruby. Он отлично работает с S3, поддерживает американские, европейские и японские экземпляры S3 из коробки и в хорошем состоянии.

Я создал модуль хранения для Paperclip под названием paperclip-aws для работы с AWS SDK.

Не стесняйтесь использовать его. Надеюсь, что это поможет.

Смежные вопросы