Direkt zum Inhalt

Wie kann ich Fehler aufgrund eines verweigerten Zugriffs beheben, wenn ich API Gateway-APIs mit einer ressourcenbasierten Richtlinie aufrufe?

Lesedauer: 3 Minute
0

Ich erhalte deine Fehlermeldung aufgrund eines verweigerten Zugriffs, wenn ich eine Amazon API Gateway-API-Operation mit einer Ressourcenrichtlinie aufrufe.

Lösung

Befolge diese Schritte zur Problembehandlung der öffentlichen oder privaten API-Gateway-API-Operation.

Öffentliche API-Operationen

1.    Prüfe, ob die API-Operation über eine Ressourcenrichtlinie verfügt, die die Anforderung auf der Grundlage von IP-Adressen zulässt oder blockiert. Wenn du keine Zugriffsprotokollierung eingerichtet hast, richte die Zugriffsprotokollierung für API Gateway ein. Zugriffsprotokolle enthalten die Quell-IP-Adressen für deine API-Operationen. Vergewissere dich, dass die IP-Adresse nicht in der Verweigerungsliste enthalten ist. Die IP-Adresse oder der CIDR-Bereich müssen den Zugriff in der Ressourcenrichtlinie explizit 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-Anforderung müssen den Zugriff explizit zulassen. Überprüfe das Ressourcenrichtlinienattribut ähnlich dem folgenden:

"Resource": [
               "arn:aws:execute-api:<region>:<account_number>:<api_id>/<stage>/<http_method>/<resource_path_specifier>/*"
            ],

3.    Prüfe, ob die Ressourcenrichtlinie andere Arten von Authentifizierungsmethoden oder Genehmigern verwendet. Die API Gateway-Bewertung der Ressourcenrichtlinie wird vom Authentifizierungstyp beeinflusst. Zu den Authentifizierungstypen gehören beispielsweise ein AWS Lambda Authorizer oder eine Amazon Cognito-Authentifizierung. Stelle sicher, dass die Ressourcenrichtlinie für den für die API definierten Authentifizierungstyp korrekt konfiguriert ist.

4.    Stelle sicher, dass du die API-Anforderung erneut bereitstellst, damit alle Änderungen wirksam werden. Um die API-Anforderung erneut bereitzustellen, wiederhole die Schritte zur Bereitstellung einer REST-API in einer Stufe.

5.    Wenn du ein Beispiel für eine API Gateway-Ressourcenrichtlinie verwendest, stelle sicher, dass du alle Variablen für deine Umgebung konfiguriert hast.

6.    Wenn die Ressourcenrichtlinie nur den Zugriff auf IP-Adressen innerhalb der Amazon Virtual Private Cloud (Amazon VPC) zulässt, gehe wie folgt vor:

Erlaube in der Ressourcenrichtlinie den Zugriff auf die Router-IP-Adresse und die NAT-Gateway-IP-Adresse (öffentliche IP-Adresse).

-oder-

Ändere den öffentlichen API-Endpunkt in einen privaten API-Endpunkt.

Private API-Operationen

1.    Wenn die Ressourcenrichtlinie einen Amazon VPC-Endpunkt hat, überprüfe die Richtlinie für den Bedingungsschlüssel. Wenn die Ressourcenrichtlinie den Bedingungsschlüssel aws:SourceVpce verwendet, muss ihr Wert die Amazon VPC-Endpunkt-ID sein, nicht die VPC-ID. Wenn die Ressourcenrichtlinie den Bedingungsschlüssel aws:SourceVpc verwendet, muss ihr Wert die Amazon VPC-ID sein, nicht die VPC-Endpunkt-ID.

Um den Endpunkttyp zu überprüfen, öffne die Amazon VPC-Konsole, wähle Endpunkte und dann deinen Endpunkt aus.

2.    Stelle sicher, dass du die API-Anforderung erneut bereitstellst, damit alle Änderungen wirksam werden. Um die API-Anforderung erneut bereitzustellen, wiederhole die Schritte zur Bereitstellung einer REST-API in einer Stufe.

3.    Wenn du ein Beispiel für eine API Gateway-Ressourcenrichtlinie verwendest, stelle sicher, dass du alle Variablen für die Umgebung konfigurierst.

4.    Die HTTP-Methode (GET, POST) und die API-Gateway-Ressource (/,/foo,/foo/bar) für die API-Anforderung müssen den Zugriff explizit zulassen. Überprüfe das Ressourcenrichtlinienattribut ähnlich dem folgenden:

"Resource": [
               "arn:aws:execute-api:<region>:<account_number>:<api_id>/<stage>/<http_method>/<resource_path_specifier>/*"
            ],

5.    Prüfe, ob die Ressourcenrichtlinie andere Arten von Authentifizierungsmethoden oder Genehmigern verwendet. Die API Gateway-Bewertung der Ressourcenrichtlinie wird vom Authentifizierungstyp beeinflusst. Zu den Authentifizierungstypen gehören beispielsweise ein AWS Lambda Authorizer oder eine Amazon Cognito-Authentifizierung. Stelle sicher, dass die Ressourcenrichtlinie für den für die API definierten Authentifizierungstyp korrekt konfiguriert ist.