Almacenamiento de credenciales de clientes de un servidor de terceros con acceso de lectura al mismo

3

Nuestro servicio proporcionará cierta automatización sobre otro servicio. Los clientes comparten la contraseña con nosotros, y nuestro personal hace el trabajo del cliente. Otro trabajo se llevará a cabo en nuestros agentes de trabajo (servidor remoto).

Por lo tanto, necesitamos acceso a las contraseñas en dos lugares: muchos (10-15) PC remotos, lo que se conectó al grupo de trabajo de jenkins y el sitio web del personal.

Para el agente de trabajo podemos usar criptografía de clave pública. Cifre los datos en el frontend, descifre solo en un tiempo de trabajo de script. Funcionará muy bien.

Pero, ¿cómo proporcionar acceso de personal a los datos del personal? Compartir la clave privada es una mala idea.

Crear otro servidor que descifre la API es mejor, pero también malo.

Aquí hay límites:

  1. La persona del personal tiene un límite de descifrado por día (aproximadamente 20). Él no puede hacer más trabajo.
  2. Queremos cambiar la clave privada muy rápido, si el personal es despedido
  3. Es mejor cifrar los datos en un frente.
pregunta punksta 27.12.2016 - 15:28
fuente

1 respuesta

3

Estás intentando descubrir cómo almacenar de forma segura los valores secretos, y al mismo tiempo usarlos en tu aplicación, y la respuesta, en general, es usar algún tipo de sistema de gestión de secretos .

Realmente me gusta Turtles All The Way Down porque hace un buen trabajo explicando el problema central con la administración de secretos ( tengo que autenticarse en el sistema, y dónde almacena esa contraseña?), además de ofrecer una descripción general de las soluciones de software actuales más importantes. Es una charla un poco larga, pero vale la pena verla.

Personalmente, me gusta mucho Vault para manejar este tipo de situaciones. En pocas palabras, las contraseñas de los usuarios se almacenan en un almacén de datos cifrados; sus administradores de sistemas y su aplicación pueden acceder a esas contraseñas haciendo una llamada de API a Vault. Estas llamadas a la API se registran para fines de auditoría posteriores y se autentican a través de un sistema similar a una sesión, donde se proporciona una contraseña (por ejemplo; hay una serie de opciones de autenticación) y se recupera un token que se almacena para el uso normal, pero que caducará periódicamente y puede ser revocado explícitamente. Esto evita que un atacante que obtiene acceso al token obtenga acceso permanente, y hace lo mismo con los empleados cuando salen de la empresa. Esto es más o menos como otros sistemas de bóveda basados en red, como Keywhiz, también funcionan.

Hay una advertencia muy importante en la última parte del párrafo anterior: un atacante puede usar el token para acceder a las contraseñas almacenadas de todos los usuarios, y luego continuar usándolas, ya sea que el token robado expire o no. Este ataque se produce porque estás almacenando credenciales estáticas (contraseñas). Si, en cambio, tuvo que solicitar credenciales temporales de los sitios de terceros, podría devolver esos a sus usuarios internos, lo que evita que obtengan acceso permanente sin acceso permanente a Vault. Vault tiene soporte para varios sistemas para hacer esto , pero está limitado aquí a lo que el otro sitios de apoyo.

    
respondido por el Xiong Chiamiov 27.12.2016 - 18:19
fuente

Lea otras preguntas en las etiquetas