Almacenamiento de las credenciales de la base de datos para varios servidores, entornos de múltiples db

3

¿Cuál es la mejor práctica para almacenar las credenciales de la base de datos para un entorno de escalado automático, pero también requiere la capacidad de actualizar la información de la base de datos?

Por ejemplo, tengo un sitio de escalado automático en AWS. En la actualidad solo hay una base de datos, pero en algún momento se agregarán nuevas instancias de bases de datos (ya sea para fragmentación de datos o readonlys)

Estoy tratando de descubrir la mejor manera de almacenar las credenciales de la base de datos de una manera que también las pueda actualizar fácilmente. Aunque he mencionado AWS aquí, idealmente, me gustaría algo que sea agnóstico de plataforma si es posible.

Evidentemente, es incorrecto almacenar las credenciales de la base de datos en el control de origen, por lo que mis ideas iniciales son las siguientes (pero incluso esto parece incorrecto)

Utilice el mismo nombre de usuario y contraseña en todos los servidores de bases de datos (podría haber diferentes usuarios dependiendo de si se trata de una base de datos de escritura o de solo lectura, pero todos los usuarios estarán en los servidores que los necesitan). Luego, de alguna manera, guárdelos de forma segura en una imagen de servidor web. Aunque también he leído algunas publicaciones argumentando que las variables de entorno no deberían usarse, así que me pregunto cómo hacerlo.

Un archivo de configuración separado podría vivir en el control de origen que simplemente detalla las direcciones y los nombres de los servidores de bases de datos, aunque también creo que esto debería ser secreto. Entonces surge el problema de obtener fácilmente una lista actualizada de servidores de bases de datos para todos los servidores web.

El problema al que me estoy enfrentando es cómo actualizar x número de servidores con detalles de las bases de datos y de forma segura cuando tanto x como y pueden cambiar. y en teoría sería más estable que x si x fuera autoescalado. Pero al mismo tiempo, cuando cambie, tendrá un mayor impacto.

Lo más probable es que esté en una máquina con Linux (Ubuntu). No he enumerado un lenguaje de scripting específico, ya que sería bueno si hubiera soluciones que puedan usarse más ampliamente

Gracias

    
pregunta TommyBs 04.10.2017 - 11:42
fuente

1 respuesta

1

No es realmente una respuesta de práctica recomendada, pero su caso de uso se parece mucho al problema común que se aborda en gestión de la configuración . Aplicaciones de gestión de la configuración como Chef o Puppet le proporciona los medios para configurar y configurar de manera eficiente el software en sistemas agrupados.

Por lo general, configura un sistema maestro que instala y configura todos los demás sistemas, como servidores de aplicaciones e instancias de bases de datos. El maestro actualiza las configuraciones cada n minutos según reglas como:

  1. Cuando haya aumentado el número de servidores de aplicaciones, implemente un archivo de configuración que contenga todas las credenciales de las bases de datos y comience a ejecutarlo.
  2. Cuando el número de instancias de la base de datos disminuya, actualice todos los archivos de configuración de los servidores de aplicaciones y reinícielos uno por uno.
  3. Cuando el número de instancias de base de datos aumenta, obtenga las credenciales para las nuevas instancias del servicio en la nube, actualice todos los archivos de configuración de los servidores de aplicaciones y reinícielos uno por uno.

También podría considerar que la aplicación de administración de configuración aprovisione sus bases de datos. En este caso, puede llegar a tener contraseñas aleatorias generadas siempre que se requiera una nueva base de datos, los usuarios de la base de datos generen automáticamente y las credenciales se publiquen en todos los servidores de aplicaciones. Estrictamente hablando, ¡ningún ser humano tendría que ponerse en contacto con estas contraseñas de bases de datos nunca más!

Finalmente, indiquemos algunas consideraciones de seguridad:

  • Obviamente, el sistema maestro es un objetivo valioso, y debe asegurarse de manera razonable. P.ej. debe colocarse en una MZ (zona militarizada) con acceso a la red fuertemente regulado.
  • El tráfico entre el maestro y los otros sistemas generalmente se cifra para evitar la pérdida de credenciales y otra información confidencial.
respondido por el kremerd 04.10.2017 - 21:31
fuente

Lea otras preguntas en las etiquetas