He visto algunas preguntas aquí con inquietudes similares, pero sentí que esta pregunta específica no fue formulada o respondida, por lo que haré todo lo posible para ilustrar mi caso aquí.
El problema:
- La plataforma que estoy desarrollando consiste en un agregador y un normalizador de funciones de "API de terceros" como en: mis usuarios proporcionarán sus API KEYS y tendré que almacenarlas
- Los usuarios deben proporcionar varias CLAVES de API para API de terceros
- La aplicación necesita llamadas API en nombre del usuario, incluso cuando el usuario no ha iniciado sesión (durante las tareas en segundo plano)
- Al llamar a las API de terceros, necesitaré la forma de texto claro de esas claves y secretos
Mi infraestructura:
- Actualmente utilizo Heroku (para mi servidor http) que, en teoría, garantiza que nadie pueda acceder a mis máquinas a través de SSH u otros medios
- Mi pase garantiza que solo una cantidad seleccionada de usuarios (idealmente utilizando autenticación de 2 factores) tienen acceso al panel de control, por lo tanto a las variables ENV, por lo tanto a las credenciales de la base de datos
Mi plan actual:
- Almacene las TECLAS API en un servidor separado que emite su propio token para la autenticación futura
- Sólo acepte llamadas a la API de mis propios servidores http (usando algún tipo de VPN privado)
- Expone una API que solo da acceso a algunas funciones seleccionadas que mis otros servidores utilizaron, reduciendo así la superficie de ataque de mi sistema solo a esta máquina con un software mínimo instalado (una API mínima de http.js).
Mi recomendación de aprobación:
- Use heroku para ejecutar mi "administrador de claves servixe"
- Almacene las credenciales de la base de datos en las variables ENV y no le dé acceso a esta cuenta a nadie que no sea el "administrador de claves", que será la única persona capaz de iniciar sesión en el panel de control del pase y ver la dirección / credenciales de la base de datos
Preguntas:
- ¿Cuál es la forma más segura de almacenar y usar esas claves?
- ¿Hay alguna opción que sea más segura que simplemente almacenar las claves en una base de datos en la que la dirección / credenciales están protegidas por un tablero autenticado de dos factores?
Gracias