Al usar AWS re:Post, aceptas las AWS re:Post Términos de uso

¿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?

6 minutos de lectura
0

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:

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:

  1. Abra la consola de API Gateway.
  2. En el panel de las API, elija el nombre de su API de REST.
  3. En el panel Recursos, elija el método HTTP configurado.
  4. En el panel Ejecución de método, seleccione Solicitud de integración.
  5. Para el Tipo de integración, elija Función de Lambda.
  6. 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.
  7. Abra la lista desplegable Función de Lambda. A continuación, elija el nombre de su función de Lambda.
  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:

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:

  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. Abra la consola de API Gateway.
  3. En el panel de las API, elija el nombre de su API de REST.
  4. En el panel Autorizadores, elija el autorizador de Lambda configurado. A continuación, seleccione Editar.
  5. Para Rol de invocación de Lambda, introduzca el ARN del rol de IAM que copió al portapapeles.
  6. 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?