Wie kann ich Fehler beheben, bei denen der Zugriff verweigert wurde, wenn API-Gateway-APIs mit einer ressourcenbasierten Richtlinie aufgerufen werden?
Ich erhalte die Fehlermeldung „Zugriff verweigert“, wenn ich eine Amazon-API-Gateway-API-Operation mit einer Ressourcenrichtlinie aufrufe.
Lösung
Folgen Sie diesen Schritten zur Fehlerbehebung für Ihre öffentliche oder private API-Gateway-API-Operation.
Öffentliche API-Operationen
1. Prüfen Sie, ob die API-Operation über eine Ressourcenrichtlinie verfügt, die die Anforderung anhand von IP-Adressen zulässt oder blockiert. Wenn Sie keine Zugriffsprotokollierung eingerichtet haben, richten Sie die Zugriffsprotokollierung für API Gateway ein. Zugriffsprotokolle enthalten die Quell-IP-Adressen für Ihre API-Operationen. Stellen Sie sicher, dass die IP-Adresse nicht in der Ablehnungsliste steht. Die IP-Adresse oder der CIDR-Bereich müssen in der Ressourcenrichtlinie explizit den Zugriff zulassen.
Beispiel für eine Ressourcenrichtlinie, die nur drei IP-Adressen zulässt:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:<region>:<account_number>:<api_id>/*" }, { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:<region>:<account_number>:<api_id>/*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "52.36.146.106", "34.216.36.206/32", "205.251.233.179/32" ] } } } ] }
Beispiel für eine Ressourcenrichtlinie, die zwei IP-Adressen blockiert:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "arn:aws:execute-api:<region>:<account_number>:<api_id>/*" ] }, { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "arn:aws:execute-api:<region>:<account_number>:<api_id>/*" ], "Condition" : { "IpAddress": { "aws:SourceIp": ["52.36.146.106", "34.216.36.206/32" ] } } } ] }
2. Die HTTP-Methode (GET, POST) und die API-Gateway-Ressource (/, /foo, /foo/bar) für die API-Anfrage müssen den Zugriff explizit zulassen. Überprüfen Sie das Ressourcenrichtlinienattribut, das dem folgenden ähnelt:
"Resource": [ "arn:aws:execute-api:<region>:<account_number>:<api_id>/<stage>/<http_method>/<resource_path_specifier>/*" ],
3. Prüfen Sie, ob die Ressourcenrichtlinie andere Arten von Authentifizierungsmethoden oder Autorisatoren verwendet. Die API-Gateway-Bewertung der Ressourcenrichtlinie wird von Ihrem Authentifizierungstyp beeinflusst. Zu den Authentifizierungstypen gehören ein AWS Lambda Authorizer oder eine Amazon-Cognito-Authentifizierung. Stellen Sie sicher, dass die Ressourcenrichtlinie für den für Ihre API definierten Authentifizierungstyp korrekt konfiguriert ist.
4. Stellen Sie sicher, dass Sie Ihre API-Anfrage erneut bereitstellen, damit alle Änderungen wirksam werden. Um Ihre API-Anfrage erneut bereitzustellen, wiederholen Sie die Schritte zur Bereitstellung einer REST-API auf einer Stufe.
5. Wenn Sie ein Beispiel für eine API-Gateway-Ressourcenrichtlinie verwenden, stellen Sie sicher, dass Sie alle Variablen für Ihre Umgebung konfiguriert haben.
6. Wenn Ihre Ressourcenrichtlinie nur den Zugriff auf IP-Adressen innerhalb Ihrer Amazon Virtual Private Cloud (Amazon VPC) zulässt, gehen Sie wie folgt vor:
Erlauben Sie der Router-IP-Adresse und der NAT-Gateway-IP-Adresse (öffentliche IP-Adresse) in Ihrer Ressourcenrichtlinie den Zugriff.
-oder-
Ändern Sie den öffentlichen API-Endpunkt in einen privaten API-Endpunkt.
Private API-Operationen
1. Wenn die Ressourcenrichtlinie einen Amazon-VPC-Endpunkt hat, überprüfen Sie die Richtlinie auf den Bedingungsschlüssel. Wenn die Ressourcenrichtlinie den Bedingungsschlüssel aws:SourceVpce verwendet, muss sein Wert die Amazon-VPC-Endpunkt-ID sein, nicht die VPC-ID. Wenn die Ressourcenrichtlinie den Bedingungsschlüssel aws:SourceVPC verwendet, muss sein Wert die Amazon-VPC-ID sein, nicht die VPC-Endpunkt-ID.
Um den Endpunkttyp zu überprüfen, öffnen Sie die Amazon-VPC-Konsole, wählen Sie Endpunkte und wählen Sie dann Ihren Endpunkt aus.
2. Stellen Sie sicher, dass Sie Ihre API-Anfrage erneut bereitstellen, damit alle Änderungen wirksam werden. Um Ihre API-Anfrage erneut bereitzustellen, wiederholen Sie die Schritte zur Bereitstellung einer REST-API auf einer Stufe.
3. Wenn Sie ein Beispiel für eine API-Gateway-Ressourcenrichtlinie verwenden, stellen Sie sicher, dass Sie alle Variablen für Ihre Umgebung konfigurieren.
4. Die HTTP-Methode (GET, POST) und die API-Gateway-Ressource (/, /foo, /foo/bar) für die API-Anfrage müssen den Zugriff explizit zulassen. Überprüfen Sie das Ressourcenrichtlinienattribut, das dem folgenden ähnelt:
"Resource": [ "arn:aws:execute-api:<region>:<account_number>:<api_id>/<stage>/<http_method>/<resource_path_specifier>/*" ],
5. Prüfen Sie, ob die Ressourcenrichtlinie andere Arten von Authentifizierungsmethoden oder Autorisatoren verwendet. Die API-Gateway-Bewertung der Ressourcenrichtlinie wird von Ihrem Authentifizierungstyp beeinflusst. Zu den Authentifizierungstypen gehören ein AWS Lambda Authorizer oder eine Amazon-Cognito-Authentifizierung. Stellen Sie sicher, dass die Ressourcenrichtlinie für den für Ihre API definierten Authentifizierungstyp korrekt konfiguriert ist.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr