Comment puis-je résoudre les erreurs « Invalid permissions on Lambda function » provenant d’API REST API Gateway ?
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 :
- Ajoutez une autorisation d'appel Lambda basée sur les ressources à votre API REST via l'une des méthodes décrites dans cet article.
- Configurez un rôle d'exécution AWS Identity and Access Management (IAM) qui accorde à votre API REST l'autorisation d'invoquer votre fonction.
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 :
- Ouvrez la console API Gateway.
- Dans le panneau API, choisissez le nom de votre API REST.
- Dans le panneau Ressources, choisissez la méthode HTTP configurée.
- Dans le panneau Exécution de la méthode, sélectionnez Requête d'intégration.
- Pour Type d'intégration, sélectionnez Fonction Lambda.
- Développez la liste déroulante Région Lambda. Puis, choisissez la région AWS dans laquelle se trouve votre fonction Lambda.
- Sélectionnez la liste déroulante Fonction Lambda. Puis, choisissez le nom de votre fonction Lambda.
- 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 :
- 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.
- Ouvrez la console API Gateway.
- Dans le panneau API, choisissez le nom de votre API REST.
- Dans le panneau Mécanismes d’autorisation, choisissez l'autorisateur Lambda configuré. Puis, cliquez sur Modifier.
- Pour Rôle d’appel Lambda, saisissez l'ARN du rôle IAM que vous avez copié dans votre presse-papiers.
- 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 ?
Vidéos associées
Contenus pertinents
- demandé il y a un anlg...
- demandé il y a un anlg...
- demandé il y a 2 moislg...
- demandé il y a 6 moislg...
- demandé il y a 8 moislg...
- AWS OFFICIELA mis à jour il y a 4 mois
- AWS OFFICIELA mis à jour il y a 3 ans
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 3 ans