Ich versuche, einen Lambda-Dienst in AWS zu erstellen und von außen über das API-Gateway darauf zugreifen zu lassen, ohne dass eine Authentifizierung oder Einschränkung erforderlich ist.
Um die Sache zu vereinfachen, habe ich das Gateway vorerst als Mock eingerichtet.
Bei der Get-Methode der API ist die Autorisierung auf None
und der API-Schlüssel auf festgelegt not required
.
Wenn ich dies versuche, erhalte ich {"message":"Forbidden"}
(dieselbe Nachricht, wenn ich es mit dem eigentlichen Lambda-Dienst verbinde).
Irgendwelche Ratschläge, wie man es zugänglich macht?
[solved]
Ihre Frage zu ergänzen. Vielen Dank!Antworten:
Wenn Sie die Option "API-Schlüssel erforderlich" auf "true" setzen, überprüfen Sie dies bitte unten.
quelle
Wählen Sie im API-Gateway-Dashboard Ressourcen aus, klicken Sie auf Aktionen und wählen Sie API bereitstellen. Vor Ihrer ersten Bereitstellung erhalten Sie nur die Antwort
{"message":"Forbidden"}
.quelle
Wenn Sie einen benutzerdefinierten Domainnamen verwenden und vergessen, die Zielbereitstellung auszuwählen, wird die
Forbidden
Nachricht angezeigt.Gehen Sie einfach zu
Custom Domain Names
und klicken SieEdit
unter Ihrer Domain und wählen Sie dann die Stufe unter ausBase Path Mappings
.quelle
Sie müssen Ihre API auf der Bühne bereitstellen und die URL der Bühne verwenden. Gehen Sie zu Ressourcen, klicken Sie auf Aktionen und wählen Sie API bereitstellen
Nun, wenn Sie Fehler bekommen
Bitte überprüfen Sie die folgenden Schritte
1) Wenn Sie die API-Schlüsselkopie aktivieren und Ihren Schlüssel als Postbote übergeben
2) Wenn Sie jetzt immer noch den gleichen Fehler erhalten, müssen Sie einen Nutzungsplan erstellen
3) Setzen Sie ein Limit und weisen Sie Ihrer API einen Plan zu
quelle
Ich hatte ein ähnliches Problem und Folgendes:
Ich habe auch keine Autorisierung oder Einschränkungen festgelegt, um die Dinge zu vereinfachen.
Ich konnte das Problem beheben, indem ich Basispfadzuordnungen für jede meiner Stufen (dev, staging, prod) hinzufügte.
quelle
Wenn Sie den erforderlichen 'API'-Schlüssel auf true setzen, müssen Sie den API-Schlüssel als Header übergeben.
Der API-Schlüssel wird als Header-Feld 'x-api-key' übergeben. Auch nach dem Hinzufügen dieses Felds in der Kopfzeile kann dieses Problem auftreten. In diesem Fall validieren Sie bitte die folgenden Punkte
quelle
Ich bin möglicherweise zu spät, aber einer der Gründe, warum API Gateway eine "verbotene" Nachricht ausgibt, ist, dass Sie Daten in Request Body für eine GET-Operation übergeben. Um das Problem zu lösen, machen Sie entweder Ihre Ressource POST oder Sie übergeben keine Daten im Anforderungshauptteil.
quelle
GraphQL Query
- was 403 Forbidden Error zurückgab . Das Ändern des Anforderungstyps vonGraphQL Query
aufNo Body
hat den Trick getan!Dies mag alles andere als offensichtlich sein, aber ein weiterer Grund für den Fehler "Verboten" bei Verwendung von AWS API Gateway ist möglicherweise der Aufruf einer falschen URL, die keiner bereitgestellten API-Methode entspricht. Es kann vorkommen, dass Sie tatsächlich eine falsche URL eingeben (z. B. anstatt anzurufen
https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users
(dev
Phase vorher notierenusers
), die Sie angerufen habenhttps://9999xx9x99.execute-api.us-east-1.amazonaws.com/users
(keine Phase). Sie würden erwarten, 404 zu erhalten, aber Sie erhalten 403.Übrigens: Nachdem Sie eine Bereitstellung für das
https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users
Anrufen vorgenommen habenhttps://9999xx9x99.execute-api.us-east-1.amazonaws.com/user
(beachten Sie hier das Singular-Nomen-Formular), erhalten Sie ebenfalls… 403, jedoch mit der Meldung "Missing Authentication Token"!quelle
Wenn
Authorization
undAPI KEY Required
beide für die Methode auf true gesetzt sind, stellen Sie sicher, dass Sie beim Senden der Anforderung die folgenden Header haben:Ich verwende
POSTMAN
für API-Tests, die ziemlich zuverlässig sind und dann einfach sind.Hinweis: Fügen Sie keine x-api-Schlüsselüberschrift hinzu, wenn Sie
API KEY REQUIRED
FALSE festgelegt haben. Wenn SieAUTHORIZATION
FALSE festgelegt haben, fügen Sie keinen Autorisierungsheader hinzu.quelle
Der einzige andere Grund, den ich erlebt habe und den ich hier nicht sehe, ist buchstäblich, dass Sie versucht haben, die API nach der Veröffentlichung zu schnell zu erreichen. Ich drücke auf "Veröffentlichen" und sehe den Domainnamen "Ihre API ist erreichbar unter" und kopiere ihn sofort und füge ihn in Postman ein, um ihn zu überprüfen.
Ich bekomme die verbotene Nachricht. Ändere nichts. Überprüfen Sie alle Einstellungen, um sicherzustellen, dass ich nichts getan habe - alles ist korrekt. Ein bisschen meine Haare ausreißen.
Kommen Sie ein paar Minuten später zurück, um es zu versuchen, denn ich bin mir ziemlich sicher, dass ich alles richtig mache - es funktioniert.
DNS Mann. Egal wie schnell das Internet ist - es ist nicht sofort :)
quelle
Ich habe diesen Fehler von einem Nginx-Fargate-Dienst erhalten, der versucht, auf eine private API in API Gateway zuzugreifen. Ich musste in meiner API eine Richtlinie unter Ressourcenrichtlinien hinzufügen
quelle
Es gibt einige Dinge zu tun, wenn wir die {Nachricht: Verboten} im API-Gateway erhalten:
CORS aktiviert?
API-Schlüssel aktiviert?
Wenn Sie immer noch Probleme haben, lassen Sie es mich wissen, damit ich oder einer unserer Cloud-Gurus @levarne helfen kann.
quelle
Ich könnte auf eine Lösung für dieses Problem gestoßen sein. Ich hatte jetzt das gleiche Problem unter MacOS. Ich habe versucht, mein DNS zu leeren und dann hat es funktioniert!
Versuchen Sie dies im Terminal:
Mac OS X Yosemite und höher
Mac OS X Yosemite 10.10 bis 10.10.3
Mac OS X Mavericks, Berglöwe und Löwe
Mac OS X Schneeleopard
quelle
Lokale Firewall / Antivirus oder NGIPS ( Cisco Bluecoat ). Letzteres war mein Fall, in dem ich nicht einmal Protokolle in CloudWatch von meiner API erhalten würde. Es erlaubte meiner Domain-gehosteten Top-Level-Website, blockierte jedoch mit 403 die
api
Subdomain, ohne dass sich auf der Registerkarte "Netzwerk-Entwickler-Tools" des Browsers ein Text befand.quelle
Ich habe
{"message":"Forbidden"}
eine API mit EndpointConfiguration auf PRIVATE gesetzt und einen VpcEndpoint dafür in den privaten Subnetzen des Vpc erstellt (dies ist eine Inter-Service-API).Der Grund, den ich bekam,
{"message":"Forbidden"}
war, dass ich den Eindruck hatte, ich sollte eine der URLs des VpcEndpoint verwenden. Die zu verwendende URL ist immer noch die mit der Bühne verknüpfte (in der ApiGateway-Konsole). Es ist:https://${RestApiId}.execute-api.${Region}.amazonaws.com/${StageName}
quelle
Wir hatten dieses Problem in unserer Produktion, als wir Kong als API-Gateway verwendeten. Unsere Anfragen gingen durch, als sie von Postman initiiert wurden, gingen jedoch mit 403 fehl, wenn sie über Code initiiert wurden. Das Bot-Plugin in Kong wurde aktiviert, das nur Anforderungen zuließ, die vom Browser oder der mobilen App basierend auf dem Headerwert des Benutzeragenten initiiert wurden. Unsere über den HTTP-Client initiierten Anforderungen sind fehlgeschlagen. Sobald wir das Bot-Plugin deaktiviert haben, ist der Fehler nicht aufgetreten. Es ermöglicht jetzt die Anforderung, ob der Benutzeragent Apache-HttpClient / 4.5.2 (Java / 1.8.0_91) ist.
quelle
Ich bringe meine Erfahrung auch hier ein. Ich habe all diese Dinge oben ausprobiert und es stellte sich heraus, dass das Setzen der Domain mit einem Platzhalter mein {"message": "Forbidden"} -Problem gelöst hat : * .mydomain.com
quelle
Nur eine Anmerkung zu dem ähnlichen Fall, auf den ich mit Swagger Editor gestoßen bin:
403 Forbidden
mit dem{"message":"Forbidden"}
Körper zurück.curl
Der Befehl von Swagger Editor sah folgendermaßen aus:curl -X GET "https://xxx52xxxx9.execute-api.eu-central-1.amazonaws.com//Prod/users" -H "accept: application/json"
(Beachten Sie das Doppel
//
vorProd
).Und der gleiche
curl
Befehl ohne//
über die Kommandozeile funktioniert!Der Trick, der funktioniert hat, besteht darin, diese
server
in dem vom API-Gateway generierten Struktur zurückgegebene Struktur zu ersetzen :Mit dem vollen
url
ohnevariables
:Insbesondere hat das Entfernen des führenden Schrägstrichs
default: "/Prod"
nicht geholfen.quelle
In meinem Fall war der API-Schlüssel nicht aktiviert. Stellen Sie sicher, dass die API als Aktiviert festgelegt ist.
quelle
Wenn Sie also ein Setup haben, bei dem der gesamte Datenverkehr über einen API-Endpunkt geleitet werden soll, der den Datenverkehr dann an das API-Gateway weiterleitet, können die folgenden Parameter verwendet werden.
Wenn PrivateDnsEnabled aktiviert ist, muss der Endpunkt im API-Gateway vom Typ Privat sein und eine Richtlinie muss hinzugefügt werden.
Dieser Forenthread hat mir geholfen, einige Details zu klären
https://forums.aws.amazon.com/thread.jspa?threadID=286760
quelle