Comment résoudre les erreurs d'accès refusé lors de l'appel d'API d'API Gateway à l'aide d'une stratégie basée sur des ressources ?

Lecture de 4 minute(s)
0

Je reçois un message d'erreur d'accès refusé lorsque j'appelle une opération d'API d'Amazon API Gateway avec une stratégie de ressources.

Solution

Suivez les étapes de dépannage suivantes pour les opérations de votre API publique ou privée dans API Gateway.

Opérations d'API publique

1.    Vérifiez si l'opération d'API dispose d'une stratégie de ressources qui autorise ou bloque la demande en fonction des adresses IP. Si la journalisation des accès n'est pas configurée, vous devez configurer la journalisation des accès pour API Gateway. Les journaux d'accès contiennent les adresses IP sources de vos opérations d'API. Vérifiez que l'adresse IP ne figure pas dans la liste des refus. L'adresse IP ou la plage d'adresses CIDR doit explicitement autoriser l'accès dans la stratégie de ressources.

Exemple de stratégie de ressources qui n'autorise que trois adresses 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"
                    ]
                }
            }
        }
    ]
}

Exemple de stratégie de ressources qui bloque deux adresses 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.    La méthode HTTP (GET, POST) et la ressource API Gateway (/, /foo, /foo/bar) pour la demande d'API doivent autoriser l'accès explicitement. Vérifiez que l'attribut de la stratégie de ressources ressemble à ce qui suit :

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

3.    Vérifiez si la stratégie de ressources utilise d'autres types de méthodes d'authentification ou d'autorisations. L'évaluation de la stratégie de ressources par API Gateway dépend de votre type d'authentification. Les exemples de types d'authentification incluent un mécanisme d'autorisation AWS Lambda ou une authentification Amazon Cognito. Vérifiez que la stratégie de ressources est correctement configurée pour le type d'authentification défini pour votre API.

4.    Veillez à redéployer votre demande d'API de manière à appliquer toutes les modifications. Pour redéployer votre demande d'API, répétez les actions de déploiement d'une API REST dans une étape.

5.    Si vous utilisez un exemple de stratégie de ressources API Gateway, assurez-vous d'avoir configuré toutes les variables de votre environnement.

6.    Si votre stratégie de ressources autorise uniquement l'accès aux adresses IP situées dans votre Amazon Virtual Private Cloud (Amazon VPC), effectuez l'une des opérations suivantes :

Autorisez l'accès à l'adresse IP du routeur et à l'adresse IP de la passerelle NAT (adresse IP publique) dans votre stratégie de ressources.

-ou-

Remplacez le point de terminaison de l'API publique par un point de terminaison d'API privée.

Opérations d'API privée

1.    Si la stratégie de ressources comporte un point de terminaison d'un Amazon VPC, vérifiez si elle contient la clé de condition. Si la stratégie de ressources utilise la clé de condition aws:SourceVpce, sa valeur doit être l'ID du point de terminaison d'un Amazon VPC, et non l'ID du VPC. Si la stratégie de ressources utilise la clé de condition aws:SourceVpc, sa valeur doit être l'ID d'Amazon VPC, et non l'ID du point de terminaison du VPC.

Pour vérifier le type du point de terminaison, ouvrez la console Amazon VPC, choisissez Points de terminaison, puis cliquez sur votre point de terminaison.

2.    Veillez à redéployer votre demande d'API de manière à appliquer toutes les modifications. Pour redéployer votre demande d'API, répétez les actions de déploiement d'une API REST dans une étape.

3.    Si vous utilisez un exemple de stratégie de ressources API Gateway, assurez-vous de configurer toutes les variables pour votre environnement.

4.    La méthode HTTP (GET, POST) et la ressource API Gateway (/, /foo, /foo/bar) pour la demande d'API doivent autoriser l'accès explicitement. Vérifiez que l'attribut de la stratégie de ressources ressemble à ce qui suit :

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

5.    Vérifiez si la stratégie de ressources utilise d'autres types de méthodes d'authentification ou d'autorisations. L'évaluation de la stratégie de ressources par API Gateway dépend de votre type d'authentification. Les exemples de types d'authentification incluent un mécanisme d'autorisation AWS Lambda ou une authentification Amazon Cognito. Vérifiez que la stratégie de ressources est correctement configurée pour le type d'authentification défini pour votre API.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an