This content originally appeared on DEV Community and was authored by Pablo Gonzalez Robles
Hola comunidad,
Hace unos días tuve la oportunidad de participar como speaker en el AWS Community Day Panamá 2025, donde presenté sobre CloudFormation Hooks. Luego de salir del evento, me puse a pensar que el contenido preparador sería bueno compartirlo al resto de la comunidad AWS de habla en español.
Si trabajas con infraestructura como código y te interesa asegurar que tus despliegues cumplan con políticas personalizadas antes de crear recursos, este artículo es para ti. En este post estaré revisando:
- Qué son los CloudFormation Hooks
- Diferencias entre Lambda Hooks y Guard Hooks
- Cómo implementarlos
- Recursos esenciales que debes desplegar
- Y un demo con capturas (al final del post)
¿Qué son los CloudFormation Hooks?
Los CloudFormation Hooks permite validar las propiedades de los recursos antes de que sean creados o modificados. Esto te da la oportunidad de aprobar o rechazar de manera automatizada dichos cambios según tus propios lineamientos de seguridad.
Imagina que alguien del equipo intenta desplegar un bucket de S3 sin cifrado o sin bloquear el acceso público… Con un hook, puedes evitar que eso pase antes de que se cree el recurso.
Los hooks son un mecanismo de control preventivo, lo que significa que nos permiten aplicar seguridad desde etapas tempranas del ciclo de vida de la infraestructura —es decir, “mover la seguridad a la izquierda”. Esto trae beneficios significativos para la organización, ya que al evitar que se desplieguen recursos que luego tengamos que remediar, con lo cual evitamos retrabajos y evitamos costos innecesarios.
Tipos de Hooks (2025): Lambda vs. Guard
AWS ofrece dos tipos de hooks para CloudFormation:
Lambda Hook
Este tipo de hook usa una función Lambda como backend de validación. Al ser lambda que es un tipo de recurso conocido por casi todos los que trabajamos en la nube, sabemos cómo configurarla y si necesitas realizar algún cambio, puedes ajustar fácilmente. Además puedes usar el lenguaje de programación de preferencia, puedes realizar multiples validaciones lo cual se entenderá fácilmente en tu script. Por último pero no menos importante, te puedes integrar fácilmente con otros servicios de AWS y poder extraer datos necesarios para realizar validaciones complejas. Sin embargo, debes considerar que a medida que creces con los hooks, puede que tengas que mantener docenas de lambdas y sus respectivos roles.
Guard Hook
Este tipo de hook usa el lenguaje declarativo CloudFormation Guard, pensado para escribir reglas más fácilmente y de forma más declarativa. Es ideal para validaciones sencillas como validación de nombramientos, estado de propiedades (enabled / disabled), etc
Desde mi experiencia, recomiendo comenzar directamente con los Lambda Hooks, ya que con el tiempo los lineamientos de seguridad tienden a volverse más numerosos y complejos. En esos casos, usar lenguajes como Python o JavaScript facilita mucho entender y mantener cada validación que se desea aplicar. Además, al tratarse de funciones Lambda, es posible crear pruebas unitarias de forma sencilla para validar la lógica de negocio antes de desplegar una nueva versión del hook, lo que mejora la calidad y confiabilidad del proceso.
¿Cómo funcionan los hooks?
Directamente del blog post de AWS que fue publicado no hace mucho (abril 2025)donde se valida el runtime de una función lambda, te lo explico en palabras sencillas:
Un desarrollador intenta desplegar una plantilla de CloudFormation que incluye una o varias funciones Lambda.
CloudFormation activa un Lambda Hook, que está configurado para revisar cada uno de los recurso de tipo Lambda::Function.
La lógica de evaluación corre dentro de la lambda y se realiza los llamados a otros recursos de AWS en caso de ser necesario
La función retorna el resultado de la evaluación en el campo “hookStatus”. SUCCESS si el recurso cumple o FAILED si el recurso está en incumplimiento.
Si el hook responde con FAILED, se detiene el despliegue del stack. Por el contrario, CloudFormation continúa con la creación o actualización de dicho recurso.
¿Dónde puedo ver un ejemplo real?
He subido un demo completo a GitHub, con ejemplos de:
- Lambda Hook que impide crear buckets de S3 sin bloqueo de acceso público
- Guard Hook que impide crear buckets de S3 sin bloqueo de acceso público (a modo demostrativo ya que no es mi favorito)
Repositorio:
https://github.com/pangoro24/awsdaypa2025-sec
Capturas del Demo
Abajo te dejo algunas capturas donde podrás ver los hooks en acción.
Escenario: El bucket a desplegar no tiene la propiedad “PublicAccessBlockConfiguration” debidamente configurada, y por ende, el resultado de la evaluación es que el recurso no cumple y por ende, el stack falla su tarea de despliegue.
Por el otro lado, si el bucket tiene la propiedad “PublicAccessBlockConfiguration” debidamente configurada, el resultado de la lambda es SUCCESS y por ende, se le permite a cloudformation desplegar el recurso.
Conclusión
CloudFormation Hooks son una herramienta increíble si estás buscando aplicar control proactivo sobre tus despliegues. Dale una mirada al repositorio y empieza a experimentar.
¿Ya usaste CloudFormation Hooks en tu organización? ¿Te gustaría que hablemos más de los hooks en otro post u otro tema de seguridad en la nube de la AWS?, cuéntamelo en los comentarios.
Gracias por leer.
Referencias:
https://docs.aws.amazon.com/cloudformation-cli/latest/hooks-userguide/lambda-hooks-create-lambda-function.html
https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-lambdahook.html
https://aws.amazon.com/es/blogs/devops/validate-your-lambda-runtime-with-cloudformation-lambda-hooks/
This content originally appeared on DEV Community and was authored by Pablo Gonzalez Robles