Blog

Seguridad de Infrastructure as Code (IaC): la guía completa

Seguridad de IaC explicada: el modelo de amenazas, el scanning a lo largo del SDLC, policy as code, secrets y state y un flujo práctico de remediación.

Bruno Baldo·Sep 21, 2026·Actualizado el Sep 14, 2026·16 min de lectura·Revisado por Rainforest Technologies

Infrastructure as Code cambió la forma en que los equipos construyen y operan sistemas y, al hacerlo, cambió el problema de seguridad. Cuando tus redes, bases de datos, permisos y clusters se definen todos en archivos de texto que se aplican automáticamente, la seguridad de IaC se convierte en la práctica de asegurar que esas definiciones sean seguras antes siquiera de aprovisionar un recurso. Esta guía recorre qué significa la seguridad de infrastructure as code, las amenazas específicas de ella, cómo hacer el scanning de IaC a lo largo del ciclo de vida de desarrollo de software y las prácticas que evitan que una base creciente de código de infraestructura acumule riesgo en silencio.

Si eres responsable de una plataforma, un pipeline o la seguridad de cualquiera de los dos, el atractivo de IaC es evidente: los entornos se vuelven reproducibles, revisables y versionados. El detalle es que cada una de esas propiedades es un arma de doble filo. Reproducible significa que un error se reproduce a la perfección. Revisable significa que nada es seguro a menos que alguien realmente lo revise. Versionado significa que un secret commiteado hoy queda en tu historial para siempre. Una infrastructure as code segura es lo que cierra esa brecha.

Qué es IaC y por qué importa la seguridad de IaC

Infrastructure as Code es la práctica de definir y aprovisionar infraestructura — cómputo, almacenamiento, red, identidad y los servicios encima de ella — mediante archivos de definición legibles por máquina, en lugar de clics manuales en una consola. Las herramientas aplican esos archivos para crear, actualizar y eliminar recursos reales. Las definiciones viven en el control de versiones junto al código de la aplicación, pasan por la misma revisión y CI y se convierten en la única fuente de verdad sobre cómo debe verse un entorno.

Ese modelo es poderoso y reconfigura el panorama de seguridad de tres formas específicas.

Configuración incorrecta a escala. Los incidentes de nube más comunes no son exploits exóticos; son configuraciones incorrectas — un bucket de almacenamiento dejado público, un security group abierto al mundo, una identidad con más permisos de los que necesita. En una consola, una configuración incorrecta es un error en un solo lugar. En IaC, una configuración incorrecta queda incrustada en un template o módulo que puede aplicarse decenas de veces en regiones, cuentas y equipos. La eficiencia que hace valioso a IaC es exactamente lo que convierte un error pequeño en uno sistémico.

Drift. IaC parte de que el código es la verdad. Pero alguien hace un cambio de emergencia en la consola a las 2 de la mañana, o un proceso automatizado muta un recurso, y ahora el entorno en ejecución ya no coincide con lo que está en el control de versiones. Esa brecha — el drift — es peligrosa porque tus revisiones, scans y auditorías operan todos sobre el código, mientras que los atacantes operan sobre lo que está realmente corriendo. Un drift no detectado significa que tus controles de seguridad están inspeccionando una ficción.

Errores repetibles. Los equipos copian módulos. Hacen un fork de un ejemplo que funciona, ajustan dos valores y lo despliegan. Si el original tenía un valor por defecto inseguro, cada descendiente lo hereda, y ahora la corrección hay que rastrearla en todo lo que alguna vez tomó prestado de él. Los buenos patrones se propagan a través de IaC, y los malos también.

La seguridad de IaC importa porque traslada el punto de control al único lugar donde una corrección es barata y universal: la definición. Cambia el módulo y cada entorno construido a partir de él queda corregido. Esta es la misma lógica de shift-left que sustenta la application security moderna, aplicada a la capa de infraestructura.

El modelo de amenazas de IaC

Para asegurar la infrastructure as code, ayuda ser concreto sobre lo que realmente sale mal. Estas son las categorías recurrentes.

Valores por defecto inseguros

Muchos recursos son permisivos de fábrica, o se vuelven permisivos cuando omites una configuración. Almacenamiento sin cifrado, logging deshabilitado, TLS no forzado, policies por defecto demasiado generosas — ninguno de estos lanza un error en el momento del apply. Simplemente se aprovisionan en silencio y esperan. Los valores por defecto inseguros son el hallazgo más común de todos porque "dejarlo fuera" es más fácil que "configurarlo correctamente", y las herramientas rara vez oponen resistencia por sí solas.

Secrets expuestos en código y state

Credenciales hardcoded, API keys, contraseñas de bases de datos y certificados privados terminan en archivos de IaC con más frecuencia de la que a nadie le gusta admitir. Una vez commiteado, un secret vive en el historial de git incluso después de eliminarse de la versión actual. Peor aún, los secrets frecuentemente van a parar a los archivos de state — el registro de los recursos aprovisionados — en texto plano, incluyendo valores que nunca debieron persistirse. Mantener los secrets fuera de ambos lugares es una preocupación de primer orden.

IAM demasiado permisivo

Identity and access management es donde se concentra el riesgo de IaC. Acciones con wildcard, recursos con wildcard, roles que pueden asumir otros roles y permisos concedidos "para que funcione" durante la depuración que nunca se revierten. Un IAM demasiado amplio es lo que convierte un único componente comprometido en una toma completa del entorno, porque el radio de impacto de cualquier brecha lo define lo que la identidad comprometida tenía permitido hacer.

Almacenamiento público y rutas de red abiertas

El almacenamiento expuesto a la internet pública y las reglas de red que permiten ingress desde cualquier lugar son fuentes perennes de exposición de datos. En IaC a menudo lucen inofensivos — un único CIDR de 0.0.0.0/0, un access block dejado sin definir — pero son precisamente las condiciones que conducen a las brechas. Merecen verificaciones de policy dedicadas porque su impacto es desproporcionado respecto de lo pequeño que luce el cambio en un diff.

Módulos no fijados y la supply chain

IaC incorpora módulos, providers e imágenes base externos. Si esas referencias no están fijadas — flotando en "latest" o en una rama sin versión — heredas cualquier cosa que cambie aguas arriba, incluyendo cambios maliciosos, sin revisión. Esta es la cara de infraestructura del riesgo de supply chain de software, que el OWASP Top 10 (2025) eleva como A03: Software Supply Chain Failures. Fija versiones, verifica la integridad donde puedas y trata el código de infraestructura de terceros con el mismo escrutinio que las dependencias de aplicación de terceros.

Exposición del archivo de state

El state merece su propia línea en el modelo de amenazas. Registra la topología completa de tu entorno y, como se señaló, puede contener secrets en texto plano. El state almacenado en un backend no protegido — un bucket sin cifrado, sin controles de acceso, sin versionado — es un mapa de tu infraestructura entregado a cualquiera que lo encuentre. El state remoto debe estar cifrado, rigurosamente permisionado, versionado y bloqueado contra escrituras concurrentes.

Scanning de IaC en el SDLC: haz el shift left y sigue

La práctica de seguridad de IaC más eficaz de todas es hacer el scanning de las definiciones temprano y de forma repetida, en cada etapa en la que una persona o un pipeline las toca. El scanning de IaC — analizar estáticamente los archivos de definición contra un cuerpo de reglas de seguridad — es cómo detectas las amenazas anteriores antes de que aprovisionen nada. El objetivo no es un único gate, sino una serie de ellos, cada uno más barato que el incidente que previene. Esta es la expresión de infraestructura del movimiento más amplio de DevOps a DevSecOps.

Pre-commit

El gate más temprano y más barato se ejecuta en la máquina del ingeniero antes siquiera de que el código se commitee. Los hooks de pre-commit detectan problemas obvios — un secret a punto de commitearse, una configuración incorrecta flagrante — en segundos, con todo el contexto del cambio fresco en la mente del autor. Mantén estas verificaciones rápidas y enfocadas; su trabajo es feedback instantáneo, no análisis exhaustivo.

Pull request

El pull request es donde la seguridad de IaC se convierte en una actividad de equipo. Los resultados del scan publicados directamente en el PR convierten la seguridad en parte de la revisión de código en lugar de una ceremonia aparte. Este es el lugar correcto para el conjunto completo de reglas: los hallazgos aparecen en contexto, en las líneas específicas que los introdujeron, y se resuelven antes del merge. Presentar los resultados como comentarios en el PR — con explicaciones claras y correcciones sugeridas — es lo que marca la diferencia entre desarrolladores que se involucran con la seguridad y desarrolladores que la esquivan.

CI

La integración continua es la red de contención de la aplicación. Incluso con verificaciones de pre-commit y de PR, la CI es donde estableces la policy que no se puede saltar: fallar el build ante hallazgos de alta severidad, bloquear merges que reintroducen un problema ya corregido y producir los artefactos y el rastro de auditoría de los que depende el cumplimiento. El scanning en CI también atrapa cualquier cosa que se haya colado por los gates anteriores, más fáciles de saltar.

Momento del plan y de la admission

El scanning estático lee el código; el scanning en plan-time y admission-time inspecciona lo que el código realmente va a hacer. Evaluar un cambio planificado contra la policy — antes de que se aplique — atrapa problemas que solo emergen de la combinación de recursos, o de valores resueltos en el momento del plan. Para clusters, el admission control hace el trabajo equivalente en el momento del deploy, rechazando workloads que violan la policy antes de que lleguen a ejecutarse. Este es el último gate antes de que el cambio se vuelva realidad, y es el más difícil de eludir.

Detección de drift

Por último, hacer el scanning del código no basta si el entorno en ejecución puede divergir de él en silencio. La detección de drift compara la infraestructura viva con las definiciones commiteadas y señala cualquier cosa que no coincida. Cierra el ciclo abierto por el modelo de amenazas: asegura que el entorno que tus controles de seguridad inspeccionaron es el entorno que está realmente corriendo, y convierte los cambios fuera de banda de un riesgo invisible en una señal revisable.

Los formatos principales — y que cada uno necesita ser asegurado

IaC no es una única tecnología, sino una familia de herramientas y formatos, cada uno con su propia sintaxis, sus propios modismos y sus propios errores característicos. Un programa completo de seguridad de IaC tiene que entender todos los que uses. Aquí está el panorama, con profundizaciones en las guías dedicadas.

Terraform es la herramienta de aprovisionamiento de propósito general más ampliamente adoptada, abarcando casi toda nube y servicio a través de providers. Sus preocupaciones de seguridad giran en torno a la gestión del state, el pinning de providers y módulos y la facilidad con que un IAM y unas reglas de red permisivos se cuelan en el HCL. Consulta la guía dedicada sobre Terraform security.

Ansible maneja la gestión de configuración y el aprovisionamiento mediante playbooks. Sus riesgos se inclinan hacia los secrets en variables y vaults, el escalamiento de privilegios y las tasks que alcanzan fuentes no verificadas. La guía de Ansible security los cubre en profundidad.

CloudFormation es el lenguaje de aprovisionamiento nativo de una gran nube, expresado en templates JSON o YAML. Los valores por defecto inseguros, los secrets hardcoded en parameters y los roles demasiado amplios son los sospechosos habituales; la guía de CloudFormation security va más allá.

Más allá de estos tres, varios otros formatos aparecen constantemente y cada uno necesita el mismo tratamiento. Los manifests de Kubernetes y los charts de Helm definen workloads y sus permisos, donde los pods con privilegios excesivos, los security contexts ausentes y los servicios expuestos son comunes — la guía de Kubernetes security cubre este conjunto de preocupaciones, y las imágenes de contenedor merecen su propio scanning mediante container security. Los templates ARM y Bicep son los formatos nativos de otra gran nube, con los mismos patrones de valor-por-defecto-inseguro y permiso-excesivo. Pulumi te permite definir infraestructura en lenguajes de programación de propósito general, lo que trae la ergonomía familiar del desarrollador junto con las preocupaciones de application security del propio lenguaje.

El hilo común: cada uno de estos es código que aprovisiona recursos reales y relevantes para la seguridad, y cada uno merece ser escaneado. Una brecha en la cobertura — un formato que tus herramientas no entienden — es un punto ciego que un atacante solo tiene que encontrar una vez.

Policy as code

A medida que crecen el número de reglas y el número de equipos, la revisión ad hoc deja de escalar. Policy as code es la respuesta: expresas tus requisitos de seguridad y cumplimiento como policy legible por máquina que se ejecuta automáticamente contra tu IaC. El enfoque más común usa un motor y un lenguaje de policy de propósito general — OPA con Rego es el ejemplo ampliamente adoptado — para definir reglas como "ningún almacenamiento puede ser público", "todos los volúmenes deben estar cifrados" o "ninguna policy de IAM puede usar acciones con wildcard".

La recompensa es consistencia y velocidad. Policy as code convierte tus estándares en guardrails que se aplican de forma idéntica a cada cambio, cada equipo y cada entorno, sin que una persona tenga que recordarlos. Quita la discusión del pull request — la policy pasa o no pasa — y te da un único lugar versionado y revisable para evolucionar tus requisitos. Codificar guardrails también significa que, a medida que tus estándares maduran, la mejora se propaga a todas partes de una sola vez, el mismo apalancamiento que hace valioso a IaC en primer lugar, orientado hacia la defensa.

Gestión de secrets y state

Dos preocupaciones atraviesan todo lo anterior y vale la pena destacarlas explícitamente.

Secrets. La regla es simple de enunciar y requiere disciplina para mantener: los secrets nunca pertenecen al código fuente de IaC. Usa un secrets manager dedicado y referencia los secrets en runtime en lugar de incrustarlos. Haz el scanning continuamente en busca de secrets que se cuelen de todos modos — en el código y en el historial de commits — y, cuando se encuentre uno, rótalo, porque eliminar un secret commiteado no deshace la exposición. Trata toda credencial que haya tocado el control de versiones como comprometida hasta que se rote.

State. El state remoto es infraestructura sensible. Almacénalo en un backend cifrado con controles de acceso estrictos, habilita el versionado para poder recuperarte de un apply defectuoso y usa state locking para impedir que las escrituras concurrentes lo corrompan. Ten en cuenta lo que va a parar al state — incluidos los secrets que se persisten ahí en texto plano — y restringe quién y qué puede leerlo. El acceso al state debe estar tan restringido como el acceso a la base de datos de producción, porque funcionalmente es lo que es.

Un flujo de remediación que los desarrolladores realmente van a usar

Encontrar problemas es solo la mitad del trabajo; la otra mitad es lograr corregirlos sin frenar la entrega. Un flujo que funciona tiende a compartir unos cuantos rasgos.

Prioriza por el riesgo real. No todo hallazgo es urgente. Clasifica por severidad y, críticamente, por explotabilidad y exposición — un problema público, no autenticado y de alto privilegio supera a uno teórico enterrado tres capas más abajo. Dale a los desarrolladores una lista corta y ordenada, no un muro de alertas indiferenciadas.

Entrega los hallazgos en contexto. Un resultado es accionable cuando aparece donde ocurre el trabajo — en el pull request, en la línea específica, con una explicación en lenguaje claro de por qué importa y una corrección sugerida concreta. Cuanto más lejos esté un hallazgo del código y del momento que lo introdujo, menos probable es que se corrija.

Controla el ruido. Nada mata un programa de seguridad más rápido que los falsos positivos. Ajusta las reglas a tu entorno, da soporte a excepciones documentadas con fechas de expiración para los riesgos aceptados y asegúrate de que un hallazgo suprimido sea una decisión deliberada y revisable, en lugar de una verificación silenciosamente deshabilitada.

Previene regresiones. Una vez corregido un problema, una policy en CI debería impedir que vuelva. El objetivo es un trinquete: la postura de seguridad de tu IaC solo se aprieta con el tiempo, porque cada clase de problema resuelta se convierte en un guardrail impuesto.

Buenas prácticas

Juntando los hilos, un programa maduro de seguridad de IaC luce así:

  • Haz el scanning en cada etapa — pre-commit, PR, CI, momento del plan o de la admission — y agrega detección de drift para que el state en ejecución no pueda divergir sin ser visto.
  • Impón el mínimo privilegio en todas partes, especialmente en IAM. Empieza desde cero y concede solo lo necesario; los wildcards son un olor a problema, no un atajo.
  • Fija cada dependencia — módulos, providers, imágenes base — y revisa las actualizaciones de forma deliberada en lugar de flotar en "latest".
  • Mantén los secrets fuera del código fuente y del state. Usa un secrets manager, haz el scanning del historial y rota cualquier cosa expuesta.
  • Codifica tus estándares como policy para que la configuración segura sea el valor por defecto y la aplicación sea consistente entre equipos.
  • Usa módulos seguros y revisados como la forma estándar de aprovisionar, para que los buenos patrones se propaguen en lugar de errores copiados-y-ajustados.
  • Trata el state como infraestructura sensible de nivel de producción — cifrado, versionado, bloqueado y rigurosamente permisionado.
  • Dale a los desarrolladores feedback rápido y contextual y un camino de baja fricción para corregir, porque un control que se elude no protege nada.

