Skip to main content

Evita errores de configuración en la nube en HashiCorp Terraform con Snyk IaC

Escrito por
Infrastructure as Code security

13 de mayo de 2021

0 minutos de lectura

Nos complace compartir nuevas funciones de Snyk Infrastructure as Code (Snyk IaC), diseñadas para acompañar a quienes usan Terraform mientras escriben, planifican y aplican sus configuraciones. Con Snyk IaC, recibes orientación inmediata sobre configuraciones de seguridad mientras escribes y puedes analizar tus planes de Terraform en tus pipelines de implementación para garantizar que tus cambios y la configuración completa sean seguros. Además, agregamos importantes mejoras de rendimiento para procesar configuraciones con miles de archivos y mejoras de seguridad para mantener privados los detalles de tu entorno privado.

Elimina los errores de configuración de Terraform durante todo el ciclo de vida

Con estas nuevas capacidades de Snyk IaC, puedes tratar Terraform como cualquier otro tipo de código y desplazar la seguridad a la izquierda, integrando la seguridad de la configuración en todo el ciclo de vida de Terraform. Snyk IaC analiza errores de configuración desde el momento en que se escribe el código para ofrecer a tus ingenieros comentarios y orientación inmediatos, basados en las prácticas recomendadas de la nube y del sector, además de las políticas de tu organización. Cuando se confirman los módulos de Terraform y comienzan las pruebas automatizadas, Snyk IaC analiza tus planes de Terraform y ofrece una visión completa de los cambios para garantizar que tus entornos sean seguros al implementarlos, evitando sorpresas posteriores a la implementación y regresiones.

Por qué es importante analizar los planes de Terraform para detectar errores de configuración en la nube

La CLI de Snyk ya permite analizar archivos de Terraform y Kubernetes de forma local y en CI/CD, para ofrecer comentarios instantáneos mientras escribes y en tus repositorios de código. Esto funciona bien para cambios individuales, pero si quieres obtener una visión conjunta de todos los cambios que estás por aplicar, incluidos los efectos de los módulos y las variables incluidos, lo ideal es analizar el archivo del plan de Terraform.

Con esta versión, el flujo de trabajo de la CLI de Snyk ahora permite analizar un archivo de plan de Terraform (tf-plan) para detectar si los cambios propuestos introducirán nuevas vulnerabilidades de seguridad en tu infraestructura actual en la nube. Para mostrar cómo se puede usar Snyk IaC en todo el flujo de trabajo de Terraform, veremos un ejemplo con el código del tutorial de HashiCorp Usar balanceadores de carga de aplicaciones para implementaciones blue-green y canary, para que veas un flujo de trabajo local sencillo de «escribir, probar, planificar, probar, aplicar» con Snyk IaC.

Más información sobre la estrategia de implementación blue-green.

Cómo detectar errores de configuración en la nube en el código fuente de Terraform

Antes de empezar a usar Snyk, ya había aplicado la configuración de Terraform proporcionada por HashiCorp, así que mi entorno está en funcionamiento y mi código de Terraform está en git. Pero ahora que tengo Snyk IaC, quiero ver si hay problemas que deban preocuparme. Por eso, integré Snyk con mi repositorio de GitHub y podemos ver los resultados en la consola de Snyk:

Panel de análisis de Terraform de Snyk que muestra 2 problemas de gravedad media y 2 de gravedad baja para purpledobie/snyk-iac-tf, con los hallazgos organizados por archivo de Terraform.

No hay problemas de gravedad alta, pero al hacer clic en main.tf, observo que el balanceador de carga está configurado para usar HTTP en lugar de HTTPS. Por defecto es un problema de riesgo medio, pero a mi equipo de seguridad no le gusta. La interfaz de Snyk me muestra dónde está el problema en mi código, cuál es su impacto y cómo resolverlo:

Revisión de código de Terraform que destaca un listener de balanceador de carga de AWS que usa HTTP, junto con un hallazgo que indica que HTTPS no está habilitado.

Análisis de seguridad de Terraform mientras programas

