Ruby on Rails, Paperclip, Heroku, GitHub и AWS - ключи безопасности
Я использую RoR, размещенный в Heroku, и я хотел бы хранить файлы на s3 с помощью paperclip. Мой исходный код размещен на 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 на прошлой неделе, поэтому меня можно считать новым, пожалуйста, будьте внимательны;) Спасибо!
Ответы
Ответ 1
Вам нужно использовать переменную 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 VARIABLE в ваше приложение 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'
Ответ 2
Недавно Amazon выпустила официальный AWS SDK для Ruby. Он отлично работает с S3, поддерживает американские, европейские и японские экземпляры S3 из коробки и ухожен.
Я создал модуль хранения для Paperclip под названием paperclip-aws для работы с AWS SDK.
Не стесняйтесь использовать его. Я надеюсь, что это поможет.
Ответ 3
err.. нет другого способа, если вы используете герою. Вы должны положить все в репо и нажать на них.
Reg github, если вы собираетесь использовать публичные репозитории - "private", если вам нужны эти ключи, чтобы ваше приложение работало. Вы должны доверять своим членам команды, даже если вы предоставляете доступ к этому частному репозиторию github выбранным нескольким людям.
Я не знаю других идей.