2011-02-10 11 views
12

Estoy usando RoR alojado por Heroku y me gustaría almacenar archivos en s3 con clip. Mi código fuente está alojado en github y es legible en todo el mundo. ¿Cuál es la mejor práctica para mantener las claves en secreto del resto del mundo?
Paperclip sugiere que las claves de acceso se almacenan en un archivo de configuración (o en el código), así por ejemplo que tengo:Ruby on Rails, Paperclip, Heroku, GitHub y AWS - claves de seguridad

archivo: config/s3.yml

access_key_id: my_access_key_id 
secret_access_key: my_very_secret_key 
bucket: bucket_name 

Heroku trabaja por la comisión de código para git local y luego empujándolo a Heroku. Como también estoy usando github, también presiono el mismo código para github. Eso significa que presiono las claves secretas allí también.
Actualmente estoy usando una cuenta github legible en todo el mundo, así que si pagué github podría hacer desaparecer la mitad del problema, pero aún así no estoy contento con las claves secretas que se encuentran en un archivo de configuración en el código. Sin embargo, no sé si hay una mejor práctica para esto.

¿Cuál es la mejor práctica para mantener las claves secretas y seguir usando la lista de bibliotecas y servicios antes mencionada?

Por cierto, solo he empezado con ror y heroku la semana pasada, así que puedo ser considerado un newbe, por favor, sean considerados;) ¡Gracias!

Respuesta

21

Necesita utilizar la variable ENV de su aplicación heroku.

Si hace una configuración de heroku puede tener acceso a toda su variable ENV. Simplemente agrega un poco y úsalo directamente en tu aplicación.

Con este truco no necesita actualizar su código para cambiar su configuración y la configuración si no se define en su base de código.

En su s3.yml sólo necesitas hacer:

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

y añadir a variable de entorno en su aplicación 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

Para más información, 'config: add' ha sido reemplazado por' config: set'. – thomasb

-5

err .. no hay otra manera si está utilizando heroku. Tienes que poner todo en un repositorio y empujarlo hacia ellos.

Reg github, si va a utilizar repositorios públicos, "privados" si necesita esas claves para hacer que su aplicación funcione. Debes confiar en los miembros de tu equipo incluso si le das acceso a ese repositorio privado de github a unas pocas personas seleccionadas.

No tengo conocimiento de ninguna otra idea.

+1

Esta respuesta solo debe eliminarse. – user664833

1

No hace mucho Amazon lanzó oficial AWS SDK for Ruby. Funciona bastante bien con S3, admite instancias de S3 estadounidenses, europeas y japonesas desde la caja y está bien mantenido.

He creado un módulo de almacenamiento para Paperclip llamado paperclip-aws para que funcione con AWS SDK.

Siéntase libre de usarlo. Espero que ayude