Estoy intentando llamar a una función Lambda a través de AWS API Gateway. Cuando menciono el tipo de autenticación NINGUNO, funciona bien, pero la API se vuelve pública y cualquier persona con url puede acceder a mi API. Para hacer que la llamada a la API sea segura, estoy usando el tipo de autenticación AWS_IAM y también adjunto la política AmazonAPIGatewayInvokeFullAccess a mi usuario, pero obtengo este error:
{ message: "Missing Authentication Token"}
No sé lo que me estoy perdiendo aquí.
Respuestas:
Creo que está intentando acceder directamente al enlace de la API, esto no funcionará porque la API está protegida mediante el rol de IAM y debe proporcionar autenticación de AWS, es decir, clave de acceso y clave secreta.
Utilice la extensión Postman de Chrome para probar su API: http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html
fuente
He perdido algo de tiempo por una tonta razón:
Cuando crea una etapa, el enlace que se muestra no contiene la parte de recursos de la URL:
URL de la API: https://1111.execute-api.us-east-1.amazonaws.com/dev
API + URL DE RECURSOS https://1111.execute-api.us-east-1.amazonaws.com/dev/get-list
El / lista de obtener faltaba
Y, por supuesto, debe verificar que la configuración del método tenga este aspecto:
fuente
Acabo de tener el mismo problema y parece que también muestra este mensaje si no se puede encontrar el recurso.
En mi caso, había actualizado la API, pero olvidé volver a implementarla. El problema se resolvió después de implementar la API actualizada en mi escenario.
fuente
Parece que (a partir de abril de 2019) AWS API Gateway lanza esta excepción por una variedad de razones, principalmente cuando llega a un punto final al que API Gateway no puede alcanzar, ya sea porque no está implementado, o también en casos en los que ese El método HTTP no es compatible.
Deseo que la puerta de enlace envíe códigos de error más apropiados, como HTTP 405 Method not supported o HTTP 404 not found, en lugar de un HTTP 403 Forbidden genérico.
fuente
Asegúrese de hacer clic en el recurso específico primero en el árbol de Etapas, ya que se completará una URL con la ruta completa al recurso (en lugar de solo la ruta raíz):
Para otras causas, consulte http://www.awslessons.com/2017/aws-api-gateway-missing-authentication-token/
fuente
Asegúrese de crear Resource y luego crear un método dentro de él. Ese fue el problema para mí. Gracias
fuente
Encontré esto en los documentos:
Si se utilizara la autorización AWS_IAM, firmaría la solicitud utilizando los protocolos Signature Version 4.
Solicitud de firma con Signature Version 4
También puede generar un SDK para su API.
Cómo generar un SDK para una API en API Gateway
Una vez que haya generado el SDK para la plataforma de su elección, el paso 6 menciona que si está usando credenciales de AWS, se firmará la solicitud a la API:
Para inicializar el SDK generado por API Gateway con credenciales de AWS, utilice un código similar al siguiente. Si usa credenciales de AWS, se firmarán todas las solicitudes a la API. Esto significa que debe establecer los encabezados de aceptación de CORS adecuados para cada solicitud:
fuente
Si habilita la autenticación de AWS_IAM, debe firmar su solicitud con las credenciales de AWS utilizando AWS Signature Version 4 .
Nota : iniciar sesión en la consola de AWS no firma automáticamente las solicitudes de su navegador a su API.
fuente
a veces este mensaje se muestra cuando llamas a una API incorrecta
verifique su punto final de api
fuente
Intento todo lo anterior, si siguió todos los pasos de las respuestas anteriores y no resuelve el problema, entonces:
Creo que por eso, cuando creo el "MÉTODO DE SOLICITUD" (ver paso 2 cómo ir a este menú), en "Autorización" selecciono "AWS_IAM" después de probar la API, en la opción de prueba aws, lo intento en "cartero "entonces entiendo que en" SOLICITUD DE MÉTODO ", en" Autorización ", debo seleccionar" ninguna "
Lo cambio a ninguno, pero creo que AWS, necesito implementarlo nuevamente, como explico
fuente
Este error se produce principalmente cuando llama al punto final de la API incorrecto. Verifique el punto final de la API al que está llamando y verifique esto en la puerta de enlace de la API.
fuente
Si está utilizando una API con punto final de tipo PRIVADO , asegúrese de:
Está invocando la API desde su cuenta de AWS (ejemplo: desde una instancia EC2 creada en su cuenta)
Coloque la credencial necesaria (claves de acceso y secretas) en la instancia EC2 en la ruta ~ / .aws / credentials (esta ruta es para instancias de Linux) Si el usuario de IAM usa MFA, el valor aws_session_token también será requerido.
Utilice una URL basada en vpce (punto final de vpc). Ejemplo: curl https://vpce-0c0471b7test-jkznizi5.execute-api.us-east-1.vpce.amazonaws.com/dev/api/v1/status
Su instancia EC2 tiene un grupo de seguridad que permite el tráfico saliente a otro grupo de seguridad propiedad del vpce como:
Su grupo de seguridad vpce permite el tráfico entrante de otro grupo de seguridad (sg anterior de la instancia ec2) propiedad de la instancia EC2 como:
Ver: https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html
fuente
En primer lugar, compruebe si la API que creó en la función lamda está registrada con su proyecto de AWS o no. Para eso, vaya a la puerta de enlace API en su consola de AWS. Si no está registrado, regístrelo. Esta es la principal causa de este problema.
Incluso puede ver en su archivo aws.export.js , que hay rutas correspondientes a su API
['/items']
.Su API debe estar presente allí; de lo contrario, no agregará el token de seguridad a las solicitudes. Simplemente regístrelo en la lógica de la nube de su proyecto en su consola para esto.
Si está allí, utilice la solución mencionada anteriormente
http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html
fuente
Para el registro, si no usarías credenciales, este error también se muestra cuando configuras el validador de solicitudes en tu método POST / PUT para "validar cuerpo, parámetros de cadena de consulta y ENCABEZADOS", o la otra opción "validar cadena de consulta parámetros y ENCABEZADOS ".... en ese caso buscará las credenciales en el encabezado y rechazará la solicitud. En resumen, si no tiene la intención de enviar credenciales y desea mantenerlo abierto, no debe configurar esa opción en el validador de solicitudes (configúrelo en NINGUNO o para validar el cuerpo)
fuente
Contribuir:
Tuve un error similar porque mi respuesta de devolución no contenía el 'cuerpo' como este:
return {'statusCode': 200, 'body': "debe contener la etiqueta del cuerpo si la reemplazas no funcionará"}
fuente
Tuve el mismo problema que resolví de la siguiente manera:
Prueba del método GET
fuente
Si configura una función de IAM para su servidor que tiene el permiso AmazonAPIGatewayInvokeFullAccess, aún debe pasar encabezados en cada solicitud. Puede hacer esto en Python con la biblioteca aws-request-auth así:
fuente
En mi caso fue una estupidez. Me he acostumbrado a que las nuevas entidades se crean usando POST y fallaba con el "Token de autenticación perdido". Me he perdido eso por alguna razón, se definió como PUT, que funciona bien.
fuente