Ruby on Rails, Paperclip, Heroku, GitHub и AWS - защита ключей - PullRequest
12 голосов
/ 10 февраля 2011

Я использую RoR, размещенный на Heroku, и я хотел бы хранить файлы на s3, используя скрепку. Мой исходный код размещен на github и доступен для чтения всем. Как лучше хранить ключи в секрете от остального мира?
Скрепка предполагает, что ключи доступа хранятся в файле конфигурации (или в коде), поэтому, например, у меня есть:

файл: 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 на прошлой неделе, так что меня могут считать новичком, пожалуйста, будьте внимательны;) Спасибо!

Ответы [ 3 ]

21 голосов
/ 10 февраля 2011

Вам нужно использовать переменную 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'
1 голос
/ 12 августа 2011

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

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

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

0 голосов
/ 10 февраля 2011

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

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

Мне неизвестны другие идеи.

...