Comment résoudre les erreurs « Invalid permissions on Lambda function » que je reçois à partir des API REST API Gateway ?
Je souhaite résoudre l’erreur « Invalid permissions on Lambda function » lorsque j’invoque ma fonction AWS Lambda à partir d’une API REST Amazon API Gateway.
Brève description
Lorsque votre API REST API Gateway appelle votre fonction Lambda sans autorisation, le message d'erreur « Invalid permissions on Lambda function » s'affiche.
Si vous configurez la journalisation CloudWatch pour votre API REST, API Gateway journalise également le message d'erreur suivant pour les API REST avec une intégration Lambda :
« Sending request to https://lambda.region.amazonaws.com/2015-03-31/functions/arn:aws:lambda:region:############:function:example-function/invocations
Execution failed due to configuration error: Invalid permissions on Lambda function
Method completed with status: 500 ».
Pour les API REST dotées d'un mécanisme d’autorisation Lambda, le message d'erreur suivant s'affiche :
« Sending request to https://lambda.region.amazonaws.com/2015-03-31/functions/arn:aws:lambda:region:############:function:example-function/invocations
Execution failed due to configuration error: Invalid permissions on Lambda function
Execution failed due to configuration error: Authorizer error ».
Pour résoudre ce problème, vous devez ajouter l'autorisation Invoquer de Lambda à votre API REST.
Remarque : Si vous recevez une erreur « 401 Unauthorized », consultez la section Pourquoi est-ce que je reçois des erreurs « 401 Unauthorized » API Gateway après avoir créé un mécanisme d’autorisation Lambda ?
Résolution
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 bien la version la plus récente de l'AWS CLI.
Ajouter une autorisation Invoquer de Lambda à une API REST avec une intégration Lambda
Vous pouvez utiliser la console API Gateway, un modèle AWS CloudFormation ou l'AWS CLI pour ajouter l'autorisation Invoquer.
Remarque : Vous pouvez également obtenir le message d’erreur « Execution failed due to configuration error: Invalid permissions on Lambda function Method completed with status: 500 » dans les scénarios suivants :
- Vous essayez d'invoquer API Gateway depuis la console de test API Gateway.
- Vous invoquez l'API Gateway à partir d'une étape différente de celle que vous avez nommée dans l'URL d'invocation.
Pour éviter ce problème, utilisez un caractère générique (*) pour le nom de l’étape dans votre modèle CloudFormation et dans la commande AWS CLI.
Utiliser la console API Gateway
Procédez comme suit :
- Ouvrez la console API Gateway.
- Dans le volet de navigation, sélectionnez API, puis votre API REST.
- Choisissez Ressources, puis sélectionnez la méthode HTTP.
- Choisissez Exécution de la méthode, puis sélectionnez Demande d'intégration.
- Dans 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.
- Choisissez la liste déroulante Fonction Lambda, puis sélectionnez votre fonction Lambda.
- Sélectionnez Enregistrer.
- Sélectionnez Déployer l'API.
Utiliser 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 FunctionName par le nom de votre fonction Lambda, SourceArn par l’Amazon Resource Name (ARN) et example-api-id par l’ID de votre API.
Pour plus d'informations, consultez la section Extraits de modèles CloudFormation.
Utiliser l’interface de ligne de commande AWS
Exécutez la commande 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 FUNCITON_NAME par le nom de votre fonction Lambda, l'exemple d'ARN source par l'ARN de votre API et STATEMENT_ID par un identifiant d'instruction qui identifie l'instruction de manière unique.
Pour accorder une autorisation uniquement pour une étape spécifique, exécutez la commande suivante :
--source-arn "arn:aws:execute-api:API_GW_REGION:YOUR_ACCOUNT:API_GW_ID/STAGE_NAME/METHOD/RESOURCE"
Remarque : Remplacez l'exemple d'ARN source par l'ARN de votre API et STAGE_NAME par le nom de votre étape.
Ajouter une autorisation d'invocation Lambda à une API REST avec un mécanisme d’autorisation Lambda
Vous pouvez utiliser la console API Gateway, un modèle CloudFormation ou une commande de l'AWS CLI pour ajouter l'autorisation Invoquer.
Utiliser la console API Gateway
Procédez comme suit :
- Créez un rôle IAM pour API Gateway, puis créez une politique qui autorise l'action lambda:InvokeFunction.
Remarque : Notez l'ARN du rôle IAM à utiliser ultérieurement. Pour un exemple de politique, consultez la section Modèle d'autorisations API Gateway pour invoquer une API. - Ouvrez la console API Gateway.
- Dans le volet de navigation, sélectionnez API, puis votre API REST.
- Choisissez Mécanismes d’autorisation, puis sélectionnez le mécanisme d'autorisation Lambda.
- Sélectionnez Modifier.
- Dans Rôle Invoquer de Lambda, saisissez l'ARN du rôle IAM.
- Sélectionnez Enregistrer.
- Sélectionnez Déployer l'API.
Utiliser 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 FunctionName par le nom de votre fonction Lambda, example-api-id par l’ID de votre API et example-auth-id par l’ID de votre mécanisme d’autorisation Lambda.
Utiliser l’interface de ligne de commande AWS
Exécutez la commande 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 FUNCITON_NAME par le nom de votre fonction Lambda, l'exemple d'ARN source par l'ARN de votre API et STATEMENT_ID par un identifiant d'instruction qui identifie l'instruction de manière unique.
Informations connexes
Utilisation de politiques IAM basées sur les ressources dans Lambda
Comment configurer la journalisation des accès pour API Gateway ?
- Balises
- Amazon API Gateway
- Langue
- Français
Vidéos associées


Contenus pertinents
- demandé il y a 4 mois
- demandé il y a 2 ans
- demandé il y a 2 ans
- demandé il y a un an