Salta al contenuto

Come posso risolvere gli errori di accesso negato quando richiamo le API di API Gateway con una policy basata sulle risorse?

4 minuti di lettura
0

Ricevo un errore di accesso negato quando richiamo un'operazione API di Amazon API Gateway con una policy delle risorse.

Risoluzione

Segui questi passaggi per la risoluzione dei problemi per un’operazione API di Gateway API pubblica o privata.

Operazioni API pubbliche

1.    Verifica se l'operazione API ha una politica delle risorse che consente o blocca la richiesta in base agli indirizzi IP. Se non hai impostato la registrazione degli accessi, configura la registrazione degli accessi per API Gateway. I log di accesso contengono gli indirizzi IP di origine per le operazioni API. Assicurati che l'indirizzo IP non sia presente nell'elenco dei messaggi negati. L'indirizzo IP o l'intervallo CIDR deve consentire esplicitamente l'accesso nella policy delle risorse.

Esempio di policy delle risorse che consente solo tre indirizzi IP:

{
    "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"
                    ]
                }
            }
        }
    ]
}

Esempio di policy delle risorse che blocca due indirizzi IP:

{
    "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.    Il metodo HTTP (GET, POST) e la risorsa API Gateway (/,/foo,/foo/bar) per la richiesta API devono consentire esplicitamente l'accesso. Controlla l'attributo della politica delle risorse simile al seguente:

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

3.    Verifica se la policy delle risorse utilizza altri tipi di metodi di autenticazione o autorizzatori. La valutazione della politica delle risorse da parte di API Gateway è influenzata dal tipo di autenticazione. Gli esempi di tipo di autenticazione includono un autorizzatore AWS Lambda o l'autenticazione Amazon Cognito. Assicurati che la policy delle risorse sia configurata correttamente per il tipo di autenticazione definito per la tua API.

4.    Assicurati di ridistribuire la tua richiesta API affinché tutte le modifiche abbiano effetto. Per ridistribuire la tua richiesta API, ripeti i passaggi per distribuire un'API REST in una fase.

5.    Se stai utilizzando un esempio di policy delle risorse di API Gateway, assicurati di aver configurato tutte le variabili per il tuo ambiente.

6.    Se la tua policy delle risorse consente l'accesso solo ai tuoi indirizzi IP di Amazon Virtual Private Cloud (Amazon VPC), esegui una delle seguenti azioni:

Consenti l'accesso all'indirizzo IP del router e all'indirizzo IP del gateway NAT (indirizzo IP pubblico) nella tua policy delle risorse.

-oppure-

Cambia l'endpoint API pubblico in un endpoint API privato.

Operazioni API private

1.    Se la policy delle risorse ha un endpoint Amazon VPC, controlla la policy per la chiave di condizione. Se la policy delle risorse utilizza la chiave di condizione aws:SourceVpce, il suo valore deve essere l'ID dell'endpoint Amazon VPC, non l'ID del VPC. Se la policy delle risorse utilizza la chiave di condizione aws:SourceVpc, il suo valore deve essere l'ID dell’Amazon VPC, non l'ID dell'endpoint VPC.

Per verificare il tipo di endpoint, apri la console Amazon VPC, scegli Endpoint, quindi scegli il tuo endpoint.

2.    Assicurati di ridistribuire la tua richiesta API affinché tutte le modifiche abbiano effetto. Per ridistribuire la tua richiesta API, ripeti i passaggi per distribuire un'API REST in una fase.

3.    Se stai utilizzando un esempio di policy delle risorse di API Gateway, assicurati di configurare tutte le variabili per il tuo ambiente.

4.    Il metodo HTTP (GET, POST) e la risorsa API Gateway (/,/foo,/foo/bar) per la richiesta API devono consentire esplicitamente l'accesso. Controlla l'attributo della politica delle risorse simile al seguente:

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

5.    Verifica se la policy delle risorse utilizza altri tipi di metodi di autenticazione o autorizzatori. La valutazione della politica delle risorse da parte di API Gateway è influenzata dal tipo di autenticazione. Gli esempi di tipo di autenticazione includono un autorizzatore AWS Lambda o l'autenticazione Amazon Cognito. Assicurati che la policy delle risorse sia configurata correttamente per il tipo di autenticazione definito per la tua API.