Comment autoriser les utilisateurs de l’API REST API Gateway à exécuter Lambda en utilisant le rôle d’exécution d’un groupe d’utilisateurs Amazon Cognito ?

Lecture de 4 minute(s)
0

Mon API REST Amazon API Gateway avec 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 à l’aide du rôle Gestion des identités et des accès AWS (AWS IAM) pour leur groupe d’utilisateurs ?

Ré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 en savoir plus, consultez la page Contrôle d’accès basé sur les rôles.

Avant de configurer les utilisateurs pour qu’ils puissent exécuter Lambda avec leur rôle Amazon Cognito, vous devez mettre en place les éléments suivants :

Pour permettre aux utilisateurs d’exécuter Lambda avec leurs autorisations Amazon Cognito, procédez comme suit :

1.    Utilisez la console API Gateway pour définir votre groupe d’utilisateurs Amazon Cognito comme mécanisme d’autorisation. Ensuite, attribuez au groupe d’utilisateurs Amazon Cognito le rôle de mécanisme d’autorisation pour votre méthode d’API. Pour obtenir des instructions, consultez la page 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 en tant que 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 disposer des autorisations requises pour accéder à Amazon CloudWatch Logs. Le rôle doit également disposer de 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 figurant dans le jeton d’ID de l’utilisateur hérite du rôle IAM du groupe ayant la priorité la plus élevée (valeur de priorité la plus faible). Pour en savoir plus, consultez la page Contrôle d’accès basé sur les rôles.

Pour obtenir la valeur 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, procédez comme suit :

1.    Ouvrez votre application cliente, puis connectez-vous en tant qu’utilisateur dans le groupe d’utilisateurs Amazon Cognito.

2.    Appelez votre API à l’aide du jeton d’identification reçu après votre connexion.
Remarque : veillez à 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 consulter CloudWatch Logs pour vérifier que la commande assume_role a été exécutée avec succès.

Remarque : si vous utilisez un mécanisme d’autorisation API Gateway Lambda pour autoriser l’accès à votre API, utilisez le jeton du groupe d’utilisateurs validé par le mécanisme d’autorisation. Vous devez valider le jeton avant d’en assumer le rôle.

Informations connexes

Contrôle de l’accès à une API REST à l’aide de groupes d’utilisateurs Amazon Cognito en tant que mécanisme d’autorisation

Création d’une API REST API Gateway avec intégration Lambda

Rôle d’exécution AWS Lambda

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an