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.