Comment résoudre les erreurs HTTP 403 Forbidden (Accès interdit) lors de l'utilisation d'un mécanisme d'autorisation Lambda avec une API REST API Gateway ?

Date de la dernière mise à jour : 14/05/2020

Les appels vers mon API REST Amazon API Gateway renvoient des erreurs 403 Forbidden (Accès interdit) après la création d'un mécanisme d'autorisation Lambda. Comment puis-je remédier à cela ?

Brève description

Remarque : API Gateway peut renvoyer des erreurs 403 Forbidden (Accès interdit) pour diverses raisons. Cet article traite uniquement des erreurs 403 liées aux mécanismes d'autorisation Lambda configurés pour une API REST.

Lorsqu'une API REST API Gateway avec un mécanisme d'autorisation Lambda renvoie une erreur 403, c'est généralement pour l'une des raisons suivantes :

Solution

Suivez ces étapes de dépannage pour vous aider à déterminer la cause de l'erreur et la résoudre.

Déterminer la cause de l'erreur

1.    Passez en revue le message d'erreur dans la réponse d'API Gateway.

Si l'appel vers votre API contenait un jeton ou des sources d'identité non valides, vous voyez un message d'erreur semblable à ce qui suit :

{
    errorMessage: Unauthorized
}

Si la fonction du mécanisme d'autorisation Lambda a renvoyé un document de stratégie IAM avec un refus explicite, vous voyez un message d'erreur semblable à ce qui suit :

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

Si votre API dispose d'une stratégie de ressources attachée qui refuse implicitement ou explicitement l'accès à l'appelant, vous voyez un message d'erreur semblable à ce qui suit :

{
 Message: "User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn>"
}

2.    Consultez les journaux d'exécution d'API Gateway dans CloudWatch pour consulter le flux de travail d'autorisation. Vous pouvez voir la sortie du mécanisme d'autorisation Lambda et le résultat de l'évaluation de la stratégie de ressources d'API Gateway.

Remarque : si vous n'avez pas déjà activé la journalisation API Gateway dans Amazon CloudWatch Logs, regardez Comment activer CloudWatch Logs pour le dépannage d'une API REST API Gateway ou API WebSocket ?

Lorsqu'un jeton obligatoire est manquant ou ne correspond pas à la validation du jeton, le mécanisme d'autorisation Lambda n'est pas appelé et vous voyez des messages de journal semblables à ce qui suit :

Extended Request Id: MY92nHDwwwIdGxzR=
Unauthorized request: <request-id>

Remarque : l'ID de demande étendue est généré de façon aléatoire. La valeur de l'ID dans vos journaux sera différente.

Lorsque le mécanisme d'autorisation Lambda renvoie une stratégie qui refuse l'accès, les messages des journaux sont semblables à ceci :

Sending request to https://lambda.<region>.amazonaws.com/2015-03-31/functions/<lambda-authorizer-arn>/invocations
Authorizer 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 stratégie renvoyée dépend de votre mécanisme d'autorisation Lambda.

Lorsque la stratégie de ressources API Gateway refuse la demande, les messages de journal sont semblables à ceci :

Extended Request Id: MY-BIVb4GEdGeZB=
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 « Non autorisé »

1.    Vérifiez la configuration de votre mécanisme d'autorisation Lambda dans la console API Gateway pour déterminer quels éléments doivent être inclus dans les appels envoyés à votre API. Pour plus d'informations, consultez Données d'entrée d'un mécanisme d'autorisation Amazon API Gateway Lambda.

Remarque : si vous modifiez la configuration du mécanisme d'autorisation Lambda, veillez à redéployer votre API pour valider les modifications.

2.    Appelez à nouveau votre API. Veillez à inclure le jeton configuré ou les sources d'identité que vous avez confirmées dans la console à l'étape précédente.

Pour plus d'informations, consultez Pourquoi est-ce que je reçois des erreurs 401 (Non autorisé) d'API Gateway après avoir créé un mécanisme d'autorisation Lambda ?

Résoudre les erreurs « not authorized to access this resource »(non autorisé à accéder à cette ressource) du mécanisme d'autorisation Lambda

Si vous voyez cette erreur par intermittence, l'erreur peut être provoquée par la mise en cache de la stratégie. Vérifiez la configuration de votre mécanisme d'autorisation Lambda dans la console API Gateway pour vérifier que la mise en cache des autorisations est activée. Ensuite, vous pouvez effectuer l'une des actions suivantes :

  • Pour un test unique, exécutez la commande flush-stage authorizers-cache à partir de l'interface de ligne de commande AWS (AWS CLI). Lorsque les entrées de cache du mécanisme d'autorisation sont vidées, appelez à nouveau votre API.
  • Désactivez la mise en cache des stratégies, puis appelez à nouveau votre API.
    Remarque : si vous désactivez la mise en cache des stratégies pour un mécanisme d'autorisation basé sur des paramètres de demande, API Gateway ne valide pas les appels à votre API avant d'appeler la fonction du mécanisme d'autorisation Lambda.
  • Modifiez la clé de cache du mécanisme d'autorisation en mettant à jour le nom d'en-tête spécifié dans Token Source (Source du jeton) (pour les mécanismes d'autorisation basés sur les jetons) ou toute autre Identity Source (Source d'identité) configurée (pour les mécanismes d'autorisation basés sur les paramètres de demande). Redéployez votre API pour valider les modifications. Ensuite, appelez à nouveau votre API à l'aide de l'en-tête de jeton nouvellement configuré ou des sources d'identité.

Si cette erreur se produit constamment, passez en revue le code de fonction de votre mécanisme d'autorisation Lambda dans AWS Lambda pour déterminer pourquoi votre mécanisme d'autorisation refuse explicitement l'accès à l'appelant.

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

Examinez la stratégie de ressources de votre API pour déterminer si la stratégie n'est pas valide ou si elle refuse explicitement l'accès à vos appels. Vous pouvez afficher les journaux d'exécution de votre API pour voir le résultat de la réponse pour la stratégie de ressources.

Pour plus d'informations, consultez Présentation du langage d'access policy pour Amazon API Gateway et la stratégie de ressources et du mécanisme d'autorisation Lambda.