Comment résoudre les erreurs « Autorisations non valides sur la fonction Lambda » à partir des API REST API Gateway ?

Date de la dernière mise à jour : 26/05/2021

Lorsque j'appelle ma fonction AWS Lambda à l'aide d'une API REST d'Amazon API Gateway, j'obtiens une erreur « Autorisations non valides sur la fonction Lambda ». Quelle est la cause de l'erreur et comment la corriger ?

Brève description

Si votre API REST API Gateway essaie d'appeler votre fonction Lambda sans autorisation invoquer Lambda, alors API Gateway renvoie l'erreur suivante : « Autorisations non valides sur la fonction Lambda »

Si vous configurez la journalisation CloudWatch pour votre API REST, API Gateway enregistre également l'un des messages d'erreur suivants dans vos journaux d'exécution.

Exemple de message d'erreur CloudWatch pour les API REST avec une intégration Lambda

« Envoi de la requête à https://lambda.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xx:function:xxx/invocations
Échec de l'exécution en raison d'une erreur de configuration : autorisations non valides sur la fonction Lambda
Méthode complétée avec l'état : 500"

Exemple de message d'erreur CloudWatch pour les API REST avec un autorisateur Lambda

« Envoi de la demande à https://lambda.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xxx:function:xx/invocations
Échec de l'exécution en raison d'une erreur de configuration : autorisations non valides sur la fonction Lambda
L'exécution a échoué en raison d'une erreur de configuration : Erreur d'autorisation »

Pour résoudre ces erreurs, effectuez l'une des opérations suivantes :

Ajoutez une autorisation Lambda invoke basée sur les ressources à votre API REST en utilisant l'une des méthodes décrites dans cet article.

-ou-

Configurez un rôle d'exécution AWS Identity and Access Management (IAM) qui accorde à votre API REST l'autorisation d'appeler votre fonction.

Pour plus d'informations, consultez Modèle d'autorisations API Gateway pour appeler une API.

Solution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'interface de ligne de commande AWS CLI.

Pour ajouter une permission Invoke à une API REST avec une intégration Lambda à l'aide de la console API Gateway

1.    Dans la console API Gateway, dans le volet API, choisissez le nom de votre API REST.

2.    Dans le volet Ressources , choisissez la méthode HTTP configurée.

3.    Dans le volet Execution de la méthode, choisissez Demande d’intégration .

4.    Pour Type d’intégration, choisissez Fonction Lambda Function.

5.    Développez la liste déroulante Région Lambda . Ensuite, choisissez la région AWS dans laquelle se trouve votre fonction Lambda.

6.    Choisissez la liste déroulante Fonction Lambda . Ensuite, choisissez le nom de votre fonction Lambda.

7.    Une invite apparaît qui vous donne la possibilité d' ajouter une autorisation à la fonction Lambda. Choisissez OK.

8.    Choisissez Enregistrer. Ensuite, choisissez Déployer l'API pour ajouter l'autorisation Lambda invoke à votre API.

Pour ajouter une permission Lambda Invoke à une API REST avec une intégration Lambda à l'aide d'un modèle CloudFormation

Ajoutez l'extrait de code suivant à votre modèle CloudFormation :

Important : Remplacez <api-id> par votre apiID. Remplacez la valeur FunctionName par le nom de votre fonction Lambda. Remplacez la valeur SourceArn par le nom Amazon Resource Name (ARN) source de votre 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>"

Pour plus d'informations sur la façon de déclarer différentes parties de modèle CloudFormation, reportez-vous à la section Extraits de modèle.

Pour ajouter une permission Lambda Invoke à une API REST avec une intégration Lambda à l'aide de l'interface de ligne de commande AWS

Exécutez la commande Add-permission AWS CLI suivante :

Important : Remplacez la valeur function-name par le nom de votre fonction Lambda. Remplacez la valeur source-arn par l' ARN source de votre API. Remplacez la valeur statement-id par un identificateur d'instruction qui différencie l'instruction des autres dans la même stratégie.

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

Pour ajouter Lambda, invoquez l'autorisation d'une API REST avec un autorisateur Lambda à l'aide de la console API Gateway

1.    Créez un rôle IAM pour API Gateway qui autorise l'action « LAMBDA:InvokeFunction » . Ensuite, copiez le rôle IAM ARN dans votre presse-papiers.

2.    Dans la console API Gateway, dans le volet API, choisissez le nom de votre API REST.

3.    Dans le volet Autorisateurs, choisissez l'autorisation Lambda configuré. Ensuite, choisissez Modifier.

4.    Pour Lambda Invoke Role, entrez l'ARN du rôle IAM que vous avez copié dans votre Presse-papiers.

5.    Choisissez Enregistrer. Ensuite, choisissez Déployer l'API.

Pour ajouter une autorisation Lambda Invoke à une API REST avec un autorisateur Lambda à l'aide d'un modèle CloudFormation

Ajoutez l'extrait de code suivant à votre modèle CloudFormation :

Important : Remplacez <api-id> par votre apiID. Remplacez la valeur FunctionName par le nom de votre fonction Lambda. Remplacez <auth-id> par l'AutorizerId de votre autorisateur 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>"

Pour plus d'informations sur la façon de déclarer différentes parties de modèle CloudFormation, reportez-vous à la section Extraits de modèle.

Pour ajouter une autorisation Lambda Invoke à une API REST avec un autorisateur Lambda à l'aide de l'interface de ligne de commande AWS

Exécutez la commande add-permission AWS CLI suivante :

Important : Remplacez la valeur function-name par le nom de votre fonction Lambda. Remplacez la valeur source-arn par l' ARN source de votre API. Remplacez la valeur statement-id par un identificateur d'instruction qui différencie l'instruction des autres dans la même stratégie.

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

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?