Comment puis-je résoudre les erreurs « Invalid permissions on Lambda function » provenant d’API REST API Gateway ?

Lecture de 5 minute(s)
0

Lorsque j'invoque ma fonction AWS Lambda à partir d’une API REST Amazon API Gateway, le message d'erreur « Invalid permissions on Lambda function » s'affiche.

Brève description

Si votre API REST API Gateway invoque votre fonction Lambda sans autorisation d'appel Lambda, API Gateway renvoie l'erreur « Invalid permissions on Lambda function ».

Si vous configurez la journalisation CloudWatch pour votre API REST, API Gateway journalise également l'un des messages d'erreur suivants :

  • Exemple de message d'erreur CloudWatch pour les API REST avec une intégration Lambda :
    « Sending request to
    Execution failed due to configuration error: Invalid permissions on Lambda function
    Method completed with status: 500 »
  • Exemple de message d'erreur CloudWatch pour les API REST avec un mécanisme d’autorisation Lambda :
    « Sending request to
    Execution failed due to configuration error: Invalid permissions on Lambda function
    Execution failed due to configuration error: Authorizer error »

Résolution

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

Pour plus d'informations, consultez le modèle d'autorisations API Gateway pour invoquer une API.

Remarque : Si vous recevez une erreur 401 Unauthorized, suivez les instructions de la section Pourquoi est-ce que je reçois des erreurs « 401 Unauthorized » d'API Gateway après avoir créé un mécanisme d’autorisation Lambda ?

Résoudre les erreurs d'intégration Lambda

Ajouter l’autorisation d’appel Lambda à une API REST avec une intégration Lambda via la console API Gateway

Effectuez les opérations suivantes :

  1. Ouvrez la console API Gateway.
  2. Dans le panneau API, choisissez le nom de votre API REST.
  3. Dans le panneau Ressources, choisissez la méthode HTTP configurée.
  4. Dans le panneau Exécution de la méthode, sélectionnez Requête d'intégration.
  5. Pour Type d'intégration, sélectionnez Fonction Lambda.
  6. Développez la liste déroulante Région Lambda. Puis, choisissez la région AWS dans laquelle se trouve votre fonction Lambda.
  7. Sélectionnez la liste déroulante Fonction Lambda. Puis, choisissez le nom de votre fonction Lambda.
  8. Sélectionnez Enregistrer. Puis, sélectionnez Déployer l’API pour ajouter l'autorisation d'appel Lambda à votre API.

Ajouter l'autorisation d'appel Lambda à une API REST avec une intégration Lambda via un modèle CloudFormation

Ajoutez l'extrait de code suivant à votre modèle 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"

Remarque : Remplacez ce qui suit dans le modèle précédent :
La valeur de FunctionName par le nom de votre fonction Lambda
La valeur de SourceArn par l’Amazon Resource Name (ARN) source de votre API
Dans la valeur de SourceArn, example-api-id par votre apiID

Pour plus d'informations sur la procédure de déclaration de diverses parties du modèle CloudFormation, consultez la section Extraits de modèle.

Ajouter l'autorisation d'appel Lambda à une API REST avec une intégration Lambda via l'AWS CLI

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez la version la plus récente de l’AWS CLI.

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

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

Remarque : Remplacez ce qui suit dans la commande précédente :
La valeur de function-name par le nom de votre fonction Lambda
Remplacez la valeur de source-arn par l'ARN source de votre API
La valeur de statement-id par un identifiant d’instruction qui identifie de manière unique l’instruction

Résoudre les erreurs du mécanisme d’autorisation Lambda

Ajouter l’autorisation d’appel Lambda à une API REST avec un mécanisme d’autorisation Lambda via la console API Gateway

Effectuez les opérations suivantes :

  1. Créez un rôle IAM pour API Gateway qui autorise l'action lambda:InvokeFunction. Puis, copiez l'ARN du rôle IAM dans votre presse-papiers.
  2. Ouvrez la console API Gateway.
  3. Dans le panneau API, choisissez le nom de votre API REST.
  4. Dans le panneau Mécanismes d’autorisation, choisissez l'autorisateur Lambda configuré. Puis, cliquez sur Modifier.
  5. Pour Rôle d’appel Lambda, saisissez l'ARN du rôle IAM que vous avez copié dans votre presse-papiers.
  6. Sélectionnez Enregistrer. Puis, sélectionnez Déployer l'API.

Ajouter l'autorisation d'appel Lambda à une API REST avec un mécanisme d’autorisation Lambda via un modèle CloudFormation

Ajoutez l'extrait de code suivant à votre modèle 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"

Remarque : Remplacez ce qui suit dans le modèle précédent :
La valeur de FunctionName par le nom de votre fonction Lambda
Dans la valeur de SourceArn, example-api-id par votre apiID
Dans la valeur de SourceArn, example-auth-id par l’authorizerId du mécanisme d’autorisation Lambda

Ajouter l'autorisation d'appel Lambda à une API REST à l'aide d'un mécanisme d’autorisation Lambda via l'AWS CLI

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

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

Remarque : Remplacez ce qui suit dans la commande précédente :
La valeur de function-name par le nom de votre fonction Lambda
Remplacez la valeur de source-arn par l'ARN source de votre API
La valeur de statement-id par un identifiant d’instruction qui identifie de manière unique l’instruction

Informations connexes

Utilisation de stratégies IAM basées sur les ressources dans Lambda

Comment puis-je configurer la journalisation des accès pour API Gateway ?