avatar Artículo

Cómo las herramientas open-source te ayudan con tu código

Este artículo final de una serie explora herramientas open-source para AWS, cubriendo generación de IaC, análisis de código, cumplimiento de políticas y estimación de costos, ofreciendo un conjunto de herramientas para desarrolladores.

Open-Source tools and AWS

Explora cómo integrar herramientas open-source populares con servicios AWS para mejorar flujos de trabajo de desarrollo y gestión de infraestructura.

3 articles

Complete
Cómo las herramientas open-source te ayudan con tu código

1. Introducción

Este es el último artículo de una serie de 3 sobre herramientas open-source y AWS. El artículo actual trata sobre cómo las herramientas open-source pueden ayudarte con tu código: para generarlo (IaC), validarlo (política como código y cumplimiento) y analizarlo (análisis estático/credenciales)

He creado las siguientes secciones:

  • Herramientas IaC
  • Análisis de código: credenciales y análisis estático
  • Política como Código
  • Cumplimiento

2. Generar IaC

Esta sección trata sobre herramientas open-source que te ayudarán a generar Infraestructura como Código directamente desde tus recursos existentes.

  • former2: genera IaC en muchos lenguajes diferentes (CloudFormation, CDK, Terraform, ...)
  • terracognita: genera tu infraestructura como código en configuración de Terraform
  • AirIAM: escanea patrones de uso de IAM existentes y proporciona un método simple para migrar configuraciones de IAM a un plan de Terraform de tamaño correcto

2.1. former2

Former2 te permite generar salidas de Infraestructura como Código desde tus recursos existentes dentro de tu cuenta de AWS. Al realizar las llamadas relevantes usando el AWS JavaScript SDK, Former2 escaneará tu infraestructura y te presentará una lista de recursos para que elijas cuáles generar salidas.

Salida de IaC compatible:

  • CloudFormation
  • Terraform
  • Troposphere
  • CDK v1
  • CDK v2
  • CDK (Terraform)
  • Pulumi
  • Diagram
  • Raw Output (Debug)

Por qué usarlo: Genera IaC desde recursos de cuenta de AWS creados manualmente usando una extensión para tu navegador. Lo configurarás a través del sitio web former2.com. former2-1 former2-2

¿Es popular?: En Github: Watch 36; Fork 190; Stars 1.6K

¿Actualizado recientemente?: Sí, hace dos meses (el 5 de diciembre de 2022)

URL: https://github.com/iann0036/former2

Más información: https://former2.com/#section-dashboard

2.2. terracognita

Lee de proveedores de nube públicos y privados existentes (Terraform inverso) y genera tu infraestructura como código en configuración de Terraform.

Terracognita actualmente importa proveedores de nube AWS, GCP, AzureRM y VMware vSphere como recurso/estado de Terraform (v1.1.9).

Por qué usarlo: puedes crear las plantillas de terraform de toda tu infraestructura de AWS con cero esfuerzo y esto es algo maravilloso, ¿no? terracognita-1 terracognita-2

¿Es popular?: En Github: Watch 33; Fork 119; Stars 1.5k

¿Actualizado recientemente? No. Último commit el 25 de agosto de 2022. En total, 625 commits

URL: https://github.com/cycloidio/terracognita/

2.3. AirIAM

AirIAM escanea patrones de uso de IAM existentes y proporciona un método simple para migrar configuraciones de IAM a un plan de Terraform de tamaño correcto. Identifica usuarios, roles, grupos, políticas y adjuntos de políticas no utilizados y los reemplaza con un código de Terraform de Mínimos Privilegios modelado para gestionar AWS IAM.

AirIAM fue creado para promover la gestión de IAM inmutable y controlada por versiones para reemplazar los métodos manuales y propensos a errores de hoy.

Por qué usarlo: Herramienta de escaneo de IAM para detectar recursos no utilizados (basado en las APIs de Amazon Access Advisor) y la creación de plantillas de terraform de tus recursos IAM.

airiam-terraform airiam-terraform-code

¿Es popular?: En Github: Watch 15; Fork 68; Stars 677

¿Actualizado recientemente? No. Último commit el 2 de agosto de 2022. En total, 426 commits

URL: https://github.com/bridgecrewio/AirIAM

La primera vez que usé esta herramienta, la funcionalidad de generación de plantillas de terraform funcionó bien, ahora recibo un error y no pude usarla. Sin embargo, creo que esta herramienta es útil para encontrar estos recursos iam no utilizados

2.4. Resumen: ¿Qué herramienta debo usar para generar IaC

  • CDK, CloudFormation, Troposphere, Pulumi: former2
  • Terraform IaC: former2 o terracognita
  • Recursos IAM específicos: former2, terracognita o AirIAM

3. Analizar código IaC: análisis estático

El Análisis de Código Estático comúnmente se refiere a la ejecución de herramientas de Análisis de Código Estático que intentan resaltar posibles vulnerabilidades dentro del código fuente ‘estático’ (no en ejecución). Información extraída del sitio web de OWASP

  • checkov: Escanea infraestructura en la nube aprovisionada para detectar configuraciones incorrectas de seguridad y cumplimiento usando escaneo basado en gráficos.
  • KICS: Encuentra vulnerabilidades de seguridad, problemas de cumplimiento y configuraciones incorrectas de infraestructura temprano en el ciclo de desarrollo de tu infraestructura como código
  • terrascan: analizador de código estático para Infraestructura como Código para escanear infraestructura como código en busca de configuraciones incorrectas, detectar vulnerabilidades de seguridad y violaciones de cumplimiento
  • tfsec: análisis estático de código para Terraform
  • cfn-nag: busca patrones en plantillas de CloudFormation que pueden indicar infraestructura insegura.

Todas las herramientas en esta sección te permiten crear reglas personalizadas

3.1. checkov

Checkov es una herramienta de análisis de código estático para infraestructura como código (IaC) y también una herramienta de análisis de composición de software (SCA) para imágenes y paquetes open-source.

Escanea infraestructura en la nube aprovisionada para detectar configuraciones incorrectas de seguridad y cumplimiento usando escaneo basado en gráficos.

Checkov escanea estos tipos de archivos IaC:

  • Terraform (para AWS, GCP, Azure y OCI)
  • CloudFormation (incluyendo AWS SAM)
  • Azure Resource Manager (ARM)
  • Serverless framework
  • Helm charts
  • Kubernetes
  • Docker

Algunas características:

  • Más de 1000 políticas integradas cubren mejores prácticas de seguridad y cumplimiento para AWS, Azure y Google Cloud.
    • En AWS hay 177 controles en el marco CKV_AWS. Checkov escanea para cumplimiento con estándares de la industria comunes como
      • el Center for Internet Security (CIS)
      • y Amazon Web Services (AWS) Foundations Benchmark.
  • Detecta credenciales de AWS en user-data de EC2, variables de entorno de Lambda y proveedores de Terraform.
  • Identifica secretos usando expresiones regulares, palabras clave y detección basada en entropía.
  • Plugins para IDEs populares están disponibles (JetBrains, VSCode y Vim). Sin embargo, activar la extensión requiere el envío de un token de API de Bridgecrew único que se puede obtener creando una nueva cuenta de plataforma Bridgecrew.

Puedes crear políticas personalizadas aquí para más información usando Python o YAML.

Por qué usarlo: Incluye 177 controles de AWS incluyendo el Center for Internet Security (CIS) y Amazon Web Services (AWS) Foundations Benchmark, y es capaz de detectar secretos y credenciales de AWS en el código. checkov-1 checkov-2

También puedes visualizar la salida del escaneo de checkov usando la plataforma Bridgecrew (gratis de usar con el plan Community - hasta 50 recursos y proyectos pequeños - aquí)

¿Es popular?: En Github: Watch: 55; Fork: 799; Stars: 5.2k

¿Actualizado recientemente?: Hoy (en el momento en que escribo este post)

URL: https://github.com/bridgecrewio/checkov

Más información: https://www.checkov.io/1.Welcome/Quick%20Start.html

3.2. KICS

Encuentra vulnerabilidades de seguridad, problemas de cumplimiento y configuraciones incorrectas de infraestructura temprano en el ciclo de desarrollo de tu infraestructura como código.

KICS significa Keeping Infrastructure as Code Secure y admite las siguientes soluciones IaC: Terraform, AWS CloudFormation, AWS SAM, AWS CDK, Kubernetes, Docker, Ansible, Helm, Google Deployment Manager, Microsoft ARM, Microsoft Azure Blueprints, OpenAPI 2.0 y 3.0, Pulumi, Crossplane, Knative y Serverless Framework.

KICS es 100% open-source y está escrito en Golang usando Open Policy Agent (OPA) y es posible crear consultas personalizadas para crear reglas personalizadas (usando lenguaje REGO).

Por qué usarlo: Evaluar IaC para detectar vulnerabilidades

kics-1 kics-2

¿Es popular?: En github: Watch: 22; Fork: 224; Stars: 1.4k

URL: https://github.com/Checkmarx/kics

Más información: https://www.kics.io/

3.3. terrascan

Terrascan es un analizador de código estático para Infraestructura como Código. Terrascan te permite:

  • Escanear sin problemas infraestructura como código en busca de configuraciones incorrectas.
  • Monitorear infraestructura en la nube aprovisionada para cambios de configuración que introducen deriva de postura, y habilitar la reversión a una postura segura.
  • Detectar vulnerabilidades de seguridad y violaciones de cumplimiento.
  • Mitigar riesgos antes de aprovisionar infraestructura nativa de la nube.
  • Ofrece flexibilidad para ejecutar localmente o integrar con tu CI\CD.

Características clave

  • Más de 500 políticas para mejores prácticas de seguridad
  • Escaneo de Terraform (HCL2), AWS CloudFormation Templates (CFT), Azure Resource Manager (ARM), Kubernetes (JSON/YAML), Helm v3, y Kustomize y Dockerfiles
  • Se integra con escaneo de vulnerabilidades de imágenes de docker para registros de contenedores de AWS, Azure, GCP y Harbor.

Las políticas de Terrascan están escritas usando el lenguaje de políticas Rego, y puedes crear tus propias políticas

Por qué usarlo: Más de 300 reglas de AWS y soporte para CloudFormation y Terraform.

terrascan-1

¿Es popular?: En Github: Watch: 70; Fork: 459; Stars: 3.9k

¿Actualizado recientemente?: Hoy (en el momento en que escribo este post)

URL: https://github.com/tenable/terrascan

Más información: https://runterrascan.io/docs/

3.4. tfsec

La herramienta open-source tfsec proporciona un análisis de seguridad del código de Terraform y detecta posibles problemas de seguridad basados en las mejores prácticas de AWS.

La herramienta contiene verificaciones para más de 30 recursos de AWS y se puede encontrar aquí: https://aquasecurity.github.io/tfsec/v1.28.1/checks/aws/

tfsec puede aplicar políticas Rego definidas por el usuario. Esta es una característica útil si tu organización necesita implementar políticas de seguridad personalizadas además de evitar otras configuraciones incorrectas y hacer cumplir las pautas de mejores prácticas. Más información aquí.

Algunas características:

  • Verifica configuraciones incorrectas en todos los principales (y algunos menores) proveedores de nube
  • Cientos de reglas integradas
  • Aplica (y embellece) políticas Rego definidas por el usuario
  • Muy rápido, capaz de escanear rápidamente repositorios enormes
  • Plugins para IDEs populares disponibles (JetBrains, VSCode y Vim)

Por qué usarlo: análisis estático de código para terraform con verificaciones en más de 30 recursos de AWS.

tfsec

Integración con alertas de seguridad de Github:

tfsec-github

¿Es popular?: En Github: Watch: 69; Fork: 485; Stars: 5.6k

¿Actualizado recientemente?: Sí, el mes pasado (1318 commits)

URL: https://github.com/aquasecurity/tfsec

Más información: https://aquasecurity.github.io/tfsec/v1.28.1/

3.5. cfn-nag

La herramienta cfn-nag busca patrones en plantillas de CloudFormation que pueden indicar infraestructura insegura. Buscará:

  • Reglas de IAM que son demasiado permisivas (comodines)
  • Reglas de grupos de seguridad que son demasiado permisivas (comodines)
  • Registros de acceso que no están habilitados
  • Cifrado que no está habilitado
  • Literales de contraseña

La herramienta contiene más de 150 controles de AWS.

Por qué usarlo: Analizar plantillas de CloudFormation para detectar infraestructura insegura cfn-nag

¿Es popular?: En Github: Watch 35; Fork 199; Stars 1.1k

¿Actualizado recientemente? No. Último commit el 7 de junio de 2022. En total, 664 commits

URL: https://github.com/stelligent/cfn_nag

3.6. Resumen: ¿Qué herramienta debo usar para realizar un análisis estático

  • Código CloudFormation: checkov, KICS terrascan, cfn-nag
  • Código Terraform: checkov, KICS, terrascan o tfsec
  • Integrar con IDE: checkov o tfsec
  • Permitir crear reglas personalizadas: checkov, KICS, terrascan, tfsec

En mi código blog-backend-infrastructure disponible aquí tuve los siguientes errores usando estas herramientas:

  • KICS: 36 (3 high, 20 medium, 13 low)
  • terrascan: 9 (1 high, 7 medium, 1 low)
  • tfsec: N/A (solo código Terraform)
  • cfn-nag: 33

4. Analizar código IaC: Política como Código

Política como código es el uso de código para definir y gestionar reglas y condiciones para asegurar que tu Infraestructura cumpla con eso. Esta es una forma de aplicar gobernanza y cumplimiento preventivos (shift left), validando Infraestructura como código (IaC) contra las mejores prácticas organizacionales para seguridad y cumplimiento.

  • CloudFormation Guard: herramienta de evaluación de política como código de propósito general
  • OPA: motor de políticas de propósito general que habilita la aplicación de políticas unificada y consciente del contexto en toda la pila
  • Regula: evalúa archivos de infraestructura como código para posibles violaciones de seguridad y cumplimiento antes del despliegue.

4.1. CloudFormation Guard

AWS CloudFormation Guard es una herramienta de evaluación de política como código de propósito general open-source. Proporciona a los desarrolladores un lenguaje específico de dominio (DSL) simple de usar, pero poderoso y expresivo para definir políticas y permite a los desarrolladores validar datos estructurados formateados en JSON o YAML con esas políticas.

Compatible: CloudFormation Templates, CloudFormation ChangeSets, Terraform JSON archivos de configuración, configuraciones de Kubernetes y más.

Por qué usarlo: Simple de usar, compatible con CloudFormation, Terraform y configuraciones de kubernetes. cloudformation-guard

¿Es popular?: En Github: Watch: 30; Fork: 145; Stars: 1.1k

¿Actualizado recientemente?: La semana pasada (en el momento en que escribo este post)

URL: https://github.com/aws-cloudformation/cloudformation-guard#installation

Más información: https://docs.aws.amazon.com/cfn-guard/latest/ug/what-is-guard.html

Esta es una herramienta oficial de aws-cloudformation (aunque open-source), pero tienes que crear tus propias reglas. No encontré las “mejores prácticas de seguridad” incluidas en el control de mejores prácticas de AWS de Security Hub como reglas. Sin embargo, tienes aquí algunos ejemplos: https://github.com/aws-cloudformation/cloudformation-guard/tree/main/guard-examples

4.2. Open Policy Agent (OPA)

Open Policy Agent (OPA) es un motor de políticas de propósito general open-source que habilita la aplicación de políticas unificada y consciente del contexto en toda la pila.

El Open Policy Agent es un motor de políticas de propósito general open-source que unifica la aplicación de políticas en la pila. OPA proporciona un lenguaje declarativo de alto nivel (REGO) que te permite especificar políticas como código y APIs simples para delegar la toma de decisiones de políticas de tu software. Puedes usar OPA para hacer cumplir políticas en microservicios, Kubernetes, pipelines de CI/CD, gateways de API y más.

El ecosistema de OPA es enorme aquí, pero en AWS podemos usarlo para analizar nuestro archivo JSON/YAML en CloudFormation o nuestra plantilla de Terraform creando reglas personalizadas para estos lenguajes.

OPA es un proyecto del panorama de Cloud Native Computing Foundation (CNCF).

Por qué usarlo: unificar la aplicación de políticas en toda la pila. Este ejemplo está usando Terraform. Tienes que convertir tu salida de Terraform a archivo JSON y luego analizarlo con reglas de OPA:

opa-1

¿Es popular?: En Github: Watch: 119; Fork: 1.1k; Stars: 7.6k

¿Actualizado recientemente?: Hace 4 días (en el momento en que escribo este post)

URL: https://github.com/open-policy-agent/opa

Más información: https://www.openpolicyagent.org/

Tienes que crear tus propias reglas de OPA con lenguaje REGO (fácil de aprender). Tienes un playground en línea para probar tus políticas REGO aquí

4.3. Regula

Regula es una herramienta que evalúa archivos de infraestructura como código para posibles violaciones de seguridad y cumplimiento de AWS, Azure, Google Cloud y Kubernetes antes del despliegue. Basado en Open Policy Agent (OPA) y escrito en REGO

Regula admite los siguientes tipos de archivos:

  • CloudFormation JSON/YAML templates
  • Código fuente de Terraform (formato .tf o .tf.json)
  • Planes JSON de Terraform
  • Manifiestos YAML de Kubernetes
  • Plantillas JSON de Azure Resource Manager (ARM) (en vista previa)

Esta es la lista de reglas aplicadas (en AWS hay reglas para Terraform y CloudFormation): https://regula.dev/rules.html.

Debes saber que en este momento CloudFormation admite 23 controles, y Terraform 114.

Aquí puedes encontrar más información sobre Escribir reglas personalizadas.

Por qué usarlo: Evaluar IaC para detectar vulnerabilidades regula

¿Es popular?: En github: Watch: 54; Fork: 776; Stars: 5.1k

URL: https://github.com/fugue/regula

Más información: https://regula.dev/

4.4. Resumen: ¿Qué herramienta debo usar para crear mi Política como Código personalizada

  • Solución AWS: CloudFormation Guard, OPA o regula
  • Solución multi-proveedor: OPA o regula (ambos usando lenguaje REGO)

O puedes usar cualquiera de las herramientas en la categoría de análisis estático porque todas ellas te permiten crear reglas personalizadas.

5. Detectar credenciales en código

Estas herramientas se pueden aplicar a cualquier código git:

  • General para repositorio git:
    • git-secrets: Te impide hacer commit de contraseñas y otra información sensible a un repositorio git.
    • gitleaks: una herramienta para detectar y prevenir secretos codificados como contraseñas, claves API y tokens en repositorios git.
  • Específico de código IaC:
    • checkov: una herramienta de análisis de código estático para infraestructura como código (incluyendo secretos)
      • Esta herramienta ya ha sido explicada unas líneas antes, así que puedes obtener la información de allí

5.1. git-secrets