Cómo ayuda Rainforest

Asegurar la infrastructure as code no debería significar coser una herramienta aparte para cada formato y etapa. Rainforest incluye IaC scanning como parte de su plataforma de application security testing, analizando tu Terraform, CloudFormation, Ansible, manifests de Kubernetes y otras definiciones contra un amplio conjunto de reglas de seguridad y cumplimiento — y presentando los resultados donde tu equipo ya trabaja, directamente en el pull request, con explicaciones claras y correcciones sugeridas.

Como el riesgo de IaC no vive aislado, ese scanning se sitúa junto al software composition analysis (SCA) para los módulos y dependencias que tu infraestructura incorpora, la detección de secrets en el código y el historial y el container security para las imágenes que tu infraestructura ejecuta. El resultado es cobertura a lo largo de las capas de las que un entorno real está realmente hecho, con una priorización que apunta a los equipos hacia lo que importa y un flujo diseñado para corregirse, no para ignorarse.

Si estás intentando adelantarte a la configuración incorrecta a escala, agenda una demo y descubre cómo el IaC scanning encaja en un único flujo de application security.

Preguntas frecuentes

¿Qué es la seguridad de IaC?

La seguridad de IaC es la práctica de encontrar y corregir problemas de seguridad en las definiciones de infrastructure as code — los archivos que aprovisionan tus recursos de nube — antes de que se apliquen. Combina scanning estático, aplicación de policy, protección de secrets y state y detección de drift, de modo que las configuraciones incorrectas se detecten en el código en lugar de descubrirse en producción.

¿Por qué infrastructure as code es un riesgo de seguridad?

Porque la infraestructura ahora se define en código reutilizable, un único error — un valor por defecto inseguro, un secret expuesto, una policy demasiado permisiva — se replica en todos los lugares donde se aplica ese código. IaC también introduce drift (entornos en ejecución que divergen del código commiteado) y exposición de supply chain a través de módulos externos. La misma eficiencia que hace valioso a IaC es la que convierte un error pequeño en uno sistémico.

¿Qué es el scanning de IaC?

El scanning de IaC es el análisis estático de los archivos de definición de infraestructura — como Terraform, CloudFormation, Ansible y manifests de Kubernetes — contra un conjunto de reglas de seguridad y cumplimiento. Señala configuraciones incorrectas, secrets expuestos, permisos demasiado amplios y dependencias no fijadas para que puedan corregirse antes de que se aprovisione cualquier recurso.

¿Cuándo debo hacer el scanning de IaC en el pipeline?

En múltiples gates. Ejecuta verificaciones rápidas en pre-commit para feedback instantáneo, ejecuta el conjunto completo de reglas en los pull requests para que los hallazgos aparezcan en la revisión de código, impón policy en CI para que los problemas críticos no puedan mergearse y evalúa los cambios en el momento del plan o de la admission para atrapar lo que solo aflora en el apply. Agrega detección de drift para que la infraestructura en ejecución siga coincidiendo con el código revisado.

¿Qué es policy as code?

Policy as code significa expresar tus requisitos de seguridad y cumplimiento como reglas legibles por máquina — comúnmente con un motor de policy como OPA y su lenguaje Rego — que se ejecutan automáticamente contra tu IaC. Convierte tus estándares en guardrails consistentes aplicados a cada cambio y equipo, quitando el criterio subjetivo de cada revisión y dándote un único lugar versionado para evolucionar los requisitos.

¿Cómo mantengo los secrets fuera del IaC?

Nunca incrustes credenciales en el código fuente o en parameters; en su lugar, referéncialas desde un secrets manager dedicado en runtime. Haz el scanning continuamente en busca de secrets tanto en el código actual como en el historial de git, y ten cuidado de que los secrets no se persistan en archivos de state. Si alguna vez se commitea un secret, rótalo — eliminarlo de la versión actual no deshace la exposición de lo que ya está en el historial.

Bruno Baldo

Escrito por

Bruno Baldo

CMO

Um pouco de marketing e um pouco de curiosidade e temos a receita pra criar um apaixonado por cyber!

Siga leyendo