Comment résoudre les erreurs d'autorisation des API HTTP API Gateway avec une intégration AWS Lambda ou un autorisateur Lambda ?

Dernière mise à jour : le 28 mai 2021

Lorsque j'essaie d'appeler ma fonction AWS Lambda avec une API HTTP API Gateway, un message « Internal Server Error » s'affiche. Dans mes Amazon CloudWatch Logs, je vois soit une erreur « n'a pas d'autorisations pour appeler l'intégration » ou « n'a pas d'autorisations pour appeler l'autorisateur ». Qu'est-ce qui est à l'origine de ces erreurs et comment les résoudre ?

Brève description

Si une API HTTP API Gateway essaie d'appeler une fonction Lambda sans l' autorisation d’invoquer Lambda, alors API Gateway renvoie un message d'erreur serveur interne . Si vous avez activé la journalisation CloudWatch pour votre API HTTP, API Gateway enregistre également l'un des messages d'erreur suivants dans vos journaux d'accès :

Message d'erreur CloudWatch pour les API HTTP avec une intégration Lambda

« IntegrationError » : « Le rôle IAM configuré sur l'intégration ou API Gateway n'a pas les autorisations nécessaires pour appeler l'intégration. Vérifiez les autorisations et réessayez.»

Message d'erreur CloudWatch pour les API HTTP avec un autorisateur Lambda

« AuthorizerError » : « Le rôle IAM configuré sur l'autorisateur ou la passerelle API n'a pas les autorisations nécessaires pour appeler l'autorisateur. Vérifiez les autorisations et réessayez.»

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

Ajoutez une autorisation d'appel Lambda basée sur les ressources à votre API HTTP à l'aide de la console API Gateway ou de l' interface de ligne de commande AWS (AWS CLI).

-ou-

Configurez un rôle d'exécution AWS Identity and Access Management (IAM) qui accorde à votre API HTTP l'autorisation d'appeler votre fonction. Pour plus d'informations, consultez Modèle d'autorisations API Gateway pour appeler une API.

Pour plus d'informations sur la résolution des erreurs lors de l'utilisation des intégrations Lambda avec des API HTTP, consultez Résolution des problèmes liés aux intégrations Lambda API HTTP.

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 Lambda, invoquez l'autorisation d'une API HTTP 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 HTTP.

2.    Dans le volet de navigation de gauche, Sélectionnez Intégrations.

3.    Choisissez Gérer l'intégration.

4.    Trouvez le nom de votre intégration Lambda. Ensuite, cliquez sur le bouton Modifier en regard du nom de votre intégration Lambda.

5.    Pour des autorisations Invoke, choisissez Accorder une permission API Gateway pour appeler votre fonction Lambda. -ou- Fournir le rôle IAM ARN que API Gateway peut utiliser pour appeler la fonction Lambda.

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

Pour ajouter l'autorisation Lambda invoke à une API HTTP 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 de nom_fonction par l'ARN 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 "$YOUR_FUNCTION_ARN"   \
--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 une permission Lambda Invoke à une API HTTP avec un autorisateur Lambda à l'aide de la console API Gateway

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

2.    Dans le panneau de navigation de gauche, choisissez Autorisateurs.

3.    Choisissez Gérer les autorisations.

4.    Trouvez le nom de votre autorisateur Lambda. Ensuite, cliquez sur le bouton Modifier à côté du nom de votre autorisateur Lambda.

5.    Pour des autorisation Invoke, choisissez Accorder automatiquement l'autorisation API Gateway pour appeler votre fonction Lambda. -ou- Fournir le rôle IAM ARN que API Gateway peut utiliser pour appeler la fonction Lambda.

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

Pour ajouter Lambda, invoquez l'autorisation d'une API HTTP 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 de nom_fonction par l'ARN 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 "$YOUR_FUNCTION_ARN"   \
--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 ?