¿Existen formas no terribles de almacenar claves secretas para Google App Engine? ¿O, al menos, menos terrible que comprobarlos en el control de la fuente?GAE: ¿mejores prácticas para almacenar claves secretas?
Respuesta
No es exactamente una respuesta:
- Si se mantiene claves en el modelo, cualquiera que pueda desplegar puede leer las claves del modelo, y desplegar de nuevo para cubrir sus huellas. Si bien Google te permite descargar código (a menos que deshabilites esta función), creo que solo conserva la última copia de cada versión numerada.
- Si se mantiene llaves en un no-facturado archivo de configuración y descargas código de desactivación, a continuación, sólo las personas con las teclas pueden implementar con éxito, pero nadie puede leer las claves sin furtivamente una puerta trasera en el despliegue (potencialmente no es tan difícil) .
Al final del día, cualquiera que pueda desplegar puede llegar a las llaves, así que la pregunta es si usted piensa que el riesgo se reduce al mínimo mediante el almacenamiento de claves en el almacén de datos (que es posible hacer copias de seguridad de, por ejemplo,) o en las máquinas del implementador.
Una alternativa viable podría ser combinar los dos: Tienda cifrado claves de la API del almacén de datos y poner la llave maestra en un archivo de configuración. Esto tiene algunas características potencialmente bonito:
- atacantes necesitan tanto el acceso a una copia del almacén de datos y una copia del archivo de configuración (y, presumiblemente, los desarrolladores no hacen copias de seguridad del almacén de datos en un ordenador portátil y lo pierde en el tren).
- Al especificar dos claves en el archivo de configuración, puede hacerlo clave-vuelco (por lo que los atacantes necesitan un almacén de datos/config de la misma edad).
- Con criptografía asimétrica, puede hacer posible que los desarrolladores añadir una clave de API para el almacén de datos sin necesidad de leer los otros.
Por supuesto, a continuación, que va a subir cripto a los servidores de Google, que puede o no puede contar como "exportador" cripto con las cuestiones legales habituales (por ejemplo, ¿qué pasaría si Google pone en marcha un centro de datos de Asia y el Pacífico?) .
Las regulaciones de exportación de cifrado generalmente se refieren a exportar código criptográfico o algoritmos, no datos cifrados. .. – poolie
Asegúrate de ver la respuesta de Remko en esta página. –
No hay una solución fácil aquí. Comprobar las claves en el repositorio es malo, ya que verifica en detalles de configuración irrelevantes y porque potencialmente expone datos confidenciales. Por lo general, creo un modelo de configuración para esto, con exactamente una entidad, y establezco las opciones de configuración y las claves relevantes después de la primera implementación (o cada vez que cambian).
Alternativamente, se puede comprobar en un archivo de configuración de ejemplo, a continuación, excluirlo de control de versiones, y mantenga las teclas reales a nivel local. Sin embargo, esto requiere cierta forma de distribuir las claves, y hace que sea imposible para un desarrollador implementar a menos que tengan las claves de producción (y todo para implementar accidentalmente el archivo de configuración de muestra sobre el vivo).
tres maneras que se me ocurren:
- tienda en almacén de datos (puede ser de codificación base64 para tener un nivel más de indirección)
- pasarlo como variables de entorno a través params de línea de comandos durante el despliegue .
- Guarde un archivo de configuración, git-ignórelo y léalo del servidor. Aquí este archivo puede ser un archivo .py si está utilizando una implementación de python, por lo que no se puede leer el archivo & de archivos .json.
NOTA: Si usted está tomando la ruta conf-archivo, no te almacenar esta JSON en las carpetas públicas estáticas!
Mientras tanto, Google añadió un servicio de administración de claves: https://cloud.google.com/kms/
se podría utilizar para cifrar sus secretos antes de almacenarlos en una base de datos o almacenarlos en control de código fuente cifrado. Solo las personas con acceso de "descifrado" a KMS y a sus secretos podrían usarlos.
El hecho es que las personas que pueden implementar código siempre podrán acceder a sus secretos (suponiendo que su aplicación GAE necesita ser capaz de usar los secretos), pero no hay forma de evitar eso por lo que puedo pensar .
- 1. Mejores prácticas para almacenar claves secretas
- 2. Mejores prácticas para almacenar configuraciones
- 3. Mejores prácticas para claves privadas personales
- 4. Mejores prácticas para almacenar contraseñas de producción para grupos pequeños
- 5. ¿Mejores prácticas para almacenar un sitio web ASP.NET en Subversion?
- 6. Usando claves secretas api en travis-ci
- 7. ¿Mejores prácticas para API seguras?
- 8. Mejores prácticas para C#
- 9. ¿Mejores prácticas para generar tokens de OAuth?
- 10. GAE Almacenamiento de claves frente a StringID
- 11. Almacenamiento de claves secretas importantes en archivos php
- 12. Nombrar claves en las mejores prácticas de archivos de recursos
- 13. Mejores prácticas de CoreData
- 14. Mejores prácticas de LDAP
- 15. ¿Mejores prácticas para autoguardar borradores?
- 16. Mejores prácticas para Magento Deployment
- 17. Registro para ASP.NET - Mejores prácticas
- 18. Mejores prácticas para la depuración
- 19. Mejores prácticas para implementar Secure "Remember Me"
- 20. Mejores prácticas de Maven
- 21. Mejores prácticas de ActionListener
- 22. ¿Cómo se ocultan las claves secretas en el código?
- 23. ASP.Net MVC Cookies Mejores prácticas
- 24. Mejores prácticas de la lista de SharePoint
- 25. ¿Mejores prácticas para almacenar y usar marcos de datos demasiado grandes para la memoria?
- 26. Mejores prácticas de Javascript
- 27. DTO: mejores prácticas
- 28. Mejores prácticas de NAnt
- 29. Mejores prácticas de Sitecore
- 30. mejores prácticas de ctags
Relevante [Problema de Google App Engine] (https://code.google.com/p/googleappengine/issues/detail?id=8538) –