Wie kann ich Fehler beheben, bei denen der Zugriff verweigert wurde, wenn API-Gateway-APIs mit einer ressourcenbasierten Richtlinie aufgerufen werden?

Lesedauer: 3 Minute
0

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.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr