Passer au contenu

Comment résoudre les erreurs « HTTP 403 Forbidden » lorsque j'utilise un mécanisme d’autorisation Lambda avec une API REST API Gateway ?

Lecture de 6 minute(s)
0

Après avoir créé un mécanisme d'autorisation AWS Lambda pour mon API REST Amazon API Gateway, je reçois des erreurs « 403 Forbidden » pour les appels d'API.

Brève description

Remarque : Cette solution remédie aux 403 erreurs liées aux mécanismes d’autorisation Lambda configurés pour une API REST uniquement. Pour en savoir plus sur la résolution d’autres types d’erreurs 403, consultez la section Comment puis-je résoudre les erreurs HTTP 403 renvoyées par API Gateway ?

Des erreurs « 403 Forbidden » peuvent survenir pour les raisons suivantes :

Si votre appel d'API comporte un jeton ou une source d'identité manquant, nul ou non validé, le message d'erreur « 401 Unauthorized » s'affiche. Pour plus d'informations, consultez la section Pourquoi des erreurs « 401 Unauthorized » d'API Gateway s’affichent-elles une fois que j’ai créé un mécanisme d’autorisation Lambda ?

Résolution

Confirmer l’origine de l’erreur

Si cela n'est pas déjà fait, activez Amazon CloudWatch Logs pour votre API REST API Gateway. Si vous modifiez la configuration du mécanisme d'autorisation, redéployez l'API.

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.

Consulter le message du journal des erreurs

Dans la réponse d'API Gateway, recherchez un message du journal des erreurs dans les exemples suivants.

Exemple de message de journal des erreurs pour les fonctions du mécanisme d'autorisation Lambda qui renvoient un document de politique IAM avec un refus explicite :

{    "message": "User is not authorized to access this resource with an explicit deny"}

Exemple de message de journal des erreurs pour les API REST avec une politique de ressources associée qui refuse implicitement l'accès à l'appelant :

{    "message": "User is not authorized to access this resource"}

Exemple de message de journal des erreurs pour les API REST avec une politique de ressources associée qui refuse explicitement l'accès à l'appelant :

{    "message": "User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn> with an explicit deny"}

Remarque : Pour plus d'informations sur les API API Gateway contrôlées par une politique IAM, consultez les tableaux de résultats d’évaluation des politiques.

Consulter les journaux d'API Gateway

Pour consulter le flux de travail d'autorisation, consultez les journaux d'exécution d'API Gateway dans CloudWatch Logs. Notez la sortie du mécanisme d’autorisation Lambda et le résultat de l'évaluation de la politique de ressources API Gateway. Recherchez un message d'erreur de journal dans les exemples suivants.

Exemple de message de journal des erreurs si un jeton requis est manquant ou ne correspond pas à la validation du jeton :

Extended Request Id: EXAMPLEabcIdGxzR=Unauthorized request: request-id

Remarque : La valeur de ID de la demande étendue dans vos journaux est différente car elle est générée de manière aléatoire.

Exemple de message de journal des erreurs si un mécanisme d’autorisation Lambda renvoie une politique qui refuse l'accès :

Sending request to https://lambda.region.amazonaws.com/2015-03-31/functions/lambda-authorizer-arn/invocationsAuthorizer result body before parsing:  {  
  "principalId": "user",  
  "policyDocument": {  
    "Version": "2012-10-17",  
    "Statement": [  
      {  
        "Action": "execute-api:Invoke",  
        "Effect": "Deny",  
        "Resource": "resource-arn"  
      }  
    ]  
  }  
}  
Using valid authorizer policy for principal: principal  
Successfully completed authorizer execution  
The client is not authorized to perform this operation.

Remarque : La politique renvoyée dépend de votre mécanisme d’autorisation Lambda. Si le paramètre resource-arn de la politique renvoyée n'inclut pas la ressource demandeuse, la politique refuse implicitement les requêtes.

Exemple de message de journal des erreurs si la politique de ressources API Gateway refuse la demande :

Extended Request Id: EXAMPLE1ABdGeZB=ExplicitDenyException User: anonymous is not authorized to perform: execute-api:Invoke on resource: api-resource-arn with an explicit deny: request-id

Résoudre les erreurs « not authorized to access this resource » du mécanisme d’autorisation Lambda

Vous pouvez recevoir des erreurs « not authorized to access this resource » par intermittence en raison de la mise en cache des politiques. Pour confirmer que la mise en cache des autorisations est activée, vérifiez la configuration de votre mécanisme d’autorisation Lambda dans la console API Gateway. Puis, effectuez l'une des actions suivantes.

  • Pour un test ponctuel, exécutez la commande de l'interface de ligne de commande AWS flush-stage-authorizers-cache. Lorsque les entrées du cache du mécanisme d’autorisation sont vidées, appelez à nouveau votre API.
  • Désactivez la mise en cache des politiques, redéployez votre API pour valider les modifications, puis appelez à nouveau votre API.
    Remarque : Si la mise en cache des politiques est désactivée pour un mécanisme d’autorisation basé sur des paramètres de requête, API Gateway ne valide pas les appels vers votre API avant d'invoquer la fonction du mécanisme d'autorisation Lambda.
  • Pour modifier la clé de cache du mécanisme d’autorisation, mettez à jour le nom d'en-tête spécifié dans Source de jeton (pour les autorisations basées sur des jetons) ou Sources d’identité (pour les autorisations basées sur des paramètres de requête). Redéployez votre API pour valider les modifications. Puis, appelez à nouveau votre API avec l'en-tête de jeton ou les sources d'identité nouvellement configurés.

Pour déterminer pourquoi votre mécanisme d’autorisation refuse explicitement l'accès à l'appelant, consultez le code de votre fonction de mécanisme d'autorisation Lambda. Si vous déterminez que le problème est dû à la mise en cache, mettez à jour le code pour autoriser l'accès à l'appelant.

Pour des instructions, consultez la section Pourquoi ma ressource proxy API Gateway dotée d'un mécanisme d’autorisation Lambda dont la mise en cache est activée renvoie-t-elle des erreurs HTTP 403 « User is not authorized to access this resource » ?

Résoudre les erreurs « not authorized to perform: execute-api:Invoke »

Pour déterminer si votre politique de ressources d'API n'est pas valide ou si elle refuse explicitement l'accès à vos appels, consultez votre politique de ressources d'API. Vous pouvez consulter vos journaux d'exécution d’API pour obtenir le résultat de la réponse pour la politique de ressources. Pour plus d'informations, consultez la section Présentation du langage de la politique d'accès pour Amazon API Gateway et Mécanisme d'autorisation et politique de ressources Lambda.

Informations connexes

Utiliser les mécanismes d’autorisation API Gateway Lambda

Contrôler et gérer l'accès aux API REST dans API Gateway