Ich versuche, eine Lambda-Funktion über das AWS API Gateway aufzurufen. Wenn ich den Authentifizierungstyp NONE erwähne, funktioniert dies einwandfrei, aber die API wird öffentlich und jeder mit URL kann auf meine API zugreifen. Um den API-Aufruf sicher zu machen, verwende ich den Authentifizierungstyp AWS_IAM und füge meinem Benutzer auch die AmazonAPIGatewayInvokeFullAccess-Richtlinie hinzu, erhalte jedoch den folgenden Fehler:
{ message: "Missing Authentication Token"}
Ich weiß nicht, was mir hier fehlt.
Antworten:
Ich denke, Sie versuchen direkt, auf den API-Link zuzugreifen. Dies funktioniert nicht, da die API mithilfe der IAM-Rolle gesichert ist und Sie die AWS-Authentifizierung, dh den Zugriffsschlüssel und den geheimen Schlüssel, bereitstellen müssen.
Verwenden Sie die Postman Chrome-Erweiterung, um Ihre API zu testen: http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html
quelle
Ich habe aus einem dummen Grund etwas Zeit verloren:
Wenn Sie eine Phase erstellen, enthält der angezeigte Link nicht den Ressourcenteil der URL:
API-URL: https://1111.execute-api.us-east-1.amazonaws.com/dev
API + RESOURCE URL https://1111.execute-api.us-east-1.amazonaws.com/dev/get-list
Die / get-Liste fehlte
Und natürlich müssen Sie überprüfen, ob die Methodenkonfiguration folgendermaßen aussieht:
quelle
Ich hatte gerade das gleiche Problem und es scheint, dass diese Meldung auch angezeigt wird, wenn die Ressource nicht gefunden werden kann.
In meinem Fall hatte ich die API aktualisiert, aber vergessen, sie erneut bereitzustellen. Das Problem wurde behoben, nachdem die aktualisierte API auf meiner Stufe bereitgestellt wurde.
quelle
Es sieht so aus, als ob (ab April 2019) AWS API Gateway diese Ausnahme aus verschiedenen Gründen auslöst - hauptsächlich, wenn Sie einen Endpunkt erreichen, den API Gateway nicht erreichen kann, entweder weil er nicht bereitgestellt wird oder auch in Fällen, in denen dies der Fall ist Die HTTP-Methode wird nicht unterstützt.
Ich wünschte, das Gateway sendet geeignetere Fehlercodes wie die nicht unterstützte HTTP 405-Methode oder die nicht gefundene HTTP 404-Methode anstelle eines generischen HTTP 403 Forbidden.
quelle
Stellen Sie sicher, dass Sie zuerst in der Stufenstruktur auf die bestimmte Ressource klicken, da dadurch eine URL mit dem vollständigen Pfad zur Ressource (und nicht nur mit dem Stammpfad) gefüllt wird:
Weitere Ursachen finden Sie unter http://www.awslessons.com/2017/aws-api-gateway-missing-authentication-token/
quelle
Stellen Sie sicher, dass Sie eine Ressource erstellen und anschließend eine Methode darin erstellen. Das war das Problem für mich. Vielen Dank
quelle
Fand dies in den Dokumenten:
Wenn die AWS_IAM-Autorisierung verwendet würde, würden Sie die Anforderung mit den Protokollen der Signaturversion 4 signieren.
Signieranfrage mit Signatur Version 4
Sie können auch ein SDK für Ihre API generieren.
So generieren Sie ein SDK für eine API in API Gateway
Sobald Sie das SDK für die Plattform Ihrer Wahl generiert haben, wird in Schritt 6 erwähnt, dass bei Verwendung von AWS-Anmeldeinformationen die Anforderung an die API signiert wird:
Verwenden Sie zum Initialisieren des vom API-Gateway generierten SDK mit AWS-Anmeldeinformationen den folgenden Code. Wenn Sie AWS-Anmeldeinformationen verwenden, werden alle Anforderungen an die API signiert. Dies bedeutet, dass Sie für jede Anforderung die entsprechenden CORS Accept-Header festlegen müssen:
quelle
Wenn Sie die AWS_IAM-Authentifizierung aktivieren, müssen Sie Ihre Anforderung mit AWS-Anmeldeinformationen unter Verwendung von AWS Signature Version 4 signieren .
Hinweis : Wenn Sie sich bei der AWS-Konsole anmelden, werden die Anforderungen Ihres Browsers nicht automatisch bei Ihrer API signiert.
quelle
Manchmal wird diese Meldung angezeigt, wenn Sie eine falsche API aufrufen
Überprüfen Sie Ihren API-Endpunkt
quelle
Ich versuche alles oben Genannte, wenn Sie alle Schritte in den obigen Antworten ausgeführt haben und das Problem nicht lösen, dann:
Ich denke, dass ich beim Erstellen der "METHODENANFRAGE" (siehe Schritt 2, wie man zu diesem Menü gelangt) in "Autorisierung" nach dem Testen der API "AWS_IAM" auswähle, in der aws-Testoption versuche ich es in "Postbote" "dann verstehe ich das in" METHODENANFRAGE ", in" Autorisierung "sollte ich" keine "auswählen
Ich ändere es in "Keine", aber ich denke, die AWS muss es erneut bereitstellen, wie ich erkläre
quelle
Dieser Fehler tritt meistens auf, wenn Sie einen falschen API-Endpunkt aufrufen. Überprüfen Sie Ihren API-Endpunkt, den Sie anrufen, und überprüfen Sie dies auf dem API-Gateway.
quelle
Wenn Sie eine API mit einem Endpunkt vom Typ PRIVATE verwenden , stellen Sie Folgendes sicher:
Sie rufen die API in Ihrem AWS-Konto auf (Beispiel: von einer in Ihrem Konto erstellten EC2-Instanz).
Fügen Sie die erforderlichen Anmeldeinformationen (Zugriffs- und geheime Schlüssel) in die EC2-Instanz in route ~ / .aws / credentials ein (diese Route gilt für Linux-Instanzen). Wenn der IAM-Benutzer den MFA- Wert aws_session_token verwendet, ist ebenfalls ein Wert erforderlich.
Verwenden Sie eine auf vpce (vpc endpoint) basierende URL. Beispiel: Curl https://vpce-0c0471b7test-jkznizi5.execute-api.us-east-1.vpce.amazonaws.com/dev/api/v1/status
Ihre EC2-Instanz verfügt über eine Sicherheitsgruppe, die ausgehenden Datenverkehr zu einer anderen Sicherheitsgruppe des vpce zulässt, z.
Ihre vpce-Sicherheitsgruppe lässt eingehenden Datenverkehr von einer anderen Sicherheitsgruppe (vorherige SG von der ec2-Instanz) zu, die der EC2-Instanz gehört, wie z.
Siehe: https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html
quelle
Überprüfen Sie zunächst, ob die in der Lamda-Funktion erstellte API in Ihrem AWS-Projekt registriert ist oder nicht. Wechseln Sie dazu zum API-Gateway in Ihrer AWS-Konsole. Wenn es nicht registriert ist, registrieren Sie es. Dies ist die Hauptursache für dieses Problem.
Sie können sogar in Ihrer Datei aws.export.js sehen , dass es Pfade gibt, die Ihrer API entsprechen
['/items']
.Ihre API muss dort vorhanden sein, sonst wird das Sicherheitstoken nicht an Anforderungen angehängt. Registrieren Sie es dazu einfach in Ihrer Projekt-Cloud-Logik in Ihrer Konsole.
Wenn es dort ist, verwenden Sie die oben genannte Lösung
http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html
quelle
Wenn Sie für den Datensatz keine Anmeldeinformationen verwenden würden, wird dieser Fehler auch angezeigt, wenn Sie den Anforderungsvalidator in Ihrer POST / PUT-Methode auf "Body, Abfragezeichenfolgenparameter und HEADERS validieren" oder auf die andere Option "Abfragezeichenfolge validieren" setzen Parameter und HEADERS ".... in diesem Fall wird nach den Anmeldeinformationen im Header gesucht und die Anforderung abgelehnt. Zusammenfassend lässt sich sagen, dass Sie diese Option im Anforderungsvalidator nicht festlegen sollten, wenn Sie keine Anmeldeinformationen senden möchten und diese offen halten möchten (setzen Sie sie entweder auf NONE oder auf validate body).
quelle
Beitragen:
Ich hatte einen ähnlichen Fehler, weil meine Rückantwort nicht den 'Körper' wie folgt enthielt:
return {'statusCode': 200, 'body': "muss das body-Tag enthalten, wenn Sie es ersetzen, funktioniert es nicht"}
quelle
Ich hatte das gleiche Problem, das ich folgendermaßen gelöst habe:
GET Methodentest
quelle
Wenn Sie für Ihren Server eine IAM-Rolle mit der Berechtigung AmazonAPIGatewayInvokeFullAccess einrichten, müssen Sie bei jeder Anforderung weiterhin Header übergeben. Sie können dies in Python mit der Bibliothek aws-request-auth wie folgt tun:
quelle
In meinem Fall war es eine ziemlich dumme Sache. Ich habe mich daran gewöhnt, dass neue Entitäten mit POST erstellt werden und es mit "Missing Authentication Token" fehlgeschlagen ist. Ich habe aus irgendeinem Grund übersehen, dass es als PUT definiert wurde, was gut funktioniert.
quelle