version-control - ventajas - sistemas de control de versiones mas usados
¿Cómo evitar el almacenamiento de contraseñas en el control de versiones? (6)
Coloque las contraseñas en las variables de entorno de usuario de o / s.
Solo ese usuario o raíz puede leer el valor, lo mismo que un archivo, pero sin posibilidad de que se controle en el control de fuente.
¿Qué estrategia usas para evitar almacenar contraseñas en el control de versiones?
Actualmente, tengo contraseñas de desarrollo / prueba / producción guardadas en tres archivos diferentes y el archivo apropiado se usa durante la implementación. Todo esto está comprometido con el control de versiones, pero no estoy muy contento con eso, ya que no todos los desarrolladores necesitan saber esas contraseñas (especialmente las externas, que solo tienen acceso mientras duran sus proyectos, lo que podría ser de solo un mes).
Almacenar contraseñas en la base de datos no es una gran opción:
- Necesito la mayoría de los datos durante la inicialización del contexto Spring (aplicación Java), y no quiero crear un andamiaje para conectarme a una única base de datos, y luego conectarme al resto de bases de datos e inicializar el resto de la aplicación
- algunas de las contraseñas solo están relacionadas con la implementación; contraseña para acceder a diferentes servidores, almacenes de claves, etc .; esas son las cosas que la aplicación no puede cargar después de que se inicia, ya que no lo carga en absoluto
Estoy pensando en trasladar la configuración de implementación de la máquina del desarrollador a la computadora dedicada que verifica el código del control de la versión y ejecuta la secuencia de comandos de compilación / implementación, pero no estoy seguro de cuál sería la mejor manera de hacerlo.
También necesito decir que no quiero la máxima seguridad: solo quiero evitar tener contraseñas en todos los discos de los desarrolladores y hacerlo demasiado fácil.
Por eso les pido sus experiencias / mejores prácticas. ¿Cómo lo haces?
Creo que es bueno tener un local_settings fuera del repositorio.
https://.com/a/21570849/1675586
En lugar de no almacenarlos, puede almacenarlos en forma encriptada. Así que no tiene el dolor de enviar archivos de credenciales a través de mensajería instantánea o correo electrónico todo el tiempo que comienza un nuevo desarrollador ... Solo necesita decirles la contraseña maestra específica del proyecto una vez para que puedan encriptar las credenciales.
Esto no funciona en todos los casos, pero aquí es donde entra en juego la autenticidad de usar NT AUTHORITY / NETWORK SERVICE como la identidad de sus servicios. Si utiliza esta identidad, no necesita mantener una contraseña para ello - solo puede usar las credenciales de AD de la computadora en forma de DOMINIO / MACHINENAME $ para hacer su red protegida y acceso a la base de datos.
Hay, por supuesto, algunas cosas clave a tener en cuenta, una de las más importantes es que no hay dos aplicaciones que comparten un límite de seguridad alojadas de esta manera en el mismo servidor.
He visto dos enfoques para esto:
- Mueva las contraseñas a otro árbol de control de origen al que los desarrolladores no tienen acceso.
- No coloque ninguna contraseña en el control de la fuente, y la persona dedicada al administrador de la compilación necesita escribir las contraseñas cada vez que se realiza una implementación. Esto fue en un banco donde había un tipo de tiempo completo trabajando en procesos de compilación / fusión / lanzamientos.
Las propiedades de configuración específicas del entorno tienden a poner, digamos, un archivo de propiedades que no está en control de fuente y no es parte del proceso de compilación. Al configurar un nuevo entorno, parte de esa configuración consiste en crear ese archivo de propiedades que incluye cosas como direcciones de bases de datos, credenciales y nombres, nombres de hosts remotos relevantes, etc.
En Spring utiliza el PropertyPlaceholderConfigurer
para cargar el archivo de propiedades. Simplemente debe ser encontrado por Spring, que generalmente solo significa colocarlo en un directorio apropiado debajo del servidor de aplicaciones.
De forma alternativa, puede usar el contenedor para ejecutar el servidor de aplicaciones y las opciones de inicio de JVM incluyen agregar estos archivos de propiedades al classpath para que Spring pueda encontrarlos.