Autorización Personalizada con AWS Lambda y Custom Authorizer
Clase 16 de 24 • Curso Avanzado de Serverless Framework en AWS
Resumen
¿Cómo configurar un Custom Authorizer en AWS?
Integrar sistemas de autorización personalizados en tus aplicaciones en la nube puede ofrecer ventajas significativas en términos de seguridad y flexibilidad. En esta guía, exploraremos cómo implementar un Custom Authorizer en AWS utilizando Lambda y Serverless Framework, permitiéndote crear tus propias reglas de negocio para controlar el acceso a tus recursos.
¿Qué es un Custom Authorizer?
Un Custom Authorizer es una función Lambda que verifica y decide si una petición a una API Gateway debería ser autorizada. Puedes definir tu lógica personalizada para validar tokens y comprobar identidades, proporcionando un nivel de seguridad adaptado a tus necesidades. Esto es especialmente útil si buscas un sistema que no se limite a las API Keys o JWTs predeterminados.
¿Cómo crear la lógica de autorización?
La lógica de un Custom Authorizer en AWS se basa en extraer y validar un token de autorización desde la petición entrante. Aquí está el fragmento esencial de código utilizado para este proceso:
const handler = async (event) => {
const secret = 'NuestraVariableSecreta'; // sustituir por el método de obtención segura
const currentTime = new Date();
const hour = currentTime.getUTCHours();
const minute = currentTime.getUTCMinutes();
const token = event.authorizationToken;
const validToken = `Bidder ${secret}${hour}${minute}`;
if (token === validToken) {
return {
principalId: 'user',
policyDocument: {
Version: '2012-10-17',
Statement: [{
Action: 'execute-api:Invoke',
Effect: 'Allow',
Resource: '*'
}]
}
};
} else {
throw new Error('Unauthorized');
}
};
export { handler }
¿Cómo integrar un Custom Authorizer en Serverless Framework?
Para configurar el Custom Authorizer en Serverless Framework, debes añadir la función a tu archivo serverless.yaml
:
functions:
authorize:
handler: authorizer.handler
createUser:
handler: users.create
events:
- http:
path: users/create
method: post
authorizer: authorize
¿Cómo proteger una Lambda con un Custom Authorizer?
El próximo paso es asociar tu Custom Authorizer a la función que deseas proteger. Esto se logra especificando el authorizer en el evento de la función en serverless.yaml
. Aquí usamos un sistema de caché para optimizar las llamadas repetidas evitando que una Lambda sea ejecutada excesivamente.
¿Cómo probar la implementación?
Para verificar que tu sistema de autorización se comporta como esperas, realiza una petición POST al endpoint protegido con un cuerpo JSON adecuado. Asegúrate de incluir el token correcto en los headers de la petición:
- Crear una request de prueba en Postman.
- Añadir el header de autorización requerido:
Authorization: Bidder tuSecretoHoraMinuto
. - Verifica que el API Gateway responde correctamente, autorizando o denegando la petición según corresponda.
Recomendaciones adicionales
- Asegúrate de manejar adecuadamente tu secreto y otros datos sensibles.
- Implementa monitoreo y logging para rastrear problemas y accesos no autorizados.
- Considera el uso de parámetros de tiempo más largos o cortos según la sensibilidad de tus datos.
¿Listo para mejorar la seguridad de tus aplicaciones? ¡Explora la creación de tus propios Custom Authorizers y adapta las reglas de negocio a tus necesidades específicas!