Skip to main content

Detecta la desviación de infraestructura y los recursos no administrados con Snyk IaC

Escrito por
Headshot of Stephane Jourdan

Stephane Jourdan

feature synk iac terraform purple

9 de mayo de 2022

0 minutos de lectura

Aviso de obsolescencia: detección de desviaciones en recursos administrados

La detección de desviaciones en recursos administrados, incluidos snyk iac describe --only-managed and snyk iac describe --drift, dejó de estar disponible. La fecha de fin de vida útil de la detección de desviaciones en recursos administrados es el 30 de septiembre de 2023.

Como desarrollador, probablemente usas algún proveedor de servicios en la nube para tu infraestructura. Y es probable que automatices algunas partes con infraestructura como código (IaC), para que las implementaciones sean repetibles, consistentes, fáciles de implementar y, en general, más seguras, porque el código hace que los parámetros sean más visibles.

Al final, todos terminamos con recursos activos en nuestro proveedor de servicios en la nube, pero puede que no conozcamos el estado actual de todos ellos. ¿Alguien cambió manualmente la configuración de un bucket de S3? ¿Un colega creó una nueva ruta en nuestra implementación de API Gateway? ¿Cómo sabemos si algunos recursos predeterminados están mal configurados? Y, tarde o temprano, terminas con recursos en la cuenta del proveedor de servicios en la nube que no aparecen en ninguna implementación de Terraform, que se modificaron o que se eliminaron por completo. Esta brecha entre cómo creemos que están configurados los recursos en la nube y cómo están configurados realmente se conoce como desviación de infraestructura.

Snyk Infrastructure as Code (Snyk IaC) ahora detecta todos los tipos de desviación de infraestructura y los reporta como recursos de Terraform, para que los desarrolladores tengan visibilidad completa y puedan corregirlos a tiempo.Esto incluye cambios o eliminaciones de recursos «administrados» (recursos implementados realmente desde IaC) y «no administrados» (los que aún no están bajo el control de IaC). Los reportes que genera la CLI de Snyk se pueden consultar directamente en la terminal, integrar en un pipeline o una verificación recurrente, o exportar como HTML para compartirlos.

Snyk admite todos los estados de Terraform y almacena estos archivos localmente en distintos tipos de almacenamiento de objetos, como Amazon S3, GCS, Azure, HTTPS, Terraform Cloud y más. El almacenamiento se puede combinar para reflejar la estructura de tu IaC, tanto si tienes varios repositorios de Terraform en distintos equipos como si usas un modelo más centralizado. Además, funciona con los principales proveedores de servicios en la nube —AWS, GCP y Azure— y requiere el mínimo de permisos posible.

En esta publicación, veremos algunos de los problemas que la gestión de desviaciones de Snyk IaC puede resolver, entre ellos:

  • Ampliar la cobertura de IaC en tus entornos de nube

  • Identificar desviaciones de infraestructura en una funcionalidad o aplicación

  • Detectar desviaciones en un servicio específico de la nube

Beneficios de gestionar las desviaciones

Esta es la historia de un servicio y muchos recursos. Tomemos como ejemplo sencillo una implementación de API Gateway. En AWS, la experiencia está muy bien integrada en la consola web. En Terraform, se divide en entre 10 y 25 recursos, según la versión de API Gateway. Los métodos, las respuestas, los modelos, las rutas, las etapas… todos son recursos distintos.

Si estás empezando a escribir código de Terraform a partir de servicios existentes, contar con una lista completa de recursos de Terraform no administrados, clasificados por servicio en la nube y tipo de recurso, te permitirá identificarlos fácilmente y ahorrar mucho tiempo, en lugar de tener que averiguar cómo se estructura en Terraform cada funcionalidad de cada servicio en la nube.

Si ya tenemos nuestro API Gateway bajo control en Terraform, nada impide que alguien agregue una ruta o una respuesta HTTP manualmente, ¡y es posible que nadie se entere! La detección de desviaciones garantiza que estos cambios se detecten y reporten para mitigar posibles incoherencias o problemas de configuración.

