Comment autoriser les utilisateurs de l'API REST d'API Gateway à exécuter Lambda à l'aide du rôle d'exécution d'un groupe d'utilisateurs Amazon Cognito ?
Date de la dernière mise à jour : 13/12/2022
Mon REST API d'Amazon API Gateway avec l'intégration de proxy AWS Lambda dispose d'une authentification de groupe d'utilisateurs Amazon Cognito. Comment autoriser les utilisateurs à exécuter ma fonction Lambda en utilisant le rôle AWS Identity and Access Management (IAM) pour leur groupe d'utilisateurs ?
Solution
Remarque : outre les groupes d'utilisateurs Amazon Cognito, vous pouvez également configurer un groupe d'identités pour autoriser l'accès à votre API. Pour plus d'informations, consultez la rubrique Contrôle d'accès basé sur les rôles.
Avant de configurer les utilisateurs pour exécuter Lambda avec leur rôle Amazon Cognito, assurez-vous d'avoir correctement configuré les éléments suivants :
- Un groupe d'utilisateurs Amazon Cognito et un groupe d'utilisateurs avec un rôle IAM associé.
- Une application client configurée avec l'authentification d'utilisateur Amazon Cognito.
- Une API REST d'API Gateway avec intégration de proxy Lambda.
- Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de la ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'AWS CLI.
Pour permettre aux utilisateurs d'exécuter Lambda avec leurs autorisations Amazon Cognito, exécutez les opérations suivantes :
1. Utilisez la console API Gateway pour établir votre pool d'utilisateurs Amazon Cognito en tant qu'autoriseur. Ensuite, affectez le groupe d'utilisateurs Amazon Cognito en tant que mécanisme d'autorisation pour la méthode de votre API. Pour obtenir des instructions, consultez Intégration d'une API REST à un groupe d'utilisateurs Amazon Cognito.
2. Ouvrez la console AWS Lambda.
3. Choisissez la fonction Lambda qui a été configurée comme ressource proxy pour votre API.
4. Configurez la fonction Lambda et ajoutez l'extrait de code suivant. Cet extrait de code obtient le rôle Amazon Cognito à partir des détails de l'événement, puis assume le rôle.
Remarque : pour exécuter cet extrait de code, votre rôle IAM Lambda doit être autorisé à accéder à Amazon CloudWatch Logs. Le rôle doit également comporter l'appel d'API AssumeRole pour exécuter la commande assume_role.
import boto3
client = boto3.client('sts')
def lambda_handler(event, context):
role=event['requestContext']['authorizer']['claims']['cognito:roles']
response = client.assume_role(
RoleArn=role,
RoleSessionName='APIrole'
)
print(response)
response2api = {"statusCode": 200,"headers": { },"body": "Success"}
return response2api
Un utilisateur peut appartenir à plusieurs groupes d'utilisateurs Amazon Cognito et chaque groupe peut avoir un rôle IAM différent. Si un utilisateur appartient à deux groupes ou plus, la demande cognito:roles renvoie une liste de rôles. La demande cognito:preferred_role dans le jeton d'ID utilisateur hérite le rôle IAM du groupe avec la valeur de priorité la plus élevée (la valeur de precedence la plus basse). Pour plus d'informations, consultez la rubrique Contrôle d'accès basé sur les rôles.
Pour obtenir cognito:preferred_role, utilisez l'extrait de code suivant :
role = event['requestContext']['authorizer']['claims']['cognito:preferred_role']
Pour vérifier que les utilisateurs peuvent exécuter Lambda avec leur rôle Amazon Cognito, exécutez les opérations suivantes :
1. Ouvrez votre application client, puis connectez-vous au groupe d'utilisateurs Amazon Cognito en tant qu’utilisateur.
2. Appelez votre API en utilisant le jeton d’ID que vous recevez après vous être connecté.
Remarque : assurez-vous d'utiliser la valeur id_token des jetons renvoyés.
3. Vérifiez que vous pouvez accéder aux mêmes ressources que celles définies dans le rôle du groupe d'utilisateurs Amazon Cognito.
4. Vous pouvez également vérifier CloudWatch Logs pour vous assurer du assume_role succès de la commande.
Remarque : Si vous utilisez un système d'autorisation Lambda API Gateway pour autoriser l'accès à votre API, utilisez le jeton du pool d'utilisateurs validé par l'autorisateur. Vous devez valider votre jeton avant de pouvoir assumer le rôle du jeton.
Informations connexes
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?