Validación de Webhooks de GitHub con AWS Secrets Manager

Clase 24 de 30Curso de Ciberseguridad para Desarrollo Web

Resumen

¿Cómo validar la integridad de los datos con webhooks?

En un mundo donde la seguridad de los datos es esencial, entender cómo validar la integridad de datos con webhooks se vuelve crucial. GitHub proporciona una capa extra de seguridad mediante el envío de un cuerpo encriptado junto con un encabezado. Pero, ¿cómo podemos asegurarnos de que esta comunicación es segura y no ha sido manipulada?

¿Qué es un webhook en GitHub?

Un webhook en GitHub es esencialmente un mensajero que se activa cada vez que ocurre un evento en un repositorio, como un push o un pull request. Permiten a las aplicaciones externas estar al tanto de estos eventos. Sin embargo, para asegurar que la comunicación sea segura, GitHub envía un header con el cuerpo encriptado. Este header se valida usando una clave secreta, garantizando que la información no ha sido alterada.

¿Cómo crear y configurar un secreto en AWS?

Para empezar, la creación de un secreto es el primer paso en la validación de un webhook. Sigue estos pasos para configurarlo:

  1. Crea un secreto utilizando caracteres especiales, números y otros caracteres para hacerlo más seguro.
  2. Copia este secreto en AWS y actualiza el webhook. Aunque no podrás visualizar este secreto más adelante, siempre podrás cambiarlo si es necesario.
  3. Navega a la consola de secrets, secrets manager en AWS y añade un nuevo secreto.
  4. Utilízalo como clave de encriptación.

Una práctica recomendada es hacer que los secretos sean rotativos, especialmente en aplicaciones más grandes, para aumentar la seguridad.

¿Cómo integrar secretos con Terraform?

Terraform te permite definir la infraestructura necesaria y realizar cambios de manera efectiva. Para integrar tus secretos con Terraform, sigue estos pasos:

  • Copia la política necesaria para acceder al secreto, asegurándote de que se represente correctamente en la estructura de tu infraestructura.
  • Crea una nueva política dentro de tu carpeta policies, permitiendo obtener el valor del secreto.
  • Añade el 'ARN' del recurso a la política para asegurar su acceso.

¿Cómo validar el cuerpo con Go?

Para validar el cuerpo recibido a través del webhook, se utiliza la librería nativa de Go, HMAC. Aquí se sigue un procedimiento de pasos:

  1. Crear una función para calcular la firma (calculate signature) utilizando la librería HMAC.
  2. Añadir otro método para validar la solicitud de GitHub (validate githubrequest) que analiza el encabezado de la firma y compara los valores de manera segura.

¿Qué hacer al desplegar con Terraform y aplicar cambios?

Después de realizar las validaciones necesarias, compila los Lambdas y despliega la infraestructura con Terraform. Aquí un resumen del flujo:

  • Compila y sube el código a S3.
  • Utiliza Terraform plan para prever los cambios que se realizarán.
  • Aplica los cambios con Terraform apply y confirma el despliegue.

¿Cómo verificar la integridad de los datos?

Tras implementar todo, un paso crucial es verificar que la integración funciona correctamente. Realiza un commit en tu repositorio, observa la consola de GitHub y asegúrate de que el webhook funcione según lo esperado. Un marcador verde indica que la validación fue exitosa.

Este proceso no solo valida los datos que provienen de GitHub, sino que también te permite extender el proyecto con más integraciones y métricas valiosas. Con esta base sólida, puedes avanzar hacia un entendimiento más profundo y controles de seguridad avanzados.