En resumen, queremos hacer visibles las desviaciones para:

  • Mejorar la cobertura de nuestro código y así analizar el código en busca de errores de configuración antes de la implementación.

  • Tomar medidas de inmediato, como eliminar el recurso o revertir el cambio antes de que cause daños.

Ampliar la cobertura de tu IaC

Si eres como muchos equipos, probablemente aún no tengas todo cubierto en los numerosos repositorios de Terraform que usas y compartes entre equipos. Entonces, ¿cómo funciona la detección de recursos no administrados en Snyk IaC?

Snyk IaC combinará todos los estados de Terraform que le proporciones en un gran mapa consolidado y lo comparará con lo que encuentre en tu cuenta de AWS. Las diferencias son desviaciones, que se reportan como recursos de Terraform.

Usar describe de Snyk IaC con la opción --only-unmanaged nos ayudará a lograrlo:

$ snyk iac describe --only-unmanaged
[...]
Snyk Scanning Infrastructure As Code Discrepancies...

  Info:    Resources under IaC, but different to terraform states.
  Resolve: Reapply IaC resources or update into terraform.

Unmanaged resources: 5

Service: aws_iam [ Unmanaged Resources: 3 ]

  Resource Type: aws_iam_policy_attachment
    ID: user1-84i30k-arn:aws:iam::aws:policy/AdministratorAccess

  Resource Type: aws_iam_user
    ID: labs

  Resource Type: aws_iam_user_policy
    ID: dat-user:manuals3policy

Service: aws_s3 [ Unmanaged Resources: 2 ]

  Resource Type: aws_s3_bucket
    ID: manual-bucket-2022
    ID: test-resource-exposure-caxyxllsajfrzbwe

Test Summary

  Managed Resources: 4
  Unmanaged Resources: 5

  IaC Coverage: 44%

Como desarrolladores, podemos aprovechar fácilmente este resultado:

  • Empezamos sabiendo que la cobertura de nuestro código es del 44 %, lo que facilita el seguimiento del progreso hacia la adopción de IaC.

  • Hay dos buckets de S3 (tipo: aws_s3_bucket) que no están en Terraform y tenemos sus nombres. Podemos decidir fácilmente si importarlos o eliminarlos.

  • Hay algunas incoherencias en nuestra configuración de IAM: 

    • Se creó manualmente un usuario de IAM llamado «labs» (tipo: aws_iam_user_policy). ¿Qué hace este usuario?

    • Se adjuntó manualmente una política de acceso «Administrator» a un usuario de IAM administrado llamado «user1-84i30k» (tipo: aws_iam_policy_attachment). ¿Nuestros equipos entienden las consecuencias?

    • Se agregó manualmente una política completa de IAM (tipo aws_iam_user_policy). Si alguien la cambia, ¿quién controla su contenido?

Identificar los cambios desde tu última implementación

Otro caso de uso común para los desarrolladores es gestionar desviaciones dentro de un ámbito específico. A menudo, los desarrolladores son responsables de una funcionalidad con un alcance de infraestructura muy definido. Necesitamos detectar qué cambió dentro del ámbito que definimos, no recibir información sobre toda la cuenta en la nube.

Una primera opción es simplemente ingresar todos los estados de Terraform en Snyk IaC y descubrir qué recursos faltan y cuáles cambiaron:

$ snyk iac describe --only-managed
Snyk Scanning Infrastructure As Code Discrepancies...

  Info:    Resources under IaC, but different to terraform states.
  Resolve: Reapply IaC resources or update into terraform.

Changed resources: 1

State: tfstate://terraform.tfstate [ Changed Resources: 1 ]

  Resource Type: aws_s3_bucket
    ID: somebucket-84i30k
    ~ versioning.0.enabled: false => true

