Hace poco, un desarrollador intentó accidentalmente restaurar una base de datos a producción, cuando debería haber estado restaurando una copia provisional. Es fácil de hacer, dado que los nombres de db son similares, es decir, CustomerName_Staging versus CustomerName_Production.
Idealmente, los tendría en cajas completamente separadas, pero eso es un costo prohibitivo y, estrictamente hablando, no evita que ocurra lo mismo si el usuario se conecta a la caja incorrecta.
Este no es un problema de seguridad, per se: era el usuario correcto que trabajaba con la base de datos provisional, y si hay trabajo por hacer en la base de datos de producción, también sería él. Me encantaría tener un oficial de despliegue para separar esas preocupaciones, pero el equipo no es lo suficientemente grande para eso.
Me encantaría escuchar algunos consejos en términos de práctica, configuración y controles sobre cómo prevenir esto.
fuente
Respuestas:
Si esto es algo que te ves haciendo a menudo, automatízalo. Y dado que ambos son desarrolladores, escribir algo de código debería estar en su timonera. :) En serio ... al automatizarlo, puedes hacer cosas como:
Etcétera. Solo estás limitado por tu imaginación.
fuente
No estoy de acuerdo con el supuesto de la pregunta —esto es seguridad— pero tampoco estoy de acuerdo con que la automatización va a salvar el día por sí sola. Comenzaré con el problema:
¡No deberías poder hacer nada accidentalmente en producción!
Eso incluye hacer cosas automatizadas accidentalmente.
Estás confundiendo la seguridad del sistema con conceptos como "quién tiene permitido hacer qué". Sus cuentas de desarrollo solo deberían poder escribir en sus copias, el servidor de control de versiones y la base de datos de desarrollo. Si pueden leer / escribir la producción, pueden ser pirateados y explotados para robar datos de clientes o (como ha demostrado) pueden ser mal manejados para perder datos de clientes.
Debe comenzar ordenando su flujo de trabajo.
Sus cuentas de desarrollador deberían poder escribir en sus propias copias, control de versiones y quizás pasar del control de versiones a un entorno de prueba.
Los usuarios de respaldo solo deben poder leer de producción y escribir en su almacén de respaldo (que debe estar adecuadamente protegido).
Hacer cualquier otra lectura / escritura en producción debe requerir una autenticación especial e inconveniente . No debería poder entrar u olvidar que ha iniciado sesión. El control de acceso físico es útil aquí. Tarjetas inteligentes, interruptores para "armar" la cuenta, acceso simultáneo con doble llave.
Acceder a la producción no debería ser algo que deba hacer todos los días. La mayor parte del trabajo debe realizarse en su plataforma de prueba y en implementaciones fuera de horario realizadas en producción después de un cuidadoso escrutinio. Un pequeño inconveniente no te matará.
La automatización es parte de la solución.
No estoy ciego al hecho de que el cambio completo (carga en VCS, verificación de cobertura, extracción para probar el servidor, ejecución de pruebas automatizadas, autenticación, creación de una copia de seguridad, extracción desde VCS) es un proceso largo.
Ahí es donde la automatización puede ayudar, según la respuesta de Ben. Hay muchos lenguajes de script diferentes que hacen que ejecutar ciertas tareas sea mucho, mucho más fácil. Solo asegúrate de no hacer que sea demasiado fácil hacer cosas estúpidas. Sus pasos de reautenticación aún deben ser pronunciados (y si son peligrosos) deben ser inconvenientes y difíciles de hacer sin pensar.
Pero solo , la automatización es peor que inútil. Simplemente te ayudará a cometer errores más grandes con menos pensamiento.
Apto para equipos de todos los tamaños.
Me di cuenta de que señalabas el tamaño de tu equipo. Soy un chico y me puse a prueba porque solo se necesita una persona para tener un accidente. Hay una sobrecarga pero vale la pena. Usted termina con un entorno de desarrollo y producción mucho más seguro y mucho más seguro.
fuente
Uno de mis compañeros de trabajo tiene un enfoque interesante para esto. Su esquema de color terminal para la producción es fugoso . Gris y rosa y difícil de leer, lo que teóricamente se supone que garantiza que, sea lo que sea que escriba, realmente tenía la intención de escribir.
Su kilometraje puede variar ... y probablemente no tenga que decir que no es a prueba de balas por sí solo. :)
fuente
Los desarrolladores no deben conocer la contraseña de la base de datos de producción. La contraseña del producto debe ser aleatoria y no memorable, algo así como el resultado de la combinación de teclado (
Z^kC83N*(#$Hx
). Su contraseña dev puede ser$YourDog'sName
ocorrect horse battery staple
lo que sea.Claro, puede averiguar cuál es la contraseña, especialmente si es un equipo pequeño, mirando el archivo de configuración de la aplicación cliente. Ese es el único lugar donde debería existir la contraseña prod. Eso asegura que tendría que hacer un esfuerzo deliberado para obtener la contraseña prod.
(Como siempre, debe tener copias de seguridad puntuales para su base de datos de producción. Por ejemplo, con MySQL, archive los registros binarios como copias de seguridad incrementales. Para PostgreSQL, archive los registros de escritura anticipada. Esa es su protección de último recurso para cualquier tipo de desastre, autoinfligido o no).
fuente
La respuesta corta es RBAC: control de acceso basado en roles.
Sus permisos para todos los entornos deben ser diferentes, y tan molestos como lo son cosas como UAC, los necesita: especialmente para entornos PROD.
No es nunca una razón para que los desarrolladores tengan acceso directo a Prod - por pequeña que sea la organización / equipo. Su "Dev" también puede usar los sombreros "Stage" y "Prod", pero necesita tener diferentes credenciales y procesos para atacar diferentes entornos.
¿Es molesto? Absolutamente. ¿Pero [ayuda] a prevenir el borking en sus entornos? Absolutamente.
fuente
Una solución rápida y simple: use dos cuentas de usuario diferentes, una para su trabajo de desarrollo normal que solo tiene acceso a la base de datos de desarrollo y otra diferente para operar realmente en la base de datos de producción, con acceso completo a ella. De esta manera, tendrá que cambiar activamente la cuenta que está utilizando antes de poder realizar cambios en la producción, lo que debería ser suficiente para evitar errores accidentales.
Se puede utilizar el mismo enfoque si tiene dos sitios web, o dos servidores, o dos entornos completos: una cuenta de usuario para el desarrollo sin acceso (o al menos sin acceso de escritura ) a producción, otra cuenta de usuario para trabajar en el sistema de producción ( s)
Este es el mismo enfoque que un administrador de sistemas que tiene una cuenta estándar que no es de administrador para el trabajo de rutina (lectura de correo electrónico, navegación web, seguimiento de tickets, presentación de hojas de tiempo, documentación de escritura, etc.) y una cuenta distinta de administrador completo que se utilizará cuando realmente opere en servidores y / o Active Directory.
fuente