Seguridad de nube e infraestructura

IaC (Infraestructura como Código)

Se lee en aproximadamente 4 minutos

Qué es IaC (Infrastructure as Code)

IaC (Infrastructure as Code) es el método de definir y gestionar configuraciones de infraestructura como servidores, redes y almacenamiento como código. En lugar de operaciones manuales de GUI o ejecución de comandos, se describe el "estado deseado" de la infraestructura en código declarativo y las herramientas realizan automáticamente ese estado.

Desde la perspectiva de seguridad, IaC es importante por la reproducibilidad y auditabilidad de la configuración de infraestructura. Al gestionarlo como código en Git, queda un historial de quién cambió qué y cuándo, permitiendo detectar cambios de configuración no intencionados. Previene la "deriva de configuración" (divergencia entre el entorno de producción y la definición) común en la configuración manual, y asegura la consistencia de la infraestructura que es la base de la gestión de vulnerabilidades.

Ventajas de seguridad de IaC

  • Estandarización de configuración: Se pueden plantillar grupos de seguridad, políticas IAM, configuraciones de cifrado, etc. y aplicarlos uniformemente en todos los entornos. No se producen omisiones de configuración de seguridad al construir nuevos entornos
  • Gobernanza mediante revisión de código: Los cambios de infraestructura se visualizan como pull requests, permitiendo al equipo de seguridad revisar los cambios previamente. Se pueden detectar cambios peligrosos como permitir acceso público a buckets S3 antes de aplicarlos en producción
  • Detección de deriva: Las herramientas IaC detectan diferencias entre la definición y la realidad, descubriendo cambios no autorizados realizados manualmente. El plan de Terraform y la detección de deriva de AWS CloudFormation corresponden a esto
  • Recuperación rápida: Ante un incidente, la infraestructura se puede reconstruir desde el código, reduciendo significativamente el tiempo de recuperación. La reconstrucción desde un estado limpio también elimina el riesgo residual de sistemas comprometidos

Barreras de protección mediante Policy as Code

Lo que fortalece aún más la seguridad de IaC es Policy as Code. Verifica automáticamente mediante código si la configuración de infraestructura cumple con las políticas de seguridad de la organización.

Las herramientas representativas incluyen Open Policy Agent (OPA), Checkov, tfsec y AWS CloudFormation Guard. Al integrarlas en el pipeline CI/CD, se pueden bloquear automáticamente los cambios de infraestructura que violan las políticas.

Ejemplos de políticas a verificar:

  • Si el cifrado del almacenamiento está habilitado
  • Si los grupos de seguridad no permiten SSH (puerto 22) desde 0.0.0.0/0
  • Si el registro de logs está habilitado
  • Si no hay secretos hardcodeados en el código

Aplica las mismas verificaciones de políticas a la construcción de imágenes de contenedores y al despliegue de funciones serverless para mantener estándares de seguridad consistentes en toda la infraestructura.

Comparación de principales herramientas IaC

Las herramientas IaC se dividen en las que se escriben con DSL (lenguaje específico de dominio) declarativo y las que se escriben con lenguajes de programación de propósito general. Se seleccionan según el stack tecnológico y los requisitos operativos de la organización.

Terraform
Desarrollado por HashiCorp. Se escribe en HCL. Compatible con más de 3.000 proveedores incluyendo AWS, Azure y GCP, siendo el más utilizado en entornos multi-nube. La gestión del archivo de estado (tfstate) tiende a ser un desafío operativo.
AWS CloudFormation
Servicio IaC nativo de AWS. Se escribe en YAML o JSON. La integración más profunda con recursos AWS y respuesta rápida a nuevos servicios. AWS SAM es un framework especializado en serverless construido sobre esto.
AWS CDK
Define infraestructura en lenguajes de propósito general como TypeScript, Python y Java, generando internamente plantillas CloudFormation. Aprovecha al máximo las funciones del lenguaje como condicionales y bucles, fuerte en abstracción de infraestructura compleja.
Pulumi
Herramienta multi-nube que se escribe en TypeScript, Python, Go, etc. Filosofía similar a CDK pero gestiona estado con su propio motor sin depender de CloudFormation. Fácil integración con frameworks de pruebas.

Desde la perspectiva de seguridad, independientemente de la herramienta elegida, es importante construir un pipeline de "revisión de código → pruebas automatizadas → aprobación → despliegue". Integra escáneres de seguridad específicos de cada herramienta (tfsec para Terraform, cfn-nag para CloudFormation) en el CI para detectar configuraciones peligrosas antes de que se fusionen.

Mejores prácticas de seguridad de IaC

Mejores prácticas para operar IaC de forma segura.

La separación de la gestión de secretos es el principio más importante. No escribas información confidencial como contraseñas de bases de datos, claves API y certificados directamente en el código IaC. Almacénalos en servicios dedicados como AWS Secrets Manager, HashiCorp Vault o AWS Systems Manager Parameter Store, y solo haz referencia desde el código IaC. Si los secretos quedan en el historial de Git, se filtran a todos los que tengan acceso al repositorio, así que previene commits accidentales con hooks pre-commit como git-secrets o gitleaks.

La automatización de la detección de deriva también es indispensable. La "deriva de configuración" donde el estado real de la infraestructura diverge de lo definido en IaC ocurre por cambios de emergencia manuales u operaciones de consola. Construye mecanismos para ejecutar periódicamente terraform plan de Terraform para detectar diferencias o monitorear cambios de configuración con reglas de AWS Config. Cuando se detecta deriva, decide si reflejarla en el código IaC o revertir el cambio manual, manteniendo la coincidencia entre código y realidad.

Aplica el principio de mínimo privilegio también al pipeline de despliegue de IaC. Otorga solo los permisos mínimos necesarios para el despliegue al rol IAM utilizado por el pipeline CI/CD. Haz que los despliegues al entorno de producción pasen por un flujo de aprobación para que los desarrolladores no puedan aplicar directamente IaC en producción.

Mediante modularización y reutilización, mantén la consistencia de las configuraciones de seguridad. Define grupos de seguridad, configuraciones de cifrado y configuraciones de registro como módulos comunes y reutilízalos en todos los proyectos. Gestiona versiones de los módulos para que al corregir un parche de seguridad en un solo lugar se refleje en todos los entornos.

Conceptos erróneos comunes

Si implementas IaC, la seguridad de la infraestructura mejora automáticamente
IaC es la base para mejorar la seguridad, pero si el código contiene configuraciones vulnerables, esas vulnerabilidades se despliegan consistentemente en todos los entornos. Solo es efectivo cuando se combina con verificación automática mediante Policy as Code y procesos de revisión de código.
El código IaC no contiene información confidencial, así que se puede poner en un repositorio público
El código IaC contiene información útil para atacantes como IDs de cuenta, configuración de red interna y reglas de grupos de seguridad. Además, existe el riesgo de que se cometan secretos accidentalmente, por lo que debe gestionarse en repositorios privados con escaneo de secretos habilitado.

Términos relacionados

Artículos relacionados