In this article
Infrastructure as Code en el mundo DevSecOps
En este artículo hablaremos sobre Infrastructure as Code (IaC), qué es exactamente y cuáles son las implicaciones de seguridad de usar IaC en el mundo real.
¿Qué es Infrastructure as Code?
Infrastructure as Code (IaC) es el proceso de aprovisionar y administrar recursos en nubes públicas como AWS, GCP y Azure mediante un conjunto de archivos de texto editables que describen cómo y dónde se implementan las configuraciones de los recursos de infraestructura.
Las herramientas de Infrastructure as Code incorporan estos scripts de entrada y, luego, crean, actualizan o eliminan recursos automáticamente para garantizar que la infraestructura en la nube cumpla con el estado definido en el archivo de IaC. Estas herramientas están diseñadas para administrar las dependencias implícitas y explícitas entre los recursos de infraestructura en la nube, de modo que la creación, el mantenimiento y la eliminación de recursos se realicen de manera lógica y tengan en cuenta dichas dependencias.
Antes de que existiera Infrastructure as Code (IaC), los recursos normalmente se aprovisionaban de forma manual o, en el mejor de los casos, mediante scripts sencillos, como los de shell o Python. Las herramientas de administración de configuración eran muy eficientes para configurar una instancia una vez que estaba en funcionamiento, pero no podían crearla desde el inicio.
IaC surgió para ayudar a cerrar esta brecha mediante la automatización del aprovisionamiento de recursos y así dejar atrás los servidores snowflake. La introducción de lenguajes declarativos de alto nivel para definir un estado deseado, junto con las herramientas de IaC que implementaban automáticamente esas declaraciones, supuso un gran avance para la industria.
Infrastructure as Code (IaC) aportó muchos beneficios, entre ellos:
Velocidad y estandarización: Permite escribir el estado deseado en scripts para lograr una reproducibilidad perfecta.
Control de versiones: Permite guardar estos scripts en Git y mantener un historial de tu infraestructura, como sucede con el código de las aplicaciones.
Documentación: Permite que los scripts funcionen como documentación y como una única fuente de verdad.
Eficiencia: Extiende la posibilidad de realizar implementaciones continuas al aprovisionamiento y la administración de los propios recursos.
Los tres principales proveedores de nube pública ofrecen sus propias soluciones de IaC, que solo funcionan en sus respectivas plataformas:
Amazon Web Services ofrece AWS CloudFormation.
La plataforma de Microsoft Azure es Azure Resource Manager.
Google Cloud Platform usa Google Cloud Deployment Manager.
Terraform es el software de IaC independiente de la nube más utilizado y ofrece la ventaja de ser compatible con muchos proveedores de nube. De hecho, los proveedores de nube más pequeños, como DigitalOcean y Rackspace, suelen depender de Terraform en lugar de un producto de IaC propio.
Los proveedores de software automatizado de administración de configuración, como Puppet, Chef y Ansible, también han trabajado para ampliar sus capacidades y hoy ofrecen cierto nivel de compatibilidad para crear, actualizar y eliminar recursos en nubes públicas. Sin embargo, no se diseñaron desde cero como herramientas de IaC.
¿Qué es la seguridad de IaC?
La seguridad de Infrastructure as Code (IaC) consiste en proteger las configuraciones de la nube, la infraestructura y las aplicaciones mediante el análisis de archivos de IaC y de las implementaciones en la nube para verificar que cumplan con un conjunto de reglas codificadas.
La seguridad de IaC puede evitar que las configuraciones incorrectas lleguen a los entornos de nube en producción y, así, reducir el riesgo de filtraciones de datos, tiempo de inactividad y fallas en las implementaciones. Las consecuencias de que los scripts de IaC no respeten los principios de seguridad pueden ser graves, como buckets de almacenamiento sin protección que exponen datos confidenciales o una instancia que queda accesible públicamente por accidente y se convierte en un vector de ataque para los hackers.
Algunas prácticas recomendadas de seguridad de IaC incluyen el principio de privilegio mínimo, la segmentación de redes para proteger todos los recursos y sus dependencias relacionadas dentro de una subred privada, y el cifrado de los datos en tránsito y en reposo.
El principio de privilegio mínimo es importante para mitigar los daños causados por recursos mal configurados o scripts modificados de forma maliciosa, y se aplica a Infrastructure as Code (IaC) en tres niveles:
Definir quién tiene autorización para ejecutar los scripts y quién no.
Limitar los permisos de los usuarios**de IaC*autorizados a lo necesario para realizar sus tareas.
Los scripts de IaC deben garantizar que los permisos otorgados a los distintos recursos que crean sean limitados a lo que necesitan para funcionar.
La mayoría de los demás aspectos de la seguridad de IaC se relacionan con los recursos que crean los propios scripts. Por ejemplo, una arquitectura de red correctamente segmentada puede contener los daños de ataques internos o externos. Incluir una línea encrypt = true en tus scripts de Infrastructure as Code (IaC) protege los datos en reposo, mientras que invocar servicios administrados como AWS Certificate Manager puede proteger los datos en tránsito. Otras prácticas recomendadas incluyen configurar los mecanismos de protección habituales contra DDoS y ataques HTTP comunes, como un firewall de aplicaciones web.
¿Qué es IaC en DevSecOps?
En el contexto de Infrastructure as Code, DevOps implica una estrecha colaboración entre desarrolladores e ingenieros de DevOps, además del uso de IaC como parte de la implementación continua. “DevSecOps”, también conocido como “enfoque shift-left”, integra la seguridad en DevOps. En el caso de IaC, DevSecOps significa integrar la seguridad desde el inicio del proyecto y mantenerla bajo control en todo momento. También implica usar las herramientas adecuadas para tu carga de trabajo y automatizar la seguridad (a veces llamada seguridad como código).

Adopción de DevSecOps: integrar la seguridad en el pipeline de CI/CD
DevSecOps tiene tanto que ver con la cultura organizacional (en particular, con el libre flujo de información entre equipos diversos) como con la tecnología. DevSecOps, como parte del mundo DevOps,donde convergen la cultura y la tecnología, impulsa la automatización en todos los niveles. IaC es un aspecto fundamental de DevOps, ya que busca automatizar implementaciones completas. En IaC, DevSecOps consiste en automatizar las prácticas recomendadas de seguridad y usar herramientas adaptadas a cada carga de trabajo para mejorar la seguridad.
Herramientas de seguridad para Infrastructure as Code
En realidad, existen pocas herramientas de seguridad diseñadas específicamente para aplicar las prácticas recomendadas de seguridad en IaC dentro de DevSecOps. Las herramientas de seguridad de terceros, como DataDog, Splunk y Jaeger, entre otras, pueden usarse fuera de los scripts de IaC. También hay servicios de seguridad nativos de la nube que pueden habilitarse desde scripts de IaC, como Amazon GuardDuty, Amazon Macie y Amazon Inspector.
Sin embargo, Snyk IaC Security es una de las pocas herramientas diseñadas para desarrolladores _y_ equipos de seguridad, que permite proteger Terraform, Kubernetes, CloudFormation, Azure Resource Manager (ARM) y más.

Snyk IaC protege tus configuraciones durante todo el ciclo de vida de la infraestructura mediante una integración fluida en los flujos de trabajo de desarrollo y la aplicación de políticas de seguridad recomendadas para IaC, desde el código hasta la nube:
Implementa prácticas recomendadas de seguridad y cumplimiento: un conjunto de reglas integrado y en constante evolución, basado en las prácticas recomendadas de la industria, los estándares de CIS y los ejercicios de modelado de amenazas del equipo de seguridad de Snyk. Integra la seguridad y supera las revisiones de código.
Permite que los desarrolladores mantengan su flujo de trabajo habitual: pruebas continuas de IaC para detectar configuraciones incorrectas, con opciones para hacer pruebas localmente mediante la CLI e integraciones con IDE, sistemas de administración de código fuente (GitHub, GitLab, etc.) y Terraform Cloud. Impulsa la adopción entre los desarrolladores y reduce al mínimo el tiempo de inactividad y las distracciones.
Corrige más rápido los problemas de mayor riesgo: muestra la gravedad y el impacto de los problemas, junto con instrucciones estructuradas para corregirlos directamente en el código, para que los desarrolladores puedan resolverlos rápidamente y mantener siempre configuraciones seguras.
Protege según tu caso específico: escribe o importa reglas personalizadas en Rego, el lenguaje de alto nivel de Open Policy Agent, y ajusta la gravedad de las reglas predefinidas.
Protege durante todo el ciclo de vida de la infraestructura: detecta problemas de desviación de infraestructura y recursos no administrados en entornos de nube en producción. Envía informes directamente a los ingenieros con contexto sobre los recursos para agilizar las correcciones y poner bajo control los recursos no administrados.
Snyk Infrastructure as Code es una parte integral de la plataforma Snyk que incorpora y mantiene las prácticas recomendadas de seguridad en toda la pila de aplicaciones nativas de la nube, incluidos el código abierto, los contenedores y Kubernetes, además de Infrastructure as Code.
Protege la infraestructura desde el origen
Snyk automatiza la seguridad y el cumplimiento de IaC en los flujos de trabajo, y detecta recursos con desviaciones de configuración y recursos faltantes.
Conclusión
Como Infrastructure as Code se encuentra en la capa superior de orquestación, la seguridad es más fácil de administrar y mantener. Aunque existen muchas soluciones que pueden habilitarse mediante IaC, son muy pocas las que permiten aplicar prácticas recomendadas de seguridad en el nivel de IaC. Encontrar las herramientas adecuadas, así como capacitar al personal y fomentar una formación que promueva la colaboración entre equipos, es otro elemento fundamental. Aplica prácticas recomendadas de seguridad al código de IaC cuando uses Terraform, Kubernetes, CloudFormation, Azure Resource Manager (ARM) y más. Regístrate gratis para proteger tus proyectos con Snyk.