Autorización de IAM para AWS Lambda/Rest API detrás de la configuración y prueba de API Gateway
Hay varias formas de configurar la autorización para la función lambda que proporciona API Gateway:
- Autorización de IAM: puede autorizarse a sí mismo o a su colega que tenga acceso a AWS.
- Autorización de la función Lambda: puede crear una función lambda adicional que valide las credenciales (como la clave API proporcionada por usted)
- Cognito: puede autorizar a los usuarios externos que están registrados en su aplicación mediante el servicio AWS Cognito.
Aquí solo veremos cómo podemos configurar la “autorización de IAM” para la función Lambda, que podría ser solo una función simple o una API REST completa detrás de la puerta de enlace API.
Así que empecemos…
Cree una función de Lambda de muestra. Supongo que es bastante fácil de crear. Estoy usando Nodejs aquí para la configuración.
Cree una API REST de muestra en la puerta de enlace API:
Cree un método ‘cualquiera’ y asigne la función lambda que acabamos de crear (la había llamado prueba).
Paso 4: En el menú desplegable Acción, elija “Implementar”. Proporcione un nombre artístico (por ejemplo, dev) y presione “Implementar”
Ahora probemos si funciona como se esperaba (simplemente vaya al escenario y copie la URL en el navegador): ¡Sí lo hace!
Ahora asegurémoslo con el autorizador de IAM
Primero debemos crear un usuario que tendrá acceso solo para invocar esta API.
1. Crear un usuario:
2. Adjunte una política existente: AmazonAPIGatewayInvokeFullAccess
Guarde su “Id. de clave de acceso” y “Clave de acceso secreta”, ya que las necesitará para invocar la API.
Ahora regresemos a API Gateway y vayamos a Recursos -> CUALQUIERA -> “Ejecución de método” y configure “Autorización” como “AWS IAM”.
No olvide implementar cómo lo hizo anteriormente en la misma etapa.
¡Todo listo!
Ahora tenemos que probarlo.
1. Postman
Sin pasar las credenciales, debería ver el error:
Ahora configuremos las credenciales de IAM: clave de acceso y clave secreta.
En Postman, elija “AWS signatura” como tipo de autorización:
Y pega tus credenciales y también la región correcta:
Presiona el botón Send:
Ahora veamos si podemos invocar este AIP programáticamente. Aquí estoy usando Nodejs:
Deberá instalar la biblioteca desde el administrador de paquetes NPM, es decir, “aws-api-gateway-client” para que este código funcione.
var apigClientFactory = require("aws-api-gateway-client").default; var apigClient = apigClientFactory.newClient({ invokeUrl: "https://u9nzanwqc2.execute-api.us-east-2.amazonaws.com/dev", region: "us-east-2", accessKey: "AKIAZ***********UGK", secretKey: "PI1***************************b3SVT", }); const params = {}; const queryParams = {}; const body = {}; apigClient .invokeApi( params, "/", "get", { queryParams: queryParams, }, body ) .then(function (result) { console.log(result.data); }) .catch(function (result) { console.log(result); });
Debería ver el resultado en la consola: { statusCode: 200, body: ‘”¡Hola de Lambda!”‘ }
Espero que esto funcione para ti también.
¡Feliz aprendizaje! ¡Feliz codificación!
Si le interesa, puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre Laravel: