¿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 con una API de REST de Amazon API Gateway aparece el error «Permisos no válidos en la función de Lambda». ¿Cuál es la causa del error y cómo lo soluciono?
Descripción breve
Si la API de REST de API Gateway intenta invocar la función de Lambda sin el permiso de invocación de Lambda, entonces API Gateway devuelve el siguiente 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.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xx:function:xxx/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.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xxx:function:xx/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.
-o-
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é me aparecen errores no autorizados 401 de API Gateway después de crear un autorizador de Lambda?
- Si recibe errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.
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
1. En la consola de API Gateway, en el panel de API, elija el nombre de su API de REST.
2. En el panel Recursos, elija el método HTTP configurado.
3. En el panel Ejecución de método, seleccione Solicitud de integración.
4. Para el Tipo de integración, elija Función de Lambda.
5. 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.
6. Abra la lista desplegable Función de Lambda. A continuación, elija el nombre de su función de Lambda.
7. Aparece un mensaje que le da la opción de Añadir permiso a la función de Lambda. Elija Aceptar.
8. 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:
Importante: Reemplace <api-id> por su apiID. Sustituya el valor FunctionName por el nombre de su función de Lambda. Reemplace el valor SourceArn por el nombre de recurso de Amazon (ARN) de origen de su API.
SampleApiPermission: Type: AWS::Lambda::Permission Properties: Action: "lambda:InvokeFunction" FunctionName: !Ref MyLambdaFnA1 Principal: "apigateway.amazonaws.com" SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:<api-id>/*/<method>/<resource>"
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
Ejecute el siguiente comando add-permission de AWS CLI:
Importante: Sustituya el valor function-name por el nombre de su función de Lambda. Reemplace el valor source-arn por el ARN de origen de su API. Reemplace el valor statement-id por un identificador de instrucción que la diferencie de otras de la misma política.
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
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
1. 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.
2. En la consola de API Gateway, en el panel de API, elija el nombre de su API de REST.
3. En el panel Autorizadores, elija el autorizador de Lambda configurado. A continuación, seleccione Editar.
4. Para Rol de invocación de Lambda, introduzca el ARN del rol de IAM que copió al portapapeles.
5. 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:
Importante: Reemplace <api-id> por su apiID. Sustituya el valor FunctionName por el nombre de su función de Lambda. Reemplace <auth-id> por el authorizerId de su autorizador de Lambda.
SampleApiAuthPermission: Type: AWS::Lambda::Permission Properties: Action: "lambda:InvokeFunction" FunctionName: !Ref MyLambdaFnA1 Principal: "apigateway.amazonaws.com" SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:<api-id>/authorizers/<auth-id>"
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 un autorizador de Lambda mediante la AWS CLI
Ejecute el siguiente comando add-permission de AWS CLI:
Importante: Sustituya el valor function-name por el nombre de su función de Lambda. Reemplace el valor source-arn por el ARN de origen de su API. Reemplace el valor statement-id por un identificador de instrucción que la diferencie de otras de la misma política.
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
Información relacionada
Uso de políticas basadas en recursos para Lambda
¿Cómo puedo configurar el registro de acceso para API Gateway?
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años