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 : 2021-05-18

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 AWS Lambda. Comment résoudre ces erreurs ?

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. Pour en savoir plus sur le dépannage d'autres types d'erreurs 403, voir Comment résoudre les erreurs « HTTP 403 Forbidden » (HTTP 403 interdit) dans API Gateway ?

Il existe deux raisons courantes pour lesquelles une API REST de passerelle API avec un autorisateur Lambda renvoie une erreur 403 :

Si l'appel à votre API a un jeton ou des sources d'identité manquantes, nulles ou non validées, vous obtenez une erreur 401 non autorisée. 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 ?

Solution

Confirmer la cause de l'erreur

Remarque : si vous ne l'avez pas déjà fait, activez CloudWatch Logs pour votre API REST de Gateway API.

1.    Passez en revue le message d'erreur dans la réponse d'API Gateway. Recherchez un message d'erreur similaire à l'un des éléments suivants.

Exemple de message d'erreur pour les mécanismes d'autorisation Lambda qui renvoient un document de stratégie IAM avec un refus explicite

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

Exemple de message d'erreur pour les API REST qui ont une stratégie de ressources attachée qui refuse implicitement l'accès à l'appelant

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

Exemple de message d'erreur pour les API REST qui ont une stratégie de ressources attaché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 en savoir plus sur le comportement obtenu lorsque l'accès à une API de passerelle est contrôlé par une stratégie IAM, consultez Résultats de l'évaluation de la stratégie.

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. Vous voyez également un message d'erreur de journal similaire à l'un des éléments suivants.

Exemple de message d'erreur de journal pour lorsqu'un jeton requis est manquant ou ne correspond pas à la validation du jeton

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 de demande étendue de vos journaux sera différente.

Exemple de message d'erreur de journal pour quand un autorisateur Lambda renvoie une stratégie qui refuse l'accès

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.

Exemple de message d'erreur de journal lorsque la stratégie de ressource API Gateway refuse la demande

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 « not authorized to access this resource »(non autorisé à accéder à cette ressource) du mécanisme d'autorisation Lambda

Si vous n'êtes pas être autorisé à accéder à cette ressource par intermittence, l'erreur peut être causée par la mise en cache de stratégie. 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. Ensuite, effectuez 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 : lorsque 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é) (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, déterminez pourquoi votre mécanisme d'autorisation refuse explicitement l'accès à l'appelant en passant en revue le code de fonction de votre mécanisme d'autorisation Lambda. Ensuite, mettez à jour le code afin qu'il autorise l'accès à l'appelant.

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

Déterminez sur votre stratégie de ressources API est valide ou non, ou si elle refuse explicitement l'accès à vos appels en passant en revue la stratégie de ressources de votre API. 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.