Hice el cambio que Snyk IaC indicó en mi archivo de Terraform para que el balanceador de carga use HTTPS. Esto también requiere crear y usar un certificado, así que lo agregué a mi configuración. Ahora, antes de enviar mis cambios, quiero hacer una comprobación rápida para asegurarme de que solucionar el problema de HTTPS no haya generado otros problemas. Y ya que estoy, como esta aplicación está expuesta a Internet, mi equipo y yo ya no necesitamos ver la alerta «El balanceador de carga está expuesto a Internet» de Snyk IaC. Así que pedí a los administradores de seguridad que la desactivaran por mí; es fácil hacerlo en Snyk IaC. Mis únicos cambios fueron en main.tf, así que eso es lo que probaré localmente antes de confirmarlos:

$ snyk iac test main.tf

Testing main.tf...

Infrastructure as code issues:

Organization:      purple-dobie
Type:              Terraform
Target file:       main.tf
Project name:      learn-terraform-advanced-deployments
Open source:       no
Project path:      main.tf

Tested main.tf for known issues, found 0 issues

¡Perfecto! Solucioné el problema de HTTPS y mi equipo de seguridad desactivó la comprobación de «expuesto a Internet», así que no tengo ningún problema, al menos en main.tf. Me parece bien. ¡Hora de implementar mis cambios!

Analiza errores de configuración de Terraform en tus pipelines

Antes de aplicar mis cambios, necesito ejecutar un plan de Terraform para saber qué cambiará. Como el plan de Terraform incorpora cambios de todos los módulos y también incluye todas nuestras variables, nos da una mejor idea del impacto de nuestros cambios. Esta es otra oportunidad para integrar Snyk IaC en nuestro ciclo de vida de Terraform y asegurarnos de que mis cambios no afecten a otros módulos de mi configuración. En el ejemplo a continuación, ejecuto todo localmente para simplificar, pero puedes usar fácilmente la CLI de Snyk en cualquier herramienta de CI que uses para automatizar la planificación y las pruebas:

# generate a Terraform plan in JSON format:
$ terraform plan -out=tfplan.bin
$ terraform show --json tfplan.bin > tfplan.json

# And use Snyk to test the plan to see I caused any issues:
$ snyk iac test tfplan.json 

Testing tfplan.json...

Infrastructure as code issues:

Organization:      purple-dobie
Type:              Terraform
Target file:       tfplan.json
Project name:      learn-terraform-advanced-deployments
Open source:       no
Project path:      tfplan.json

Tested tfplan.json for known issues, found 0 issues

Parece que mis cambios están bien: ¡no hay problemas de seguridad! Aunque hay algo que me sigue preocupando. Todo lo que probé arriba fueron los cambios en los recursos (la opción predeterminada de Snyk IaC), y sé que solo edité un archivo (main.tf), así que este resultado limpio no me sorprende. Sin embargo, mi configuración de Terraform ya se había aplicado y estaba en funcionamiento antes de que empezara a usar Snyk IaC. Por eso, quiero revisar todos los valores planificados para ver no solo mis nuevos cambios, sino también los detalles de configuración conocidos de la implementación que ya está en funcionamiento.

Mejora las comprobaciones de errores de configuración en la nube al incorporar el estado de Terraform

La nueva función tf-plan de Snyk IaC puede revisar los valores planificados. ¡Solo tengo que especificar que quiero analizar los valores planificados con la opción --scan=planned-values! De nuevo, recomiendo hacerlo en CI, pero para simplificar usaré la CLI:

$ snyk iac test --scan=planned-values tfplan.json

Testing tfplan.json...

Infrastructure as code issues:
  ✗ Security Group allows open ingress [High Severity] [SNYK-CC-TF-1] in VPC
    introduced by resource > aws_security_group[this_name_prefix] > ingress[0]
.
.
.
  ✗ Non-Encrypted root block device [Medium Severity] [SNYK-CC-TF-53] in EC2
    introduced by aws_instance[blue] > root_block_device > encrypted
.
.
.

