Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation des mécanismes d'autorisation Lambda API Gateway
Utilisez un autorisateur Lambda (anciennement connu sous le nom d'autorisateur personnalisé) pour contrôler l'accès à votre API. Lorsqu'un client demande la méthode de votre API, API Gateway appelle votre autorisateur Lambda. L'autorisateur Lambda prend l'identité de l'appelant en entrée et renvoie une politique IAM en sortie.
Utilisez un autorisateur Lambda pour implémenter un schéma d'autorisation personnalisé. Votre schéma peut utiliser des paramètres de demande pour déterminer l'identité de l'appelant ou utiliser une stratégie d'authentification par jeton porteur telle que OAuth ou SAML. Créez un autorisateur Lambda dans la console API REST API Gateway, à l'aide du ou d'un AWS CLI SDK. AWS
Flux de travail d'autorisation Lambda Authorizer
Le schéma suivant montre le flux de travail d'autorisation pour un autorisateur Lambda.
Flux de travail d'autorisation Lambda API Gateway
-
Le client appelle une méthode sur une API API Gateway, en transmettant un jeton porteur ou des paramètres de demande.
-
API Gateway vérifie si la demande de méthode est configurée avec un autorisateur Lambda. Si c'est le cas, API Gateway appelle la fonction Lambda.
-
La fonction Lambda authentifie l'appelant. La fonction peut s'authentifier de différentes manières :
-
En appelant un fournisseur OAuth pour obtenir un jeton d'accès OAuth.
-
En appelant un fournisseur SAML pour obtenir une assertion SAML.
-
En générant une politique IAM basée sur les valeurs des paramètres de demande.
-
En récupérant les informations d'identification d'une base de données.
-
-
La fonction Lambda renvoie une politique IAM et un identifiant principal. Si la fonction Lambda ne renvoie pas ces informations, l'appel échoue.
-
API Gateway évalue la politique IAM.
-
Si l'accès est refusé, API Gateway renvoie un code de statut HTTP adapté, par exemple
403 ACCESS_DENIED
. -
Si l'accès est autorisé, API Gateway appelle la méthode.
Si vous activez la mise en cache des autorisations, API Gateway met en cache la politique afin que la fonction d'autorisation Lambda ne soit pas invoquée à nouveau.
-
Vous pouvez personnaliser les réponses 403
ACCESS_DENIED
ou les réponses de la 401 UNAUTHORIZED
passerelle. Pour en savoir plus, veuillez consulter la section Réponses de passerelle dans API Gateway.
Choisir un type d'autorisateur Lambda
Il existe deux types d'autorisations Lambda :
- Autorisateur Lambda basé sur les paramètres de demande (autorisateur)
REQUEST
-
Un
REQUEST
autorisateur reçoit l'identité de l'appelant sous forme d'une combinaison d'en-têtes, de paramètres de chaîne de requête et de variables stageVariables. $context Vous pouvez utiliser unREQUEST
autorisateur pour créer des politiques précises basées sur les informations provenant de plusieurs sources d'identité, telles que les variables de contexte$context.path
et$context.httpMethod
.Si vous activez la mise en cache des autorisations pour un
REQUEST
autorisateur, API Gateway vérifie que toutes les sources d'identité spécifiées sont présentes dans la demande. Si une source d'identification spécifiée est manquante, nulle ou vide, API Gateway renvoie une réponse401 Unauthorized
HTTP sans appeler la fonction d'autorisation Lambda. Lorsque plusieurs sources d'identité sont définies, elles sont toutes utilisées pour dériver la clé de cache de l'autorisateur, l'ordre étant préservé. Vous pouvez définir une clé de cache précise en utilisant plusieurs sources d'identité.Si vous modifiez l'un des éléments clés du cache et que vous redéployez votre API, l'autorisateur supprime le document de politique mis en cache et en génère un nouveau.
Si vous désactivez la mise en cache des autorisations pour un
REQUEST
autorisateur, API Gateway transmet directement la demande à la fonction Lambda. - Autorisateur Lambda basé sur des jetons (autorisateur)
TOKEN
-
Un
TOKEN
autorisateur reçoit l'identité de l'appelant dans un jeton porteur, tel qu'un jeton Web JSON (JWT) ou un jeton OAuth.Si vous activez la mise en cache des autorisations pour un
TOKEN
autorisateur, le nom d'en-tête spécifié dans la source du jeton devient la clé du cache.En outre, vous pouvez utiliser la validation par jeton pour saisir une RegEx déclaration. API Gateway effectue la validation initiale du jeton d'entrée par rapport à cette expression et invoque la fonction d'autorisation Lambda une fois la validation réussie. Cela contribue à réduire le nombre d'appels à votre API.
La
IdentityValidationExpression
propriété est prise en charge uniquement pour lesTOKEN
personnes autorisées. Pour plus d’informations, consultez x-amazon-apigateway-authorizer objet.
Note
Nous vous recommandons d'utiliser un REQUEST
autorisateur pour contrôler l'accès à votre API. Vous pouvez contrôler l'accès à votre API en fonction de plusieurs sources d'identité lorsque vous utilisez un REQUEST
autorisateur, par rapport à une source d'identité unique lorsque vous utilisez un TOKEN
autorisateur. En outre, vous pouvez séparer les clés de cache à l'aide de plusieurs sources d'identité pour un REQUEST
autorisateur.
Exemple de fonction REQUEST
Lambda d'autorisation
L'exemple de code suivant crée une fonction d'autorisation Lambda qui autorise une demande si l'HeaderAuth1
en-tête, le paramètre de QueryString1
requête et la variable d'étape fournis par le client correspondent aux valeurs spécifiées deStageVar1
, etheaderValue1
, queryValue1
respectivement. stageValue1
Dans cet exemple, la fonction du mécanisme d'autorisation Lambda vérifie les paramètres d'entrée et agit comme suit :
-
Si toutes les valeurs de paramètre obligatoires correspondent aux valeurs attendues, la fonction du mécanisme d'autorisation renvoie une réponse HTTP
200 OK
et une stratégie IAM qui ressemble à ce qui suit, et la demande de la méthode aboutit :{ "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow", "Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/ESTestInvoke-stage/GET/" } ] }
-
Dans le cas contraire, la fonction d'autorisation renvoie une réponse
401 Unauthorized
HTTP et la demande de méthode échoue.
En plus de renvoyer une stratégie IAM, la fonction du mécanisme d'autorisation Lambda doit également renvoyer l'identifiant principal de l'appelant. Facultativement, il peut renvoyer un context
objet contenant des informations supplémentaires qui peuvent être transmises au backend d'intégration. Pour plus d’informations, consultez Résultat d'un autorisateur Lambda API Gateway.
Dans le code de production, il se peut que vous deviez authentifier l'utilisateur avant d'accorder l'autorisation. Vous pouvez ajouter une logique d'authentification dans la fonction Lambda en appelant un fournisseur d'authentification comme indiqué dans la documentation de ce fournisseur.
Exemple de fonction TOKEN
Lambda d'autorisation
L'exemple de code suivant crée une fonction d'autorisation TOKEN
Lambda qui permet à un appelant d'invoquer une méthode si la valeur du jeton fournie par le client est. allow
L'appelant n'est pas autorisé à invoquer la demande si la valeur du jeton estdeny
. Si la valeur du jeton est unauthorized
ou une chaîne vide, la fonction d'autorisation renvoie une 401 UNAUTHORIZED
réponse.
Dans cet exemple, lorsque l'API reçoit une demande de méthode, API Gateway transmet le jeton source à cette fonction du mécanisme d'autorisation Lambda dans l'attribut event.authorizationToken
. La fonction du mécanisme d'autorisation Lambda lit le jeton et agit comme suit :
-
Si la valeur du jeton est
allow
, la fonction du mécanisme d'autorisation renvoie une réponse HTTP200 OK
et une stratégie IAM qui ressemble à ce qui suit, et la demande de méthode aboutit :{ "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow", "Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/ESTestInvoke-stage/GET/" } ] }
-
Si la valeur du jeton est
deny
, la fonction du mécanisme d'autorisation renvoie une réponse HTTP200 OK
et une stratégie IAMDeny
qui ressemble à ce qui suit, et la demande de méthode échoue :{ "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Deny", "Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/ESTestInvoke-stage/GET/" } ] }
Note
En dehors de l'environnement de test, API Gateway renvoie une réponse
403 Forbidden
HTTP et la demande de méthode échoue. -
Si la valeur du jeton est
unauthorized
ou une chaîne vide, la fonction du mécanisme d'autorisation renvoie une réponse HTTP401 Unauthorized
et l'appel de la méthode échoue. -
Si le jeton a n'importe quelle autre valeur, le client reçoit une réponse
500 Invalid token
et l'appel de la méthode échoue.
En plus de renvoyer une stratégie IAM, la fonction du mécanisme d'autorisation Lambda doit également renvoyer l'identifiant principal de l'appelant. Facultativement, il peut renvoyer un context
objet contenant des informations supplémentaires qui peuvent être transmises au backend d'intégration. Pour plus d’informations, consultez Résultat d'un autorisateur Lambda API Gateway.
Dans le code de production, il se peut que vous deviez authentifier l'utilisateur avant d'accorder l'autorisation. Vous pouvez ajouter une logique d'authentification dans la fonction Lambda en appelant un fournisseur d'authentification comme indiqué dans la documentation de ce fournisseur.
Exemples supplémentaires de fonctions d'autorisation Lambda
La liste suivante présente d'autres exemples de fonctions d'autorisation Lambda. Vous pouvez créer une fonction Lambda dans le même compte, ou dans un compte différent, à partir duquel vous avez créé votre API.
Dans l'exemple précédent, vous pouvez utiliser les fonctions Lambda intégrées AWSLambdaBasicExecutionRole, car ces fonctions n'appellent aucun autre AWS service. Si votre fonction Lambda appelle d'autres AWS services, vous devez attribuer un rôle d'exécution IAM à la fonction Lambda. Pour créer le rôle, suivez les instructions dans Rôle d'exécution AWS Lambda.
Exemples supplémentaires de fonctions d'autorisation Lambda
-
Pour un exemple d'application, voir Open Banking Brazil - Authorization Samples
on GitHub. -
Pour plus d'exemples de fonctions Lambda, voir aws-apigateway-lambda-authorizer-blueprints
on. GitHub -
Vous pouvez créer un système d'autorisation Lambda qui authentifie les utilisateurs à l'aide des groupes d'utilisateurs Amazon Cognito et autorise les appelants sur la base d'un magasin de politiques utilisant des autorisations vérifiées. Pour plus d'informations, consultez la section Créer un magasin de politiques avec une API connectée et un fournisseur d'identité dans le guide de l'utilisateur Amazon Verified Permissions.
-
La console Lambda fournit un plan Python, que vous pouvez utiliser en choisissant Utiliser un plan puis en choisissant le plan. api-gateway-authorizer-python