Source de l’image: Pixabay
Une passerelle API est un composant essentiel de toute architecture de microservices. Amazon fournit son propre service API Gateway, que vous pouvez utiliser pour permettre aux utilisateurs d’accéder à une application de microservices et gérer la communication API entre les microservices.
La passerelle API fournit un processus d’authentification par défaut, mais que se passe-t-il si vous souhaitez définir un processus personnalisé ? Par exemple, vous souhaiterez peut-être collecter les paramètres de demande d’autres systèmes à l’aide de protocoles tels que SAML ou OAuth. Dans cet article, je vais montrer comment réaliser des flux d’authentification personnalisés avec une intégration entre API Gateway et AWS Lambda.
Qu’est-ce qu’Amazon API Gateway ?
Amazon API Gateway est un service permettant de créer et de gérer des API à différentes échelles. Vous pouvez utiliser le service pour créer, publier, maintenir et sécuriser des API HTTP, REST ou WebSocket pour accéder aux services Web tels qu’AWS et aux données stockées dans le cloud AWS. API Gateway vous permet de développer des API pour vos applications clientes ou d’autres développeurs d’applications. Ils sont également un élément essentiel de la sécurisation des API.
Contrôler et gérer l’accès aux API REST avec API Gateway
API Gateway vous permet de contrôler et de gérer l’accès à vos API basées sur le cloud à l’aide de divers mécanismes d’authentification et d’autorisation, notamment :
-
Politiques de ressources : vous pouvez créer des politiques qui autorisent ou restreignent l’accès à une API en fonction des ressources. Vous pouvez également partager ou protéger des méthodes à partir des points de terminaison Virtual Private Cloud (VPC) ou des adresses IP source que vous spécifiez.
-
Rôles de gestion des identités et des accès (IAM) : vous pouvez utiliser des rôles et des stratégies IAM standard pour appliquer des contrôles d’accès stricts à des méthodes spécifiques ou à une API entière. Les stratégies et les rôles AWS IAM vous permettent de contrôler qui peut développer, gérer ou appeler vos API et de prendre en charge plusieurs types d’authentification.
-
Balises IAM : vous pouvez les combiner avec des stratégies IAM pour faciliter le contrôle d’accès.
-
Groupes d’utilisateurs Amazon Cognito : vous pouvez contrôler qui peut appeler vos méthodes d’API REST via les groupes d’utilisateurs.
-
Autorisations Lambda : il s’agit de fonctions Lambda permettant de contrôler l’accès aux méthodes de l’API REST en authentifiant les jetons du porteur. Les mécanismes d’autorisation Lambda utilisent également des données telles que des en-têtes, des chaînes de requête, des chemins, des variables d’étape et des paramètres de demande de variable de contexte. Vous pouvez les utiliser pour déterminer qui peut appeler vos méthodes d’API REST.
Authentification et autorisation Lambda
Les mécanismes d’autorisation Lambda sont une fonctionnalité d’Amazon API Gateway qui contrôle l’accès aux API à l’aide des fonctions Lambda. Vous pouvez utiliser un mécanisme d’autorisation Lambda pour implémenter des configurations d’autorisation personnalisées qui déterminent l’identité de l’appelant en fonction des paramètres de demande ou des jetons de support (c’est-à-dire SAML ou OAuth).
API Gateway appelle le mécanisme d’autorisation Lambda lorsque les clients demandent une méthode API, l’identité de l’appelant servant d’entrée. Le mécanisme d’autorisation Lambda renvoie ensuite la sortie sous la forme d’une stratégie IAM.
Les autorisateurs Lambda peuvent être des autorisateurs basés sur des jetons ou des autorisateurs basés sur des paramètres de demande. Les autorisateurs de jetons identifient les appelants à l’aide de jetons de support tels que les jetons OAuth ou les jetons Web JSON (JWT). Les autorisateurs de requêtes utilisent une combinaison de paramètres tels que des chaînes de requête, des en-têtes et des variables d’étape et de contexte.
Le diagramme suivant présente le workflow d’autorisation pour un mécanisme d’autorisation Lambda.
Source de l’image : AWS
Le workflow de l’autorisateur Lambda comporte les étapes suivantes :
1. Le client transmet des paramètres de demande ou un jeton de support à la passerelle API pour appeler une méthode API.
2. API Gateway recherche un mécanisme d’autorisation Lambda configuré pour la méthode API et appelle la fonction Lambda appropriée si elle est disponible.
3. La fonction Lambda utilise l’une des stratégies suivantes pour authentifier l’appelant :
-
Appelez un fournisseur de services OAuth pour recevoir un jeton d’accès OAuth.
-
Appelez un fournisseur de services SAML pour recevoir une assertion SAML.
-
Génération de stratégie IAM basée sur les valeurs des paramètres de demande.
-
Récupération des informations d’identification à partir d’une base de données d’utilisateurs.
4. La fonction Lambda renvoie un objet de sortie avec une stratégie IAM d’identifiant principal si l’appel aboutit.
5. API Gateway évalue ensuite la stratégie IAM pour déterminer s’il faut accorder l’accès :
-
Si la stratégie autorise l’accès, API Gateway exécute la méthode API. Si les paramètres de l’autorisateur activent la mise en cache, API Gateway met en cache la stratégie. La passerelle n’aura pas à invoquer à nouveau la fonction d’autorisation Lambda.
-
Si la stratégie refuse l’accès, API Gateway envoie le statut HTTP pertinent (c’est-à-dire un code d’erreur 403).
Utilisation de la console API Gateway pour configurer un autorisateur Lambda
Une fois que vous avez créé une fonction Lambda, vous devez vérifier qu’elle fonctionne correctement. Vous pouvez ensuite utiliser les étapes suivantes pour configurer un mécanisme d’autorisation Lambda correspondant :
1. Accédez à la console API Gateway.
2. Sélectionnez une API (ou créez-en une nouvelle) et sélectionnez les autorisateurs en dessous.
3. Sélectionnez créer un nouvel autorisateur.
4. Dans le champ Nom, saisissez un nom pour l’autorisateur.
5. Sous type, sélectionnez Lambda.
6. Sous Fonction Lambda, sélectionnez la région souhaitée.
7. Sélectionnez une fonction d’autorisation Lambda disponible dans votre compte.
8. Pour configurer un mécanisme d’autorisation basé sur les ressources, laissez le rôle d’appel Lambda vide. Pour définir une stratégie permettant à API Gateway d’appeler votre fonction Lambda, entrez un rôle IAM approprié.
9. Sous la charge utile de l’événement Lambda, vous pouvez sélectionner la demande d’un mécanisme d’autorisation basé sur des paramètres de demande ou un jeton pour un mécanisme d’autorisation basé sur un jeton :
-
Si vous avez sélectionné demande, entrez le nom du type de paramètre de demande que vous avez choisi sous sources d’identité. Sélectionnez (ou désélectionnez) activé sous la mise en cache des autorisations pour déterminer si API Gateway doit mettre en cache la stratégie générée par le mécanisme d’autorisation Lambda.
-
Si vous avez sélectionné jeton, saisissez un nom d’en-tête dans la source du jeton. Le client API doit ajouter l’en-tête correspondant lors de l’envoi du jeton à l’autorisateur. Sélectionnez (ou désélectionnez) activé sous la mise en cache des autorisations pour déterminer si API Gateway doit mettre en cache la stratégie générée par le mécanisme d’autorisation Lambda. Si vous activez la mise en cache, le nom d’en-tête que vous avez spécifié est la clé de cache. Vous pouvez également modifier la valeur de durée de vie (TTL), bien que cela désactivera la mise en cache si vous définissez la durée de vie sur zéro.
10. Pour créer le mécanisme d’autorisation Lambda pour l’API que vous avez choisie, sélectionnez créer.
Conclusion
Dans cet article, j’ai expliqué les bases de l’authentification API dans AWS et montré les étapes générales pour créer un système d’authentification personnalisé à l’aide du concept d’autorisateur Lambda :
-
Écrire une fonction Lambda avec une fonctionnalité d’authentification personnalisée
-
Définir un mécanisme d’autorisation Lambda dans Amazon API Gateway
-
API Gateway commence à utiliser votre fonction Lambda pour évaluer les nouvelles demandes d’authentification
J’espère que cela vous sera utile lorsque vous explorerez les méthodes d’authentification avancées dans le cloud Amazon.