Organization:      purple-dobie
Type:              Terraform
Target file:       tfplan.json
Project name:      learn-terraform-advanced-deployments
Open source:       no
Project path:      tfplan.json

Tested tfplan.json for known issues, found 20 issues

¡Ups! Esta vez tenemos 20 problemas, incluidos algunos problemas de `High Severity` (para abreviar el resultado anterior, omití todos salvo uno de gravedad alta y uno de gravedad media).

Analiza Terraform e incluye módulos y variables

Este nuevo resultado me indica que quizás tenga más trabajo por hacer, pero hay algo más interesante que surge al analizar el tf-plan, además del análisis de archivos: esos problemas de gravedad alta no aparecieron en el análisis inicial de mi repositorio git al principio de este ejemplo, ni tampoco cuando analicé el archivo main.tf por separado después de editarlo.

Esto se debe a que nuestra configuración usa varios módulos y variables del proveedor de AWS. En los análisis del repositorio y de un solo archivo, comprobamos el archivo de forma estática. Esto significa que solo conocemos los recursos especificados explícitamente en el archivo, pero no podemos saber qué recursos crearán los módulos con solo revisar el archivo. El plan de Terraform incorpora toda la lógica de los módulos y las variables incluidos, así que podemos obtener una visión más completa de nuestra configuración.

Otra ventaja de poder analizar el plan de Terraform es que las herramientas del ecosistema de Terraform también deberían funcionar fácilmente con Snyk IaC. Algunos clientes usan herramientas como Terraform Cloud, Terragrunt y Atlantis. Como todas generan un plan de Terraform estándar, podemos analizarlo con Snyk IaC. En futuras publicaciones veremos ejemplos de algunas de estas herramientas del ecosistema.

Protege la confidencialidad de los datos de tu infraestructura privada y mejora el rendimiento

Como muestra incluso nuestro sencillo ejemplo anterior, analizar un plan de Terraform permite detectar muchos otros riesgos de configuración incorrecta que surgen durante el ciclo de vida habitual de IaC. Pero en esta etapa, el análisis también implica procesar datos confidenciales que sabemos que no quieres que salgan de tu red. Por eso, en esta versión la CLI de Snyk ejecuta las pruebas de IaC localmente y solo nos envía tus datos de autenticación de Snyk y los metadatos de la CLI. No tienes que realizar ningún paso especial ni hacer ninguna configuración para que esto funcione: viene integrado en Snyk IaC y, a partir de ahora, será el comportamiento predeterminado de la CLI de Snyk para IaC.

Analizar de forma local tiene otra ventaja: ¡un gran aumento de velocidad! Esto es especialmente importante para nuestros clientes que tienen cientos y, en algunos casos, miles de archivos en un solo repositorio de Terraform. Nuestras propias pruebas muestran que el análisis de estos directorios grandes es 20 veces más rápido.

Empieza a usar Snyk IaC gratis

Todos pueden probar estas nuevas funciones, incluso quienes tienen un plan gratuito. Empezar es muy fácil:

  1. Si aún no tienes una cuenta de Snyk, regístrate gratis.

  2. Instala la CLI de Snyk. Si ya la tienes instalada, verifica que tengas la versión 1.594.0 o una más reciente para acceder a estas funciones.

  3. Analiza tus archivos de Terraform y Kubernetes.

    • El comando principal para analizar IaC con las nuevas funciones es:snyk iac test <path-to-file-or-folder>

      Obtén más información sobre las distintas opciones de análisis que admitimos en nuestra documentación o consulta la documentación de la CLI ejecutando: snyk iac --help

    • Para analizar planes de Terraform, tendrás que generar una salida con formato JSON, que puedes obtener con terraform show, como se muestra en los ejemplos anteriores y se documenta en Terraform.

¡Nos encantaría conocer tu opinión! Si ya eres cliente de Snyk, tu equipo de éxito del cliente es un excelente canal para compartir comentarios sobre el producto. También recibimos con gusto los comentarios en el foro de Snyk Community de cualquier persona.

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.

Publicado en: