Wie erlaube ich Benutzern von API Gateway REST-API, Lambda mithilfe der Ausführungsrolle aus einer Amazon-Cognito-Benutzerpoolgruppe auszuführen?

Lesedauer: 3 Minute
0

Meine Amazon API Gateway REST-API mit der AWS Lambda Proxy Integration verfügt über die Amazon-Cognito-Benutzerpool-Authentifizierung. Wie erlaube ich Benutzern, meine Lambda-Funktion mithilfe der AWS Identity and Access Management (IAM)-Rolle für ihre Benutzerpoolgruppe auszuführen?

Behebung

Hinweis: Zusätzlich zu den Amazon-Cognito-Benutzerpools können Sie auch einen Identitätspool konfigurieren, um den Zugriff auf Ihre API zu autorisieren. Weitere Informationen finden Sie unter Rollenbasierte Zugriffskontrolle.

Bevor Sie Benutzer so einrichten, dass sie Lambda mit ihrer Amazon-Cognito-Rolle ausführen, stellen Sie sicher, dass Sie Folgendes eingerichtet haben:

Gehen Sie wie folgt vor, um Benutzern die Ausführung von Lambda mit ihren Amazon-Cognito-Berechtigungen zu ermöglichen:

1.Verwenden Sie die API-Gateway-Konsole, um Ihren Amazon-Cognito-Benutzerpool als Autorisierer einzurichten. Weisen Sie dann den Amazon-Cognito-Benutzerpool als Autorisierer für die Methode Ihrer API zu. Anweisungen finden Sie unter Integrieren einer REST-API in einen Amazon-Cognito-Benutzerpool.

2.Öffnen Sie die AWS-Lambda-Konsole.

3.Wählen Sie die Lambda-Funktion, die als Proxy-Ressource für Ihre API konfiguriert wurde.

4.Konfigurieren Sie die Lambda-Funktion und fügen Sie den folgenden Codeausschnitt hinzu. Dieser Codeausschnitt ruft die Amazon-Cognito-Rolle aus den Eventdetails ab und übernimmt dann die Rolle.

Hinweis: Um diesen Codeausschnitt auszuführen, muss Ihre Lambda-IAM-Rolle über Berechtigungen für den Zugriff auf Amazon CloudWatch Logs verfügen. Die Rolle muss auch über den AssumeRole-API-Aufruf verfügen, um den Befehl assume_role auszuführen.

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

Ein Benutzer kann mehreren Amazon-Cognito-Benutzerpoolgruppen angehören, und jede Gruppe kann eine andere IAM-Rolle haben. Wenn ein Benutzer zu zwei oder mehr Gruppen gehört, gibt der Anspruch cognito:roles eine Liste von Rollen zurück. Der Anspruch cognito:preferred_role im ID-Token des Benutzers erbt die IAM-Rolle der Gruppe mit der höchsten Priorität (niedrigster Vorrangwert). Weitere Informationen finden Sie unter Rollenbasierte Zugriffskontrolle.

Verwenden Sie den folgenden Codeausschnitt, um die cognito:preferred_role abzurufen:

role = event['requestContext']['authorizer']['claims']['cognito:preferred_role']

Gehen Sie folgendermaßen vor, um zu überprüfen, ob Benutzer Lambda mit ihrer Amazon-Cognito-Rolle ausführen können:

1.Öffnen Sie Ihre Client-Anwendung und melden Sie sich dann als Benutzer im Amazon-Cognito-Benutzerpool an.

2.Rufen Sie Ihre API mit dem ID-Token auf, das Sie nach der Anmeldung erhalten.
Hinweis: Stellen Sie sicher, dass Sie den Wert id_token aus den zurückgegebenen Tokens verwenden.

3.Stellen Sie sicher, dass Sie auf dieselben Ressourcen zugreifen können, die in der Amazon-Cognito-Benutzerpoolrolle definiert sind.

  1. Überprüfen Sie optional CloudWatch Logs, um sicherzustellen, dass der Befehl assume_role erfolgreich war.

Hinweis: Wenn Sie einen API-Gateway-Lambda-Autorisierer verwenden, um den Zugriff auf Ihre API zu autorisieren, verwenden Sie das vom Autorisierer validierte Benutzerpool-Token. Sie müssen das Token validieren, bevor Sie die Rolle des Tokens übernehmen.

Ähnliche Informationen

Steuern Sie den Zugriff auf eine REST-API mithilfe von Amazon-Cognito-Benutzerpools als Autorisierer

Erstellen Sie eine API Gateway REST-API mit Lambda-Integration

AWS-Lambda-Ausführungsrolle

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr