web-dev-qa-db-fra.com

obtenir un message: réponse interdite à partir de la passerelle API AWS

[résolu] Nouveauté AWS (et StackOverflow). J'essaie de créer un service lambda sur AWS et de le faire accéder de l'extérieur via la passerelle API sans authentification ni restriction.

Pour rendre les choses faciles, je mets la passerelle pour le moment comme un simulacre.

Sur la méthode Get de l'API, l'autorisation est définie sur None et la clé de l'API est not required.

Lorsque j'essaie, j'obtiens {"message":"Forbidden"} (Même message si je le connecte au service lambda actuel). 

Des conseils sur la façon de le rendre accessible? Merci

24
Fab

Si vous définissez l'option 'API Key Required' sur true, veuillez vérifier ci-dessous. 

  1. vous devez passer le paramètre d'en-tête HTTP 'x-api-key' à la passerelle API. 
  2. La clé API devait être créée. 
  3. En outre, vous devez vérifier un plan d'utilisation pour la clé API sur la console API Gateway.
40
Daniel Jihoon Oh

Dans le tableau de bord de la passerelle API, choisissez Ressources, cliquez sur Actions et choisissez Déployer l'API. Avant votre premier déploiement, la seule réponse que vous obtiendrez est le {"message":"Forbidden"}.

31
jneves

Si vous utilisez un nom de domaine personnalisé et oubliez de sélectionner le stockage intermédiaire de la destination, vous recevrez le message Forbidden.

Allez simplement à Custom Domain Names et cliquez sur Edit sous votre domaine, puis sélectionnez l’étape sous Base Path Mappings.

13
kontrollanten

J'ai eu un problème similaire, et j'ai eu ce qui suit:

  1. Un domaine personnalisé (Edge Optimized)
  2. Plusieurs étapes (dev, staging, prod)

Je n'ai pas non plus défini d'autorisation ni de restriction pour simplifier les choses.

J'ai pu résoudre le problème en ajoutant des mappages de chemins de base pour chacune de mes étapes (dev, staging, prod).

6
Joben R. Ilagan

Si Authorization et API KEY Required sont tous deux définis sur true pour la méthode, assurez-vous que vous avez les en-têtes suivants lors de l'envoi de la demande:

  1. Content-Type (généralement application/x-www-form-urlencoded en cas d'appel GET)
  2. Hôte
  3. X-Amz-Date
  4. Autorisation
  5. x-api-key

J'utilise POSTMAN pour les tests d'API, ce qui est assez fiable et ensuite c'est simple.

Remarque: N'ajoutez pas d'en-tête de clé x-api si vous avez défini API KEY REQUIRED sur FALSE . Si vous avez défini AUTHORIZATION sur FALSE, n'enregistrez pas d'en-tête d'autorisation. 

3
illusionx

Si vous définissez la clé 'API' requise sur true, vous devez transmettre la clé api comme en-tête.

La clé API est transmise sous le champ d’en-tête 'x-api-key'. Même après avoir ajouté ce champ dans l'en-tête, ce problème peut se produire. Dans ce cas, veuillez valider les points ci-dessous

  • Avez-vous un plan d'utilisation? sinon besoin d'en créer un.
  • Liez votre API au plan d'utilisation. Pour cela ajouter une étape, il faudra lier votre API.
  • Avez-vous une clé API? sinon, vous devez créer une clé API et l'activer.
  • Ajoutez le plan d'utilisation associé à votre API à cette clé API. Pour cela, ajoutez un plan d'utilisation.
3
bisw

Cela peut être loin d'être évident, mais une autre raison de voir l'erreur "Interdit" lors de l'utilisation de AWS API Gateway est peut-être l'appel d'une URL incorrecte qui ne correspond à aucune méthode d'API déployée. Cela peut se produire si vous tapez une mauvaise URL (par exemple, au lieu d'appeler https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users (remarque dev étape avant users), vous avez appelé https://9999xx9x99.execute-api.us-east-1.amazonaws.com/users (pas d'étape). Vous vous attendez à obtenir 404, mais vous obtiendrez 403.

BTW: après avoir effectué un déploiement pour https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users appeler https://9999xx9x99.execute-api.us-east-1.amazonaws.com/user (notez ici le nom du nom singulier), vous obtiendrez… 403 également, mais avec le message "Missing Authentication Token"!

1
madhead

J'ai eu cette erreur d'un service nginx fargate essayant d'accéder à une API privée dans API Gateway. J'avais besoin d'ajouter une stratégie sous les stratégies de ressources dans mon API, comme ceci

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:<AccountID>:<RestApiID>/*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": "<VPC Endpoint ID for execute-api>"
                }
            }
        }
    ]
}
1
gary69

Pare-feu/antivirus local ou NGIPS ( Cisco Bluecoat ). Ce dernier était mon cas, où je ne recevrais même pas les journaux dans CloudWatch à partir de mon API. Cela permettait à mon site Web hébergé de domaine de premier niveau, mais bloquait avec 403 le sous-domaine api, sans corps dans l'onglet outils de développement du navigateur du navigateur.

1
Radu

Il y a quelques choses à faire quand nous recevons le {message: interdit] dans la passerelle API:

CORS activé?

  1. Vérifiez si CORS est activé dans l'API (pour commencer, laissez l'Origine '*', pour vous assurer que nous pouvons tester en toute sécurité)
  2. Déployez l'API pour vous assurer que tous les paramètres sont conformes aux attentes

Clé API activée?

  1. Vérifier si la clé API est activée dans la passerelle API
  2. Vérifiez si une clé API est configurée.
  3. Vérifiez si votre clé d'API est affectée au plan d'utilisation approprié et ajoutez une étape API. Sans l'étape API, vous recevrez toujours un {message: interdit].

Si vous rencontrez toujours des problèmes, faites-le moi savoir afin que l'un de nos gourous du cloud @levarne puisse vous aider. 

1
Max Lans

Vous devez déployer votre API sur la scène et utiliser l'URL de la phase. Allez à Ressources, cliquez sur Actions et choisissez Déployer l'API

Maintenant, si vous obtenez une erreur 

{"message": "Interdit"}.

Veuillez vérifier les étapes suivantes 

1) Si vous activez la copie de la clé API et transmettez votre clé au facteur 

 enter image description here

2) Maintenant, vous obtenez toujours la même erreur signifie que vous devrez créer un plan d'utilisation 

 enter image description here

3) fixer une limite et assigner un plan à votre api

 enter image description here

0
vaquar khan

Nous avions rencontré ce problème dans notre production lorsque nous utilisions Kong comme passerelle API. Nos demandes ont été transmises lors du lancement à partir de Postman, mais ont échoué avec 403 lorsqu’elles ont été lancées via Code. Le plug-in Bot de Kong a été activé et autorisait uniquement les demandes lancées à partir du navigateur ou de l'application mobile en fonction de la valeur de l'en-tête de l'agent utilisateur. Nos demandes lancées via le client HTTP ont échoué. Une fois que nous avons désactivé le plugin bot, l'erreur ne s'est pas produite. Il autorise désormais les requêtes si l'agent utilisateur est Apache-HttpClient/4.5.2 (Java/1.8.0_91).

0
Cshah

Il se peut que je sois trop en retard mais une des raisons pour lesquelles API Gateway enverrait un message "interdit" est lorsque vous transmettez des données à la requête Body lors d'une opération GET. Pour résoudre le problème, créez votre ressource POST ou ne transmettez pas de données dans le corps de la demande.

0
Ignitious Nkwinika