¿Cómo puedo resolver los errores de «permisos no válidos en la función de Lambda» de las API de REST de API Gateway?
Cuando invoco mi función de AWS Lambda desde una API de REST de Amazon API Gateway aparece el error «Permisos no válidos en la función de Lambda».
Descripción corta
Si la API de REST de API Gateway invoca la función de Lambda sin el permiso de invocación de Lambda, API Gateway devuelve el error «Permisos no válidos en la función de Lambda».
Si configura el registro de CloudWatch para su API de REST, API Gateway también registrará uno de los siguientes mensajes de error:
- Ejemplo de mensaje de error de CloudWatch para las API de REST con integración de Lambda
«Envío de la solicitud a https://lambda.region.amazonaws.com/2015-03-31/functions/arn:aws:lambda:region:############:function:example-function/invocations
La ejecución falló debido a un error de configuración: Permisos no válidos en la función de Lambda
Método completado con el estado: 500» - Ejemplo de mensaje de error de CloudWatch para las API de REST con un autorizador de Lambda:
«Envío de la solicitud a https://lambda.region.amazonaws.com/2015-03-31/functions/arn:aws:lambda:region:############:function:example-function/invocations
La ejecución falló debido a un error de configuración: Permisos no válidos en la función de Lambda
La ejecución falló debido a un error de configuración: Error de autorizador»
Resolución
Para resolver estos errores, lleve a cabo una de las siguientes acciones:
- Añada un permiso de invocación de Lambda basado en recursos a su API de REST mediante uno de los métodos descritos en este artículo.
- Configure un rol de ejecución de AWS Identity and Access Management (IAM) que otorgue permiso a su API de REST para invocar su función.
Para obtener más información, consulte Modelo de permisos de API Gateway para invocar una API.
**Nota:**Si recibe un error no autorizado 401, siga las instrucciones de ¿Por qué aparecen errores no autorizados 401 de API Gateway después de crear un autorizador de Lambda?
Resolver errores de integración de Lambda
Añadir un permiso de invocación de Lambda a una API de REST con una integración de Lambda mediante la consola de API Gateway
Siga estos pasos:
- Abra la consola de API Gateway.
- En el panel de las API, elija el nombre de su API de REST.
- En el panel Recursos, elija el método HTTP configurado.
- En el panel Ejecución de método, seleccione Solicitud de integración.
- Para el Tipo de integración, elija Función de Lambda.
- Abra la lista desplegable Región de Lambda. A continuación, elija la región de AWS en la que se encuentra su función de Lambda.
- Abra la lista desplegable Función de Lambda. A continuación, elija el nombre de su función de Lambda.
- Seleccione Guardar. A continuación, seleccione Desplegar la API para añadir el permiso de invocación de Lambda a su API.
Añadir un permiso de invocación de Lambda a una API de REST con una integración de Lambda mediante una plantilla de CloudFormation
Añada el siguiente fragmento de código a su plantilla de CloudFormation:
SampleApiPermission: Type: AWS::Lambda::Permission Properties: Action: "lambda:InvokeFunction" FunctionName: !Ref ExampleLambdaFunction Principal: "apigateway.amazonaws.com" SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:example-api-id/*/example-method/example-resource"
Nota: Sustituya lo siguiente en la plantilla anterior:
El valor FunctionName por el nombre de su función de Lambda.
El valor SourceArn por el nombre de recurso de Amazon (ARN) de origen de su API.
En el valor sourceARN, example-api-id con su apiID.
Para obtener más información sobre cómo declarar varias partes de la plantilla de CloudFormation, consulte Fragmentos de plantilla.
Añadir un permiso de invocación de Lambda a una API de REST con una integración de Lambda mediante la AWS CLI
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Ejecute el siguiente comando add-permission de AWS CLI:
aws lambda add-permission \ --function-name "$FUNCTION_NAME" \ --source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/*/$METHOD/$RESOURCE" \ --principal apigateway.amazonaws.com \ --statement-id $STATEMENT_ID \ --action lambda:InvokeFunction
Nota: Sustituya lo siguiente en el comando anterior:
El valor function-name por el nombre de su función de Lambda.
El valor source-arn por el ARN de origen de su API.
El valor statement-id por un identificador de instrucción que identifique de forma exclusiva la instrucción.
Resolver errores del autorizador de Lambda
Añadir un permiso de invocación de Lambda a una API de REST con un autorizador de Lambda mediante la consola de API Gateway
Siga estos pasos:
- Cree un rol de IAM para API Gateway que permita la acción lambda:InvokeFunction. A continuación, copie el ARN del rol de IAM al portapapeles.
- Abra la consola de API Gateway.
- En el panel de las API, elija el nombre de su API de REST.
- En el panel Autorizadores, elija el autorizador de Lambda configurado. A continuación, seleccione Editar.
- Para Rol de invocación de Lambda, introduzca el ARN del rol de IAM que copió al portapapeles.
- Seleccione Guardar. A continuación, seleccione Desplegar la API.
Añadir un permiso de invocación de Lambda a una API de REST con un autorizador de Lambda mediante una plantilla de CloudFormation
Añada el siguiente fragmento de código a su plantilla de CloudFormation:
SampleApiAuthPermission: Type: AWS::Lambda::Permission Properties: Action: "lambda:InvokeFunction" FunctionName: !Ref ExampleLambdaFunction Principal: "apigateway.amazonaws.com" SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:example-api-id/authorizers/example-auth-id"
Nota: Sustituya lo siguiente en la plantilla anterior:
El valor FunctionName por el nombre de su función de Lambda.
En el valor sourceArn, example-api-id con su apiID .
En el valor SourceArn, example-auth-id con el valor authorizerId de su autorizador de Lambda.
Añadir un permiso de invocación de Lambda a una API de REST con un autorizador de Lambda mediante la AWS CLI
Ejecute el siguiente comando add-permission de AWS CLI:
aws lambda add-permission \ --function-name "$FUNCTION_NAME" \ --source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/authorizers/$AUTHORIZER_ID" \ --principal apigateway.amazonaws.com \ --statement-id $STATEMENT_ID \ --action lambda:InvokeFunction
Nota: Sustituya lo siguiente en el comando anterior:
El valor function-name por el nombre de su función de Lambda.
El valor source-arn por el ARN de origen de su API.
El valor statement-id por un identificador de instrucción que identifique de forma exclusiva la instrucción.
Información relacionada
Trabajar con políticas de IAM basadas en recursos en Lambda
¿Cómo puedo configurar el registro de acceso para API Gateway?
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 meses
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años