¿Cómo almacenar las credenciales requeridas por una aplicación?


13

Todos dicen que almacenar credenciales en el control de versiones (git) es algo malo. Por lo tanto, debe haber otras formas de almacenar credenciales que son mucho mejores.

Una aplicación debe recibir credenciales de algún lugar para usar los servicios de los que depende. Estas credenciales generalmente se almacenan en archivos de configuración. Ingresar manualmente cada servidor para crear ese archivo está fuera de discusión, ya que los servidores van y vienen sin intervención humana.

¿Cómo administrar las credenciales de una aplicación?


44
Además, esto probablemente sea demasiado amplio para una sola respuesta que no sea del tamaño de un libro.
coderanger

1
@coderanger Al ver su presentación, su categorización de los diferentes tipos de secretos es excelente. Y puedo ver cómo crees que es un libro ... pero la pregunta anterior no pide una clasificación, solo una (s) solución (es) a un problema específico.
Evgeny

2
Si tiene una situación específica, edite la pregunta para incluir más detalles, como el tipo de secreto que se utiliza (contraseña de la base de datos, claves TLS, etc.).
coderanger

1
Esto es muy amplio. Hay al menos 14 herramientas disponibles para hacer esto, sin incluir secuencias de comandos personalizadas o plantillas: gist.github.com/maxvt/bb49a6c7243163b8120625fc8ae3f3cd Se requieren detalles adicionales (como se requiere una CLI, es para una solución nativa de la nube o para grandes aplicaciones monolíticas, etc.)
Alexandre

1
@Alexandre Hah, abrí eso y pensé "sí, una buena lista de compilación" y luego me veo citado al final :)
coderanger

Respuestas:


5

La gestión adecuada de los secretos de una aplicación siempre ha sido un desafío. Nuevos desafíos llegaron con la adopción de la nube. Hay una gran presentación de OWASP sobre la realidad y los desafíos de almacenar secretos en la nube.

Es posible que se sorprenda al saber que almacenar secretos en el código fuente es una de las soluciones (o "arquitectura") presentadas. Eso es porque, en este momento, no hay una arquitectura perfecta o una forma de hacerlo. Al final, sus secretos podrían estar encriptados ... pero ¿qué es lo que guarda la clave de encriptación? "Tortugas hasta el fondo", dijeron.

Cada tipo de gestión secreta tiene sus fortalezas y debilidades y la presentación ya cubre eso. En cambio, trataré de repasar algunas de las características que podría estar buscando en una solución de administración secreta (credencial):

  • Control de acceso: ¿puede dar acceso de escritura a los administradores y acceso de lectura a las aplicaciones? ¿Puede limitar qué aplicaciones pueden leer (la aplicación A tiene acceso solo a esos secretos)?
  • Registros de auditoría: necesarios para muchos informes de cumplimiento y una buena forma de determinar si algo está mal
  • Almacenamiento seguro de los secretos: ¿cómo almacena la solución los secretos? DB cifrado? FS cifrado? ¿Quién / qué posee la clave de cifrado, si la hay? ¿Cómo se usa esta clave, una vez al inicio y luego descartada de forma segura?
  • Rotación o renovación de claves / contraseñas: si se compromete un secreto, ¿puede revocarlo y enviar un secreto actualizado a las aplicaciones? ¿Pueden / deben las aplicaciones agrupar el servicio de gestión secreta?
  • Compatibilidad: algunas de estas soluciones ofrecen una estrecha integración con ciertos lenguajes o marcos. Algunos ofrecen API REST. ¿Estás interesado en esto?

Al observar estos elementos, cómo son importantes para usted y cómo son implementados por la solución, podrá elegir uno de los servicios de administración secreta que existen .


3

Para un entorno puramente basado en EC2, la solución más fácil es usar roles de AWS IAM y políticas de bucket de S3. Algunas formulaciones de este patrón también incluyen KMS para cifrado y DynamoDB en lugar de S3 para almacenamiento, pero tampoco he encontrado una razón muy convincente para usar. Visite https://github.com/poise/citadel , está dirigido específicamente a los usuarios de Chef, pero el patrón subyacente funciona para cualquier cosa, es posible que deba crear su propio ayudante para realizar la descarga real desde S3.


1
Para el futuro, esto responde a una versión anterior y más específica de la pregunta.
coderanger

2
AWS ahora ofrece un servicio dedicado para el almacenamiento de valores clave, incluido el cifrado a través de KMS: aws.amazon.com/ec2/systems-manager/parameter-store .
bnzmnzhnz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.