Wie kann ich Fehler beheben, bei denen der Zugriff verweigert wurde, wenn API-Gateway-APIs mit einer ressourcenbasierten Richtlinie aufgerufen werden?
Letzte Aktualisierung: 21.12.2022
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.
War dieser Artikel hilfreich?
Benötigen Sie Hilfe zur Fakturierung oder technischen Support?