1 votes

Cloudfront retourne un code 403 pendant une minute après le téléchargement

J'ai une distribution CloudFront devant un bucket S3. Les URLs de CloudFront sont restreintes, et les clés doivent être signées par URL. Le bucket S3 est également restreint, autorisant seulement CloudFront à lire.

Parfois, après avoir réussi à télécharger une image sur mon S3, CloudFront renvoie une erreur 403 lorsque j'essaie ensuite de récupérer l'image. Cela dure environ une minute, après quoi CloudFront commence à servir l'image correctement.

Cela se produit même après que l'image ait été téléchargée avec succès, et je peux la voir manuellement en allant dans la console S3.

0 votes

Le 403 est probablement mis en cache depuis avant la fin du téléchargement.

0 votes

Oui @jordanm a raison, c'est exactement ça. Je pense qu'il y a un doublon ici, mais il pourrait être sur SO. Recherche en cours...

0 votes

Ajoutez /index.html dans votre url et vérifiez ?

3voto

Michael - sqlbot Points 21488

Quelque chose fait que vos fichiers sont demandés à CloudFront avant qu'ils ne soient présents dans le bucket. La configuration par défaut de CloudFront fait en sorte que cela soit mis en cache de manière négative pendant jusqu'à 5 minutes.

Par défaut, lorsque votre origine renvoie un code d'état HTTP 4xx ou 5xx, CloudFront met en cache ces réponses d'erreur pendant cinq minutes, puis soumet la prochaine requête pour l'objet à votre origine pour vérifier si le problème ayant causé l'erreur a été résolu et si l'objet demandé est maintenant disponible.

— http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html

Si le navigateur, ou quoi que ce soit d'autre, essaie de télécharger le fichier à partir de ce bord de CloudFront particulier (ou de tout autre bord, si la requête passe également par le bord régional -- CloudFront a maintenant deux couches de bord) avant que le transfert dans S3 ne soit complet, S3 renverra une erreur, et CloudFront -- à cet emplacement de bord -- mettra cette erreur en cache et se souviendra, pendant les 5 prochaines minutes, de ne pas essayer à nouveau.

Ce minuteur est configurable.

Vous pouvez spécifier la durée de mise en cache des erreurs (le Temps de Mise en Cache Minimum des Erreurs) pour chaque code d'état 4xx et 5xx mis en cache par CloudFront. Pour une procédure, voir Configuration du Comportement des Réponses d'Erreur.

— http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html

Définissez la valeur sur 0 pour tous les codes d'erreur, comme 403, où vous souhaitez désactiver la mise en cache des erreurs.

Le contenu de cette réponse est adapté de mon article original sur Stack Overflow.

0 votes

Alors pourquoi est-ce un 403 et non un 404 ?

3 votes

Il s'agit du modèle de sécurité. Avec S3, par défaut, un utilisateur n'a pas la permission de savoir si un objet spécifique existe ou non, même s'il est autorisé à télécharger certains objets du bucket. 403 Interdit, dans ce cas, signifie "le serveur a refusé de vous dire si un objet existe réellement à cette URL." Il est possible de configurer S3 pour renvoyer une erreur 404 avec le message "Pas de clé telle que celle-ci", mais cette option doit être configurée très soigneusement -- sinon, il est possible pour un utilisateur de télécharger la liste entière de tout ce qui se trouve dans le bucket.

0 votes

Vous penseriez que vu que l'URL est signée uniquement pour l'objet a, il peut savoir si l'objet a existe ou non sans avoir accès aux métadonnées sur l'objet b

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X