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

4 minuti di lettura
0

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

Risoluzione

Segui queste fasi di risoluzione dei problemi per la tua operazione API di Gateway API pubblica o privata.

Operazioni API pubbliche

1.    Verifica se l'operazione API ha una policy di 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 Gateway API. I log di accesso contengono gli indirizzi IP di origine per le operazioni API. Assicurati che l'indirizzo IP non sia nell'elenco di rifiuto. 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 Gateway API (/, /foo, /foo/bar) per la richiesta API devono consentire esplicitamente l'accesso. Controlla l'attributo della policy delle risorse simile al seguente:

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

3.    Controlla se la policy delle risorse utilizza altri tipi di metodo di autenticazione o sistema di autorizzazione. La valutazione della policy delle risorse da parte di Gateway API dipende dal tipo di autenticazione. Alcuni esempi di tipo di autenticazione sono un Sistema di autorizzazione AWS Lambda o un'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 implementare nuovamente la tua richiesta API affinché tutte le modifiche abbiano effetto. Per implementare nuovamente la richiesta API, ripeti le fasi di implementazione di una REST API in una fase.

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

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

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, vai in Endpoint e seleziona il tuo endpoint.

2.    Assicurati di implementare nuovamente la tua richiesta API affinché tutte le modifiche abbiano effetto. Per implementare nuovamente la richiesta API, ripeti le fasi di implementazione di una REST API in una fase.

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

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

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

5.    Controlla se la policy delle risorse utilizza altri tipi di metodo di autenticazione o sistema di autorizzazione. La valutazione della policy delle risorse da parte di Gateway API dipende dal tipo di autenticazione. Alcuni esempi di tipo di autenticazione sono un Sistema di autorizzazione AWS Lambda o un'autenticazione Amazon Cognito. Assicurati che la policy delle risorse sia configurata correttamente per il tipo di autenticazione definito per la tua API.