spinner

Filosofía DevSecOps en el desarrollo de aplicaciones sobre Azure

¿Cómo se consiguen las directivas de seguridad definidas una vez que desplegamos tanto la infraestructura como nuestras aplicaciones? Lo resumimos en un único concepto: DevSecOps

Uno de los pilares sobre los que se sustenta el desarrollo de aplicaciones sobre un entorno de cloud pública es la seguridad. Y como tal, esta debe ser tenida en cuenta durante todo el ciclo de vida de la aplicación: diseño, implementación, construcción, despliegue y uso. Este es el punto de partida de la cultura DevSecOps.

La metodología que nació inicialmente como DevOps, acercando y solapando los mundos del desarrollo y despliegue/operaciones de software, ha evolucionado a una filosofía DevSecOps, donde se hace énfasis en el apartado de la seguridad desde el inicio del desarrollo.

Cada una de las fases por las que transita la pieza de software añade al ciclo su ámbito de seguridad, bien sea en políticas, pruebas enfocadas a la seguridad, trazas de log, auditorías, monitorización o alarmado, lo que permite enriquecer las nuevas iteraciones e ir mejorando progresivamente nuestros desarrollos.

Si aterrizamos esta forma de trabajo en Azure, nos encontramos un conjunto de herramientas y servicios que nos ayudarán a adoptar esta metodología.

Azure DevOps como navaja suiza

Microsoft provee un producto de tipo todo-en-uno para gestionar por completo el ciclo de vida de las aplicaciones, y que además facilita la adopción de la metodología DevSecOps: Azure DevOps (anteriormente conocido como Visual Studio Team Foundation Server).

Está compuesto por:

Azure Repos: cuenta con un repositorio de proyectos y control de versiones (tipo Git) sobre el cual se pueden implementar diferentes técnicas de desarrollo, así como aplicar diferentes estrategias de revisión de código y aprobación de cambios. Estos repositorios se enlazan directamente con Azure Pipelines, la parte de Integración y Despliegue continuo (CI/CD), y además tiene un control de acceso y gestión de los cambios a nivel de grupos o usuarios a través del Directorio Activo (AAD) implementado mediante políticas.

Azure Pipelines: habilita la posibilidad de crear flujos de CI/CD sobre nuestra aplicaciones, esto es: construir, lanzar las pruebas para llegar a los acuerdos de calidad de los desarrollos, y desplegar en los entornos. Además, podemos hacer uso de validaciones de código estático con herramientas como Sonar o validar la construcción y seguridad de nuestros contenedores. El acceso a los pipelines está restringido por las políticas del Directorio Activo, y contamos con herramientas que nos van a facilitar la gestión de accesos a los recursos de Azure como son:

  • Services Connection: nos permiten acceder a recursos disponibles dentro de las suscripciones de Azure haciendo uso de un Service Principal (previamente configurado).
  • Library: variables que utilizaremos durante las construcciones y los despliegues, y que podemos enlazar con el almacén de secretos de Azure (Azure Key Vault).

Azure Artifacts: Azure DevOps provee esta funcionalidad en donde podremos alojar los artefactos que hayamos generado desde nuestros pipelines, securizar el acceso a los mismos (repositorios privados) e integrarlos en nuestros pipelines, tanto a la hora de crearlos como para consumirlos.

Azure Test Plans: permite crear una planificación de las pruebas sobre los desarrollos, así como definir acuerdos para la promoción de los artefactos sobre los que se realizan las pruebas y sus dependencias.

Azure Boards: herramienta de planificación donde se puede gestionar la trazabilidad de los proyectos, sus tareas, dependencias, así como la relación entre los diferentes repositorios, artefactos y pipelines involucrados en el ciclo de vida.

Con esta multiherramienta que es Azure DevOps, podemos adoptar la metodología DevSecOps minimizando esfuerzos y fricciones en las integraciones de los diferentes puntos del ciclo de vida de la aplicación hasta su fase de productivización y operación, donde pasaremos el testigo al diseño e implementación de los servicios utilizados dentro de Azure.

Despliegue y operación de las aplicaciones en Azure

Una vez que nos hemos centrado en el ciclo de vida del software, toca hacer lo propio con los servicios e infraestructura desplegada en Azure, y sobre la que van a ejecutar nuestras aplicaciones.

Partimos de la premisa de que esta infraestructura puede ser implementada como código (IaC) y que por tanto puede seguir y utilizar las mismas pautas y herramientas que hemos descrito anteriormente sobre el ciclo de vida de una aplicación: definición, pruebas y despliegue, siguiendo una vez más la filosofía DevSecOps.

Pero, ¿qué pasa una vez que tanto la infraestructura como nuestras aplicaciones están desplegadas? ¿Cómo alcanzamos las directivas de seguridad definidas? ¿Cómo aseguramos que se cumplen o que se ha producido un fallo?

En Azure contamos con varias herramientas y servicios que nos pueden ayudar a llevar a cabo estas tareas:

Application Insights/Log Analytics: permiten la recolección de logs de las diferentes aplicaciones desplegadas y pueden generar un tratamiento automatizado sobre los mismos, detectando anomalías o degradaciones de los servicios.

Monitor: proporciona capacidad de monitorizar los servicios desplegados y creación de alertas sobre reglas predefinidas en caso de detectar algún tipo de fallo en nuestro sistema.

Identity Management (IAM): gestión de accesos y permisos asociados las diferentes piezas desplegadas, a nivel de usuarios, aplicaciones o grupos, mediante el uso de roles (RBAC), predefinidos por Azure o creados por nosotros mismos.

Security Center: agrupación de todos los datos que involucran a la seguridad de nuestros servicios, detectando de forma automática posibles brechas y ofreciendo recomendaciones para mitigarlas.

Policy: conjunto de reglas definidas que se han de cumplir sobre los servicios desplegados para así alcanzar unos mínimos establecidos en el diseño.

Blueprints: hace uso de la asignación de roles, la asignación de políticas y de la definición de plantillas ARM (Azure Resource Manager) para diseñar y definir diferentes arquitecturas que serán los patrones base de nuestros desarrollos.

Es la unión de estas herramientas lo que nos va a permitir un mayor control de nuestra infraestructura y aplicaciones, así como de todas las acciones y eventos que están teniendo lugar en ellas y que podrían poner en peligro la seguridad de las mismas.

El ciclo sin fin

Una vez que hemos implementado todas las directrices y hemos hecho uso en mayor o menor medida de las herramientas, ¿podemos pensar que nuestros desarrollos son seguros? La respuesta claramente es NO.

Como vimos en la imagen inicial, la filosofía DevSecOps es un ciclo continuo que no tiene fin, buscando la mejora en todos y cada uno de los procesos. Siguiendo los principios ágiles del desarrollo, iremos refinando e implementando mejoras incrementales sobre nuestras piezas, que nos acercarán un paso más hacia la excelencia.

La seguridad es una labor de todos. Cada miembro del equipo tiene que tenerlo en cuenta en aquellas partes en las que esté directamente implicado, sin esperar que un equipo especializado nos comunique lo que tenemos o no tenemos que hacer.

¿Quieres acelerar la transformación de tu compañía hacia una organización de alto rendimiento?

Desde BBVA Next Technologies y con la colaboración con Microsoft, te invitamos a una sesión 100% online, donde te contamos cómo conocer más sobre la evolución hacia DevSecOps y cómo implantar esta metodología de desarrollo seguro en la organización a través de cambios en procesos, herramientas y cultura. Por ello el próximo jueves 20 de mayo, a las 12:00 h vamos a realizar el evento “Buenas prácticas DevSecOps en Azure” ¡Te esperamos!

Las opiniones vertidas por el autor son enteramente suyas y no siempre representan la opinión de BBVA Next Technologies.

¿Quieres saber que más cosas hacemos en BBVA Next Technologies?