dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web

Pedro J. Molina
Pedro J. MolinaFounder at Metadev en Metadev
Gestión de la configuración
en aplicaciones web
Dr. Pedro J. Molina @pmolinam
Málaga, 2022.11.12
Dr. Pedro J. Molina
@pmolinam https://linkedin.com/in/pjmolina
Agenda
▪ Entornos
▪ Gestión de la configuración
▪ Tipos de configuración
▪ Segregación de responsabilidades
▪ Herramientas e inercia
▪ Inyección en tiempo de compilación vs
despliegue
Entornos
▪ LOCAL, DES, PRE, QA, PRO, etc.
▪ Independientes
▪ HW y dependencias físicas probablemente diferentes
Tipos de configuración
Mantenidaspor el desarrollador
Dependendelcódigo
Sefijanentiempodecompilación
▪ Versionesde librerías
▪ Configuración interna de aplicación
▪ Des/habilitación de características según su
madurez
▪ Configuración dependiente del HW
▪ URLs internas de aplicación
▪ Etc.
Mantenidaspor el operador
Dependendelentorno
Sefijanendespliegueocambianenoperación
▪ IPs, nombresDNS de servicios dependientes
▪ Usuarios, contraseñas
▪ Cadenas de conexión a BD
▪ Claves criptográficas
▪ Volúmenes y rutas a disco
▪ Cuotas: limitaciones de memoria, CPU, E/S y disco
▪ Habilitar/Deshabilitarcaracterísticas: A/B testing
Problema habitual
▪ Cuando aparecenmezcladas
▪ Mismo mecanismo
▪ Fichero o variable de entorno
Porque:
1. Fugan credenciales (inyectadas en compilación)
2. Exponen la complejidad de la conf. interna al operador, provocando errores de despliegue
(configuración incompleta, invalida o desfasada)
3. Un cambio de configuración externa → implica un redespliegue (cuando no debería) → más
lento
Gestión de la configuración
▪ Auditoria y control de los recursos de una organización
▪ Versionado
▪ Manifiesto 12 Factor Apps. https://12factor.net/es/
▪ Recomendación I. Basedecódigoúnicasobre laquegenerarNdespliegues
▪ Recomendación III. Guardarlaconfiguraciónenelentorno
▪ Recomendación V. SepararcompletamentelasetapasdeConstruir,distribuiryejecutar
Rec. I. Base de código única desde
donde construir versiones
▪ Versionado: SemVer para las publicaciones (release)
https://semver.org/lang/es/
<mayor>.<menor>.<parche>
LOCAL DES PRE PRO
Rec. III. Guardar la configuración en el entorno
▪ Entorno ➔ Fuera de la aplicación
▪ Variables de entorno (SO)
▪ Ficheros
▪ Servicios de configuración
Entorno
Aplicación
desplegada
CI
Rec. V. Separar construcción, distribución
y despliegue
▪ Construir: CI
▪ Distribución: repositorios de versiones
▪ Despliegue: Instalación en 1 entorno
Entorno E1
Aplicación
desplegada
CI
Segregación de Responsabilidades
▪ Principio de seguridad: SegregationofDuties
▪ Ejemplo: Elque emite recibe lafactura esdiferente alque paga.
▪ En IT, donde la seguridad es importante:
▪ El desarrollador no conoce las claves de producción (y no suele tener acceso de
admin, salvo para acciones puntuales).
▪ El operador/administrador no desarrolla (evita caballos de troya)
▪ Son personas diferentes, con permisos en la organización diferentes
Herramientas e Inercia
▪ Visual Studio permite diversos Web.config paraNentornos(selecciónen
tiempode compilación)
▪ Angular permite Nentornos (selecciónentiempodecompilación)
▪ Cómodo para de desarrollador, pero contraproducente para la
seguridad y despliegues bien gestionados
▪ Porqué:
1. La configuración acaba dentro del repositorio de código
2. Permite la fuga de credenciales, impidiendola segregación de
responsabilidades
3. Son ficheros que se combinanen tiempo de compilación (demasiadopronto)
4. El desarrollador no tiene porque saber nada del entorno final donde corre la
aplicación (entorno desconocido)
Tiempo de compilación
Soluciones
▪ Separar la configuracióninterna de la externa
▪ Inyectar la interna en tiempode compilación
▪ Inyectar la externa en tiempo dedespliegue u operación
▪ Permitir cambios en caliente si lo necesitamos: p.e. ajustes a
A/B Testing
▪ Aplicacionesweb SPA. Inversión decontrol.
▪ Hacer que el backend proporcione TODA la configuración
externa al SPA.
▪ SPA = JS, se puede depurar en el navegador. Toda su
configuración es potencialmente visible → no debe contener
ninguna credencial privada.
CI
Entorno E1
Alternativas: SPA
Mecanismo de configuraciónen tiempo de ejecución(inicialización)
▪ Angular:https://juristr.com/blog/2018/01/ng-app-runtime-config/
1. Embebidoen código ❌ No puedes cambiarlo
2. Fichero JSON en /assets ❌ Obliga a reescribir el fichero tras despliegue
3. Descargadodesde un servicio GET/spa-config
✅ Más flexible
GET /spa-config
Navegador envía cabeceras HTTP
GET https://api.acme.com:876/api/spa-config
origin: https://spa1.qa.acme.com:456/
remote-address: 67.45.34.213:456
accept-language: es-ES,es;q=0.9,en-US;q=0.8,en;q=0.7
Servidor evalúa y retorna
origin: ¿Autorizado para CORS? sí/no
La URL determina el entorno (QA)
remote-address: Geo-IP → Provincia, País → A/B Testing
Seguridad / Baneo de IPs
accept-language: Preferencia de idioma del cliente (i18n)
{
"env": "qa",
"audience": "https://id.qa.acme.com",
"clientId": "spa1-qa",
"user-lang": "es-ES",
"lang-resources": "https://cdn.acme.com/i18n/es-ES.json",
"branding": "https://cdn.acme.com/red-acme",
"feature-a": true,
"feature-b": false
}
Alternativas: Backend
1. Fichero (e.j. appsettings.json) ❌ Requiere reescritura
2. Persistido en base de datos ❌ Requiere cadena de conexión
3. Variables de entorno ✅ Flexible. Estándar en contenedores
4. Servicio de configuración ✅ Más Flexible. A/B Testing
ejemplo: Consul
Montaje completo
GET/spa-config
Entorno E1
API
Integración congit
¿Preguntas?
Código demo:
https://github.com/pjmolina/configuration-management-demo
Cenv:
https://github.com/metadevpro/cenv
¿Más Preguntas?
Seguimos después en:
Twitter: @pmolinam
Linkedin: https://linkedin.com/in/pjmolina
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
1 de 20

Más contenido relacionado

Similar a dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web

sesion03-traspa.pdfsesion03-traspa.pdf
sesion03-traspa.pdfOdalisLinares
3 vistas39 diapositivas

Similar a dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web(20)

Más de Pedro J. Molina

TerraformTerraform
TerraformPedro J. Molina
5 vistas1 diapositiva
Are Startups for me?Are Startups for me?
Are Startups for me?Pedro J. Molina
465 vistas18 diapositivas
Meow DemoMeow Demo
Meow DemoPedro J. Molina
228 vistas5 diapositivas

Más de Pedro J. Molina(20)

TerraformTerraform
Terraform
Pedro J. Molina5 vistas
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with Terraform
Pedro J. Molina51 vistas
Are Startups for me?Are Startups for me?
Are Startups for me?
Pedro J. Molina465 vistas
Meow DemoMeow Demo
Meow Demo
Pedro J. Molina228 vistas
Essential as the base for Web DSLsEssential as the base for Web DSLs
Essential as the base for Web DSLs
Pedro J. Molina300 vistas
Esencia de Web ComponentsEsencia de Web Components
Esencia de Web Components
Pedro J. Molina313 vistas
Esencia de web componentsEsencia de web components
Esencia de web components
Pedro J. Molina323 vistas
OpenAPI 3.0.2OpenAPI 3.0.2
OpenAPI 3.0.2
Pedro J. Molina1.3K vistas
QuidQuid
Quid
Pedro J. Molina430 vistas
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDE
Pedro J. Molina237 vistas
Building APIs with the OpenApi SpecBuilding APIs with the OpenApi Spec
Building APIs with the OpenApi Spec
Pedro J. Molina1K vistas
Micro vs Nano (servicios)Micro vs Nano (servicios)
Micro vs Nano (servicios)
Pedro J. Molina2K vistas
Diseño de APIs con OpenAPIDiseño de APIs con OpenAPI
Diseño de APIs con OpenAPI
Pedro J. Molina2.3K vistas
SVQDC 2017 Tecnologías para MicroserviciosSVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para Microservicios
Pedro J. Molina1.1K vistas
Introducción a AngularIntroducción a Angular
Introducción a Angular
Pedro J. Molina3.2K vistas
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
Pedro J. Molina3.6K vistas
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
Pedro J. Molina1.7K vistas
Hivepod: Casos de uso en OpenDataHivepod: Casos de uso en OpenData
Hivepod: Casos de uso en OpenData
Pedro J. Molina797 vistas

Último(7)

Plone 6 ThemesPlone 6 Themes
Plone 6 Themes
Leonardo J. Caballero G.7 vistas
Operations & Data GraphOperations & Data Graph
Operations & Data Graph
Neo4j17 vistas
Virtual BoxVirtual Box
Virtual Box
anayandun20236 vistas

dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web

  • 1. Gestión de la configuración en aplicaciones web Dr. Pedro J. Molina @pmolinam Málaga, 2022.11.12
  • 2. Dr. Pedro J. Molina @pmolinam https://linkedin.com/in/pjmolina
  • 3. Agenda ▪ Entornos ▪ Gestión de la configuración ▪ Tipos de configuración ▪ Segregación de responsabilidades ▪ Herramientas e inercia ▪ Inyección en tiempo de compilación vs despliegue
  • 4. Entornos ▪ LOCAL, DES, PRE, QA, PRO, etc. ▪ Independientes ▪ HW y dependencias físicas probablemente diferentes
  • 5. Tipos de configuración Mantenidaspor el desarrollador Dependendelcódigo Sefijanentiempodecompilación ▪ Versionesde librerías ▪ Configuración interna de aplicación ▪ Des/habilitación de características según su madurez ▪ Configuración dependiente del HW ▪ URLs internas de aplicación ▪ Etc. Mantenidaspor el operador Dependendelentorno Sefijanendespliegueocambianenoperación ▪ IPs, nombresDNS de servicios dependientes ▪ Usuarios, contraseñas ▪ Cadenas de conexión a BD ▪ Claves criptográficas ▪ Volúmenes y rutas a disco ▪ Cuotas: limitaciones de memoria, CPU, E/S y disco ▪ Habilitar/Deshabilitarcaracterísticas: A/B testing
  • 6. Problema habitual ▪ Cuando aparecenmezcladas ▪ Mismo mecanismo ▪ Fichero o variable de entorno Porque: 1. Fugan credenciales (inyectadas en compilación) 2. Exponen la complejidad de la conf. interna al operador, provocando errores de despliegue (configuración incompleta, invalida o desfasada) 3. Un cambio de configuración externa → implica un redespliegue (cuando no debería) → más lento
  • 7. Gestión de la configuración ▪ Auditoria y control de los recursos de una organización ▪ Versionado ▪ Manifiesto 12 Factor Apps. https://12factor.net/es/ ▪ Recomendación I. Basedecódigoúnicasobre laquegenerarNdespliegues ▪ Recomendación III. Guardarlaconfiguraciónenelentorno ▪ Recomendación V. SepararcompletamentelasetapasdeConstruir,distribuiryejecutar
  • 8. Rec. I. Base de código única desde donde construir versiones ▪ Versionado: SemVer para las publicaciones (release) https://semver.org/lang/es/ <mayor>.<menor>.<parche> LOCAL DES PRE PRO
  • 9. Rec. III. Guardar la configuración en el entorno ▪ Entorno ➔ Fuera de la aplicación ▪ Variables de entorno (SO) ▪ Ficheros ▪ Servicios de configuración Entorno Aplicación desplegada CI
  • 10. Rec. V. Separar construcción, distribución y despliegue ▪ Construir: CI ▪ Distribución: repositorios de versiones ▪ Despliegue: Instalación en 1 entorno Entorno E1 Aplicación desplegada CI
  • 11. Segregación de Responsabilidades ▪ Principio de seguridad: SegregationofDuties ▪ Ejemplo: Elque emite recibe lafactura esdiferente alque paga. ▪ En IT, donde la seguridad es importante: ▪ El desarrollador no conoce las claves de producción (y no suele tener acceso de admin, salvo para acciones puntuales). ▪ El operador/administrador no desarrolla (evita caballos de troya) ▪ Son personas diferentes, con permisos en la organización diferentes
  • 12. Herramientas e Inercia ▪ Visual Studio permite diversos Web.config paraNentornos(selecciónen tiempode compilación) ▪ Angular permite Nentornos (selecciónentiempodecompilación) ▪ Cómodo para de desarrollador, pero contraproducente para la seguridad y despliegues bien gestionados ▪ Porqué: 1. La configuración acaba dentro del repositorio de código 2. Permite la fuga de credenciales, impidiendola segregación de responsabilidades 3. Son ficheros que se combinanen tiempo de compilación (demasiadopronto) 4. El desarrollador no tiene porque saber nada del entorno final donde corre la aplicación (entorno desconocido) Tiempo de compilación
  • 13. Soluciones ▪ Separar la configuracióninterna de la externa ▪ Inyectar la interna en tiempode compilación ▪ Inyectar la externa en tiempo dedespliegue u operación ▪ Permitir cambios en caliente si lo necesitamos: p.e. ajustes a A/B Testing ▪ Aplicacionesweb SPA. Inversión decontrol. ▪ Hacer que el backend proporcione TODA la configuración externa al SPA. ▪ SPA = JS, se puede depurar en el navegador. Toda su configuración es potencialmente visible → no debe contener ninguna credencial privada. CI Entorno E1
  • 14. Alternativas: SPA Mecanismo de configuraciónen tiempo de ejecución(inicialización) ▪ Angular:https://juristr.com/blog/2018/01/ng-app-runtime-config/ 1. Embebidoen código ❌ No puedes cambiarlo 2. Fichero JSON en /assets ❌ Obliga a reescribir el fichero tras despliegue 3. Descargadodesde un servicio GET/spa-config ✅ Más flexible
  • 15. GET /spa-config Navegador envía cabeceras HTTP GET https://api.acme.com:876/api/spa-config origin: https://spa1.qa.acme.com:456/ remote-address: 67.45.34.213:456 accept-language: es-ES,es;q=0.9,en-US;q=0.8,en;q=0.7 Servidor evalúa y retorna origin: ¿Autorizado para CORS? sí/no La URL determina el entorno (QA) remote-address: Geo-IP → Provincia, País → A/B Testing Seguridad / Baneo de IPs accept-language: Preferencia de idioma del cliente (i18n) { "env": "qa", "audience": "https://id.qa.acme.com", "clientId": "spa1-qa", "user-lang": "es-ES", "lang-resources": "https://cdn.acme.com/i18n/es-ES.json", "branding": "https://cdn.acme.com/red-acme", "feature-a": true, "feature-b": false }
  • 16. Alternativas: Backend 1. Fichero (e.j. appsettings.json) ❌ Requiere reescritura 2. Persistido en base de datos ❌ Requiere cadena de conexión 3. Variables de entorno ✅ Flexible. Estándar en contenedores 4. Servicio de configuración ✅ Más Flexible. A/B Testing ejemplo: Consul
  • 19. ¿Más Preguntas? Seguimos después en: Twitter: @pmolinam Linkedin: https://linkedin.com/in/pjmolina