Contenido del curso
Funciona en mi local
Introducción a DevSecOps
Seguridad en la arquitectura
- 11

Arquitectura AWS para métricas de Git
02:23 min - 12

Configuración de AWS CLI para Terraform
09:34 min - 13

Terraform IAM: roles y policies automáticos
17:44 min - 14

Modificando main.tf para enlazar módulos IAM en Terraform
06:02 min - 15

Bucket S3 para Lambdas con Terraform
16:44 min - 16

Configuración de Postgres RDS con VPC y seguridad
14:10 min - 17

Lambdas dentro de uma VPC com Terraform
12:29 min - 18

Cómo configurar API Gateway para Lambdas
05:41 min
Evitando vulnerabilidades en el código
- 19

Configuración completa de Auth0 para tokens
07:13 min - 20

Authorizer Lambda con Auth0 y JWT
16:55 min - 21

Conecta Go a Postgres usando AWS Secrets
13:34 min - 22

Conexión segura de Lambdas a Secrets con VPC
11:27 min - 23

Validación de webhooks desde GitHub con user-agent
12:08 min - 24

Cómo validar integridad de webhooks con HMAC
14:32 min
Controles de seguridad sobre datos
Monitoring y alertas
CORS y cierre
Recibir webhooks de GitHub con Go y Ngrok
Resumen
Configurar webhooks de GitHub con Go te permite recibir eventos en tiempo real cada vez que alguien hace push a tu repositorio. Aprenderás a montar una API en Go con Mux Router, exponerla públicamente con Ngrok y conectarla a GitHub para capturar el payload del último commit.
Este flujo es útil si construyes herramientas de tracking, auditoría o automatizaciones sobre tu repo, y los conceptos aplican más allá de Go: son transversales a cualquier lenguaje.
¿Cómo se inicializa un proyecto en Go con Mux Router?
Lo primero es crear la base del proyecto y declarar el módulo con sus dependencias.
El flujo que seguimos en la clase fue directo:
- Crear la carpeta
github-trackerpara alojar el código [00:08]. - Ejecutar
go mod init github-trackerpara generar el archivogo.modcon las dependencias [00:35]. - Crear
main.godentro del paquetemaincon la función principal donde vive la lógica [00:48]. - Inicializar el router con Mux Router para construir la API [01:00].
Si no tienes la dependencia instalada, usa go get con el path de Gorilla Mux. Esto la deja registrada en tu sistema, pero no necesariamente en el proyecto.
¿Qué hace go mod vendor? Trae las dependencias declaradas en
go.moda una carpeta local llamadavendor, para que vivan dentro del proyecto y no dependan de tu instalación global de Go.
Después de instalar Mux, ejecutamos go mod vendor y luego go mod tidy para sincronizar todo correctamente [01:30].
¿Cómo se construye un handler POST en Go para recibir webhooks?
El handler es la función que define qué pasa cuando alguien llama a un endpoint. En este caso, creamos uno llamado postHandler que escucha en la ruta /hello.
En Go, un handler de API REST recibe dos parámetros obligatorios: un writer y un request. La lógica fue así [02:20]:
- Imprimir un mensaje de confirmación tipo
received POST request. - Cerrar el
bodycuando termine la ejecución del módulo. - Leer el contenido del request con
io.ReadAll, ya que llega serializado en bytes. - Validar errores y fallar rápido si algo sale mal, una práctica esperada en Go.
- Imprimir el body como string para inspeccionar lo que envía GitHub.
En el router, registramos el handler con HandleFunc y especificamos Methods("POST") para limitarlo solo a peticiones POST [03:30].
¿Cómo se levanta el servidor en el puerto 8080?
Usamos la librería nativa http de Go con ListenAndServe(":8080", router). Antes imprimimos un log tipo server listening on port 8080 y validamos errores. Con go run main.go, el servidor queda escuchando peticiones locales [04:10].
¿Cómo exponer tu servidor local con Ngrok para recibir webhooks de GitHub?
GitHub necesita una URL pública para enviarte eventos, y tu localhost:8080 no lo es. Aquí entra Ngrok, una herramienta que crea un túnel público hacia tu puerto local.
El proceso de configuración es sencillo:
- Instalar Ngrok según tu sistema operativo desde su página oficial.
- Loguearte y copiar el comando de configuración con tu authtoken.
- Pegarlo en tu terminal para vincular Ngrok a tu cuenta.
- Ejecutar
ngrok http 8080en una terminal aparte mientras el servidor de Go corre en otra [05:30].
Ngrok te devuelve una URL pública que apunta directo a tu puerto 8080. Esa URL es la que vas a registrar en GitHub.
¿Qué es un webhook? Es una notificación HTTP automática que un servicio envía a una URL cuando ocurre un evento. GitHub puede mandarte un POST cada vez que alguien hace push, abre un pull request o crea un issue.
¿Cómo configurar el webhook en el repositorio de GitHub?
En el repositorio donde quieres escuchar eventos, ve a Settings y luego a Webhooks. Al añadir uno nuevo, GitHub te pedirá el código de two factor authentication si lo tienes activo, lo cual deberías [06:20].
Los campos clave son:
- Payload URL: pega aquí la URL pública de Ngrok seguida de
/hello. - Content type: selecciona
application/json, que es lo que vamos a parsear. - Secret: lo dejamos vacío por ahora.
- SSL verification: actívala, es más segura.
- Events: selecciona solo push, para recibir eventos cuando se sube un commit.
Una vez añadido, GitHub queda escuchando y enviará un ping inicial para validar la conexión.
¿Qué información trae el payload de un webhook push de GitHub?
Para probarlo, hicimos un push real al repositorio. Antes, agregamos un .gitignore para excluir la carpeta vendor y archivos como .DS_Store, evitando subir las dependencias y solo versionando go.mod, go.sum y main.go [08:15].
Al ejecutar git push, el servidor en Go imprimió un payload enorme con todos los datos del evento. En la interfaz de GitHub, dentro de Recent deliveries, puedes ver cada entrega de forma legible.
El campo más útil para este proyecto es head_commit, que contiene:
- ID único del commit.
- Timestamp del momento en que se subió.
- Author con nombre y email.
- Files modificados, añadidos o eliminados.
- Message del commit.
¿Por qué usar Ngrok solo en desarrollo? Porque expone tu máquina local a internet temporalmente. No necesitas mantener el puerto abierto siempre; en Settings puedes cambiar la URL del webhook cuantas veces quieras mientras desarrollas.
Con esto ya tienes un canal funcional entre GitHub y tu API en Go. El siguiente paso natural es persistir cada webhook en una base de datos para construir un historial de commits consultable. ¿Qué evento de GitHub te gustaría trackear primero en tu proyecto?