Te impide hacer commit de contraseñas y otra información sensible a un repositorio git.

Por qué usarlo: Encuentra claves api, contraseñas, claves de AWS en el código. git-secrets

¿Es popular?: En Github: Watch: 198; Fork: 1.1k; Stars: 10.8k

¿Actualizado recientemente?: Hoy (en el momento en que escribo este post). Commits en total 110

URL: https://github.com/awslabs/git-secrets

5.2. gitleaks

Gitleaks es una herramienta SAST para detectar y prevenir secretos codificados como contraseñas, claves API y tokens en repositorios git. Gitleaks es una solución todo en uno fácil de usar para detectar secretos, pasados o presentes, en tu código.

Por qué usarlo: Analiza el código de tu infraestructura IaC para detectar configuraciones incorrectas de seguridad y cumplimiento.

gitleaks

¿Es popular?: En Github: Watch: 142; Fork: 1.1k; Stars: 11.5k

¿Actualizado recientemente?: Hoy (en el momento en que escribo este post). Commits en total 896

URL: https://github.com/zricethezav/gitleaks

6. Otros

  • Cumplimiento
    • cloud custodian: motor de reglas para definir políticas para habilitar una infraestructura en la nube bien gestionada, segura y optimizada en costos
  • Costo de plantillas de Terraform:
    • Infracost: estimar costo para Terraform antes de desplegar

6.1. Cloud custodian

Cloud Custodian es un motor de reglas para definir políticas para habilitar una infraestructura en la nube bien gestionada, segura y optimizada en costos en formato yaml.

Custodian se puede usar para gestionar entornos de AWS, Azure y GCP asegurando cumplimiento en tiempo real con políticas de seguridad (como requisitos de cifrado y acceso), políticas de etiquetas y gestión de costos a través de la recolección de basura de recursos no utilizados y gestión de recursos fuera de horario.

Las políticas de Custodian están escritas en archivos de configuración YAML simples que permiten a los usuarios especificar políticas en un tipo de recurso (EC2, ASG, Redshift, CosmosDB, PubSub Topic) y se construyen a partir de un vocabulario de filtros y acciones.

Puedes aplicar a AWS aquí

Por qué usarlo: gestiona tus reglas con políticas yaml

cloudcustodian

¿Es popular?: En Github: Watch 1.3k; Starts 4.6k

¿Actualizado recientemente?: Sí. El último commit fue hace 3 días (4054 commits en total)

URL: https://github.com/cloud-custodian/cloud-custodian/

Muchos ejemplos disponibles en https://www.cloudcustodian.io/docs/aws/examples/index.html

6.2. Infracost

Infracost muestra estimaciones de costos en la nube para Terraform. Permite a DevOps, SRE e ingenieros ver un desglose de costos y comprender los costos antes de realizar cambios, ya sea en la terminal o en pull requests.

Infracost también tiene muchas integraciones de CI/CD para que puedas publicar fácilmente estimaciones de costos en pull requests. Esto proporciona a tu equipo una red de seguridad ya que las personas pueden discutir los costos como parte del flujo de trabajo.

El CDK para Terraform también es compatible ya que puede generar configuración de Terraform

Por qué usarlo: Si estás usando Terraform, esta herramienta estimará el costo antes de desplegar. ¿Quieres probar? (imágenes tomadas de github) Salida de infracost breakdown infracost

infracost diff muestra la diferencia de costos mensuales entre el estado actual y el planificado infracost-2

Publica estimaciones de costos en pull requests

infracost-cicd-cost

¿Es popular?: En Github: Watch: 63; Fork: 418; Stars: 8.5k

¿Actualizado recientemente?: Sí. Último commit ayer (en el momento en que escribo este post). En total 2196 commits

URL: https://github.com/infracost/infracost

Más información: https://www.infracost.io/docs/

7. Próximos pasos

Este artículo está licenciado bajo CC BY 4.0 por el autor.