Utilisation des mécanismes d’autorisation Lambda API Gateway
Utilisez un mécanisme d’autorisation Lambda (anciennement appelé mécanisme d’autorisation personnalisée) pour contrôler l’accès à votre API. Lorsqu’un client soumet une méthode sur votre API, API Gateway appelle votre mécanisme d’autorisation Lambda. Ce dernier prend l’identité de l’appelant en entrée et renvoie une politique IAM en sortie.
Utilisez un mécanisme d’autorisation Lambda pour implémenter un schéma d’autorisation personnalisée. Votre schéma peut utiliser les paramètres de demande pour déterminer l’identité de l’appelant ou utiliser une politique d’authentification par jeton de porteur, telle qu’OAuth ou SAML. Créez un mécanisme d’autorisation Lambda dans la console API REST API Gateway, ou à l’aide de l’AWS CLI ou d’un kit AWS SDK.
Flux d’autorisation du mécanisme d’autorisation Lambda
Le schéma suivant illustre le flux d’autorisation d’un mécanisme d’autorisation Lambda.
Flux de travail d’autorisation Lambda API Gateway
-
Le client appelle une méthode sur une API API Gateway, en transmettant un jeton de porteur ou des paramètres de demande.
-
API Gateway vérifie si la demande de méthode est configurée avec un mécanisme d’autorisation Lambda. Si c’est le cas, API Gateway appelle la fonction Lambda.
-
La fonction Lambda authentifie l’appelant. La fonction peut procéder à l’authentification 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 la demande.
-
En extrayant 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 approprié, par exemple
403 ACCESS_DENIED. -
Si l’accès est autorisé, API Gateway invoque la méthode.
Si vous activez la mise en cache des autorisations, API Gateway met en cache la politique afin que la fonction du mécanisme d’autorisation Lambda ne soit pas invoquée à nouveau. Assurez-vous que votre politique s’applique à toutes les ressources et méthodes de votre API.
-
Vous pouvez personnaliser la réponse de passerelle 403
ACCESS_DENIED ou 401 UNAUTHORIZED. Pour en savoir plus, consultez la section Réponses de passerelle pour les API REST dans API Gateway.
Choix d’un type de mécanisme d’autorisation Lambda
Il existe deux types de mécanismes d’autorisation Lambda :
- Mécanisme d’autorisation Lambda basé sur les paramètres de la demande (mécanisme d’autorisation
REQUEST) -
Un mécanisme d’autorisation
REQUESTreçoit l’identité de l’appelant dans une combinaison d’en-têtes, de paramètres de chaîne de requête, et de variables stageVariables et $context. Vous pouvez utiliser un mécanisme d’autorisationREQUESTpour créer des politiques précises basées sur les informations de plusieurs sources d’identité, telles que les variables contextuelles$context.pathet$context.httpMethod.Si vous activez la mise en cache des autorisations pour un mécanisme d’autorisation
REQUEST, API Gateway vérifie que toutes les sources d’identité spécifiées sont présentes dans la demande. Si une source d’identité spécifiée est absente, nulle ou vide, API Gateway renvoie une réponse HTTP401 Unauthorizedsans appeler la fonction du mécanisme d’autorisation Lambda. Lorsque plusieurs sources d’identité sont définies, elles sont toutes utilisées pour obtenir la clé de cache du mécanisme d’autorisation, en respectant l’ordre établi. Vous pouvez définir une clé de cache précise en utilisant plusieurs sources d’identité.Si vous modifiez une partie de la clé de cache et redéployez votre API, le mécanisme d’autorisation ignore 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 mécanisme d’autorisation
REQUEST, API Gateway transmet directement la demande à la fonction Lambda. - Mécanisme d’autorisation Lambda par jeton (mécanisme d’autorisation
TOKEN) -
Un mécanisme d’autorisation
TOKENreçoit l’identité de l’appelant dans un jeton de porteur, par exemple un jeton JWT (JSON Web Token) ou un jeton OAuth.Si vous activez la mise en cache des autorisations pour un mécanisme d’autorisation
TOKEN, le nom de l’en-tête spécifié dans la source du jeton devient la clé de cache.En outre, vous pouvez utiliser la validation du jeton pour saisir une instruction RegEx. API Gateway effectue la validation initiale du jeton d’entrée en fonction de cette expression et invoque la fonction du mécanisme d’autorisation Lambda quand la validation aboutit. Cela contribue à réduire le nombre d'appels à votre API.
La propriété
IdentityValidationExpressionest prise en charge pour les mécanismes d’autorisationTOKENuniquement. Pour plus d’informations, consultez Objet x-amazon-apigateway-authorizer.
Note
Nous vous recommandons d’utiliser un mécanisme d’autorisation REQUEST pour contrôler l’accès à votre API. Vous pouvez contrôler l’accès à votre API sur la base de plusieurs sources d’identité lorsque vous utilisez un mécanisme d’autorisation REQUEST, alors qu’une seule source d’identité suffit lorsque vous utilisez un mécanisme d’autorisation TOKEN. En outre, vous pouvez séparer les clés de cache en utilisant plusieurs sources d’identité pour un mécanisme d’autorisation REQUEST.
Exemple de fonction de mécanisme d’autorisation Lambda REQUEST
L’exemple de code suivant crée une fonction de mécanisme d’autorisation Lambda qui autorise une demande si l’en-tête HeaderAuth1 fourni par le client, le paramètre de requête QueryString1 et la variable d’étape StageVar1 correspondent aux valeurs headerValue1, queryValue1 et stageValue1 spécifiées, respectivement.
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 OKet une politique IAM qui ressemble à ce qui suit, et la demande de la méthode aboutit : -
Sinon, la fonction du mécanisme d’autorisation renvoie une réponse HTTP
401 Unauthorizedet 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. Elle peut éventuellement renvoyer un objet context qui inclut des informations supplémentaires transmissibles au backend d’intégration. Pour plus d’informations, consultez Sortie d’un mécanisme d’autorisation Lambda API Gateway.
Dans le code de production, vous devrez peut-être 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 de mécanisme d’autorisation Lambda TOKEN
L’exemple de code suivant crée une fonction de mécanisme d’autorisation LambdaTOKEN 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 est deny. Si la valeur du jeton est unauthorized ou une chaîne vide, la fonction du mécanisme d’autorisation renvoie une réponse 401 UNAUTHORIZED.
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 OKet une politique IAM qui ressemble à ce qui suit, et la demande de méthode aboutit : -
Si la valeur du jeton est
deny, la fonction du mécanisme d’autorisation renvoie une réponse HTTP200 OKet une politique IAMDenyqui ressemble à ce qui suit, et la demande de méthode échoue :Note
En dehors de l’environnement de test, API Gateway renvoie une réponse HTTP
403 Forbiddenet la demande de méthode échoue. -
Si la valeur du jeton est
unauthorizedou une chaîne vide, la fonction du mécanisme d’autorisation renvoie une réponse HTTP401 Unauthorizedet 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 tokenet 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. Elle peut éventuellement renvoyer un objet context qui inclut des informations supplémentaires transmissibles au backend d’intégration. Pour plus d’informations, consultez Sortie d’un mécanisme d’autorisation Lambda API Gateway.
Dans le code de production, vous devrez peut-être 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 de mécanisme d’autorisation Lambda
La liste suivante présente d’autres exemples de fonctions de mécanisme d’autorisation Lambda. Vous pouvez créer une fonction Lambda dans le même compte, ou dans un autre compte, que celui dans lequel vous avez créé votre API.
Pour les fonctions Lambda de l’exemple précédent, vous pouvez utiliser le rôle intégré AWSLambdaBasicExecutionRole, car ces fonctions n’appellent pas d’autres services AWS. Si votre fonction Lambda appelle d’autres services AWS, vous devrez 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 de mécanisme d’autorisation Lambda
-
Pour obtenir un exemple d’application, consultez Open Banking Brazil - Exemples d’autorisation
sur GitHub. -
Pour accéder à d’autres exemples de fonctions Lambda, consultez aws-apigateway-lambda-authorizer-blueprints
sur GitHub. -
Vous pouvez créer un mécanisme d’autorisation Lambda qui authentifie les utilisateurs à l’aide de groupes d’utilisateurs Amazon Cognito, et autorise les appelants sur la base d’un entrepôt de politiques à l’aide de Verified Permissions. Pour plus d’informations, consultez Contrôle de l’accès sur la base des attributs d’une identité avec Verified Permissions.
-
La console Lambda fournit un plan Python, que vous pouvez utiliser en choisissant Use a blueprint (Utiliser un plan), puis en choisissant le plan api-gateway-authorizer-python.