Missing resources: 1

State: Generated [ Missing Resources: 1 ]

  Resource Type: aws_iam_policy_attachment
    ID: user1-84i30k-arn:aws:iam::aws:policy/ReadOnlyAccess

Test Summary

  Managed Resources: 3
  Changed Resources: 1
  Missing Resources: 1

  IaC Coverage: 75%

Este reporte nos brinda información interesante:

  • Podemos agregar todos los estados de Terraform que usamos y obtener información sobre las desviaciones solo dentro de ese ámbito.

  • El reporte muestra en qué estado de Terraform se encuentra cada desviación o cambio.

  • Esta función es liviana, ya que solo requiere los permisos mínimos necesarios en la cuenta de la nube. ¡No vuelvas a usar las credenciales de implementación de Terraform de CI/CD!

Detectar recursos faltantes en un servicio de la nube

Como desarrolladores, quizá solo queramos revisar con más precisión un único servicio de la nube, como «S3» o «IAM». Para ello, podemos usar los filtros de recursos de Snyk IaC (--filter="aws_resource_name"), pero tendríamos que conocerlos y enumerarlos todos, y mantener la lista actualizada. ¡Qué tedioso! En esos casos, usamos la opción --service para incluir un servicio completo sin tener que saber cuántos recursos abarca.

$ snyk iac describe --only-managed --service=aws_iam
Snyk Scanning Infrastructure As Code Discrepancies...

  Info:    Resources under IaC, but different to terraform states.
  Resolve: Reapply IaC resources or update into terraform.

Missing resources: 1

State: Generated [ Missing Resources: 1 ]

  Resource Type: aws_iam_policy_attachment
    ID: user1-84i30k-arn:aws:iam::aws:policy/ReadOnlyAccess

Test Summary

  Managed Resources: 2
  Missing Resources: 1

  IaC Coverage: 66%
  Info: To reach full coverage, remove resources or move it to Terraform.

En este caso de uso, obtendremos un reporte de todo lo que se encuentre dentro del servicio AWS IAM. Así, cubrimos de una vez decenas de recursos de Terraform (claves de acceso, grupos, adjuntos, políticas, roles, etc.).

La gestión de desviaciones ya está disponible en Snyk IaC

Tanto si eres un desarrollador que está empezando con IaC como si formas parte de un equipo experimentado con flujos de trabajo de IaC establecidos y sofisticados, la gestión de desviaciones de Snyk IaC puede ayudarte a tener más visibilidad de lo que se está ejecutando realmente en tus cuentas de la nube y a actuar con rapidez, usando la menor cantidad posible de permisos de acceso.

La gestión de desviaciones de Snyk IaC puede ejecutarse localmente en las laptops de los desarrolladores a pedido mediante la CLI, en pipelines de CI/CD o como trabajos cron programados para obtener reportes específicos (a partir de la versión 1.918.0).

La gestión de desviaciones está disponible en todos los planes de Snyk, incluido nuestro plan gratuito, así que empieza hoy mismo a proteger tu infraestructura como código.

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.

Leer más

feature insights context
Blog

Los ataques autónomos ya están aquí. La defensa debe estar a su altura.

Los atacantes autónomos están reduciendo el tiempo disponible para defenderse. Descubre cómo el descubrimiento, la corrección, la validación y la prevención continuos pueden ayudar a los equipos de seguridad a seguirles el ritmo.

Blog

Evo ADS Govern Agent Behavior ya está disponible: controla el uso de MCP

Evo ADS Govern Agent Behavior ya está disponible, comenzando con MCP Governance. Descubre, aprueba, monitorea, registra y bloquea el uso de servidores MCP en los principales agentes de programación con IA.

illustration hero ai
Blog

¿Qué es Agentic AppSec?

Descubre cómo Agentic AppSec usa agentes de IA con contexto, límites definidos y verificación independiente para ejecutar el ciclo de seguridad de aplicaciones.