[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
Si vous définissez l'option 'API Key Required' sur true, veuillez vérifier ci-dessous.
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"}
.
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
.
J'ai eu un problème similaire, et j'ai eu ce qui suit:
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).
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:
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.
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
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"!
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>"
}
}
}
]
}
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.
Il y a quelques choses à faire quand nous recevons le {message: interdit] dans la passerelle API:
CORS activé?
Clé API activée?
Si vous rencontrez toujours des problèmes, faites-le moi savoir afin que l'un de nos gourous du cloud @levarne puisse vous aider.
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
2) Maintenant, vous obtenez toujours la même erreur signifie que vous devrez créer un plan d'utilisation
3) fixer une limite et assigner un plan à votre api
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).
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.