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

Lecture de 4 minute(s)
0

Lorsque j'essaie d'appeler ma fonction AWS Lambda avec une API HTTP API Gateway, un message « Internal Server Error » s'affiche. Dans mes journaux Amazon CloudWatch, je vois le message d'erreur « ne dispose pas des autorisations nécessaires pour appeler l'intégration » ou « ne dispose pas des autorisations nécessaires pour appeler l'autorisateur ».

Brève description

Si une API HTTP de l'API Gateway essaie d'appeler une fonction Lambda sans autorisation d'appel Lambda, alors l’API Gateway renvoie un message « Erreur interne du serveur ». 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 :

  • Pour les API HTTP avec intégration Lambda : « integrationError » : « Le rôle IAM configuré sur l'intégration ou sur API Gateway n'est pas autorisé à appeler l'intégration. Vérifiez les autorisations et réessayez. »
  • Pour les API HTTP dotées d'un autorisateur Lambda : « authorizerError » : « Le rôle IAM configuré sur l'autorisateur ou la passerelle API n'est pas autorisé à appeler l'autorisateur. Vérifiez les autorisations et réessayez. »

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

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

-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 le modèle d'autorisations API Gateway pour appeler une API.

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

Résolution

Remarque : Si des erreurs surviennent lors de l’exécution des commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d’AWS CLI.

Utilisez la console API Gateway pour ajouter l'autorisation d'appel Lambda à une API HTTP avec une intégration Lambda

  1. Ouvrez la console API Gateway.
  2. Dans le volet APIs, choisissez le nom de votre API HTTP.
  3. Dans le volet de navigation de gauche, choisissez Intégrations.
  4. Choisissez Gérer l'intégration.
  5. Trouvez le nom de votre intégration Lambda, puis cliquez sur le bouton Modifier à côté du nom de votre intégration Lambda.
  6. Pour les autorisations d'appel, choisissez Accorder l'autorisation à API Gateway pour appeler votre fonction Lambda.
    Vous pouvez également fournir l'ARN du rôle IAM qu'API Gateway peut utiliser pour appeler la fonction Lambda.
  7. Choisissez Enregistrer, puis Déployer l'API pour ajouter l'autorisation d'appel Lambda à votre API.

Utiliser l'interface de ligne de commande AWS pour ajouter l'autorisation d'appel Lambda à une API HTTP avec une intégration Lambda

Exécutez la commande d'interface de ligne de commande AWS add-permission suivante :

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

Remarque : Remplacez la valeur du nom de la 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 identifiant d'instruction qui différencie l'instruction des autres instructions relevant de la même politique.

Utilisez la console API Gateway pour ajouter l'autorisation d'appel Lambda à une API HTTP avec un autorisateur Lambda

  1. Ouvrez la console API Gateway.
  2. Dans le volet APIs, choisissez le nom de votre API HTTP.
  3. Dans le volet de navigation de gauche, choisissez Autorisation.
  4. Choisissez Gérer l'autorisation.
  5. Trouvez le nom de votre autorisateur Lambda, puis cliquez sur le bouton Modifier à côté du nom de votre autorisateur Lambda.
  6. Pour les autorisations d'appel, choisissez Accorder automatiquement l'autorisation à API Gateway pour appeler votre fonction Lambda.
    Vous pouvez également fournir l'ARN du rôle IAM qu'API Gateway peut utiliser pour appeler la fonction Lambda.
  7. Choisissez Enregistrer, puis Déployer l'API pour ajouter l'autorisation d'appel Lambda à votre API.

Utiliser l'interface de ligne de commande AWS pour ajouter une autorisation d'appel Lambda à une API HTTP à l'aide d'un autorisateur Lambda

Exécutez la commande d'interface de ligne de commande AWS add-permission suivante :

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

Remarque : Remplacez la valeur du nom de la 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 identifiant d'instruction qui différencie l'instruction des autres instructions relevant de la même politique.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an