Je déploie une application Web simple sur S3
via amplify publish
. L'hébergement a activé Cloudfront
(j'ai sélectionné l'environnement PROD dans amplify lors de la configuration de l'hébergement) et je travaille dans la région eu-central-1
. Mais chaque fois que j'essaye d'accéder à l'URL Cloudfront
, je reçois une erreur AccessDenied
.
J'ai suivi un tutoriel sur https://medium.com/quasar-framework/creating-a-quasar-framework-application-with-aws-amplify-services-part-1-4-9a795f38e16d et la seule chose que j'ai faite différemment était la région (le tutoriel utilise us-east-1
alors que j'utilise eu-central-1
).
La configuration de S3 et Cloudfront a été réalisée par amplify et devrait donc fonctionner en théorie:
Cloudfront:
quasar-demo-hosting-bucket-dev.s3-eu-central-1.amazonaws.com
(à l'origine, il était sans eu-central-1
, mais je l'ai ajouté manuellement après que cela n'a pas fonctionné ).hostingS3Bucket
S3 Origin
Stratégie de compartiment S3:
{ "Version": "2012-10-17", "Id": "MyPolicy", "Statement": [ { "Sid": "APIReadForGetBucketObjects", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ********" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::quasar-demo-hosting-bucket-dev/*" } ] }
Des recherches m'ont montré que Cloudfront
peut avoir des problèmes temporaires pour accéder aux Cloudfront
S3
dans d'autres régions. Mais j'ai ajouté manuellement la région à l'origine dans Cloudfront
ET j'ai attendu 24h. J'obtiens toujours le "accès refusé".
Je soupçonne que cela a quelque chose à voir avec le S3
ne se trouve pas dans la région par défaut us-east-1
et amplifie le fait de ne pas configurer correctement Cloudfront
dans ce cas.
Comment puis-je être amplifié pour configurer correctement le Cloudfront
S3
et Cloudfront
afin que je puisse accéder à mon site Web via l'URL Cloudfront
?
3 Réponses :
Merci pour l'information supplémentaire.
votre stratégie de compartiment S3
semble correcte.
En ce qui concerne le Origin Domain name or Path
, c'est toujours le S3
apparaît dans la liste déroulante donc pas besoin de le mettre à jour avec la region
Cependant, il manque un paramètre dans votre Cloudfront Origin
.
vous devez sélectionner Restrict Bucket access
au Restrict Bucket access
sur Yes
Selon la AWS documentation
Si vous souhaitez exiger que les utilisateurs accèdent toujours à votre contenu Amazon S3 à l'aide d'URL CloudFront, et non d'URL Amazon S3, cliquez sur Oui. Ceci est utile lorsque vous utilisez des URL signées ou des cookies signés pour restreindre l'accès à votre contenu. Dans l'aide, consultez «Diffusion de contenu privé via CloudFront
Créez maintenant une new Identity
ou select Existing Identity
Impressionnant! Merci beaucoup pour l'explication détaillée. Maintenant ça marche. Il semble donc y avoir un bogue dans l'amplification du fait qu'ils ne définissent pas l' Restricted Bucket Access
- je le leur signalerai.
@morgler l'avez-vous signalé? avez-vous un lien vers leur réponse? je souffre du même problème.
@cyrf Je ne l'ai pas signalé. Il me semble qu'Amplify est encore à des années-lumière de l'utilisation en production. Ils ont été aux prises avec tellement de problèmes au cours des 12 derniers mois que j'ai décidé de quitter Amplify. J'utilise maintenant serverless.com pour configurer mes environnements. Je ne peux qu'espérer qu'Amplify sera un jour prêt pour la production.
@morgler Je ne sais pas où vous en êtes avec cette erreur mais 8 mois plus tard, je suis toujours confronté au même problème. Merde, amplifiez.
@PrameshBajracharya Je donne une autre chance à Amplify cet automne et je constate certainement des progrès dans de nombreux domaines. Pour l'hébergement, vous pouvez désormais choisir un hébergement géré Amplify, qui prend en charge S3 et CloudFront pour vous - plus besoin de modifier manuellement les paramètres manquants. Essayez d' amplify update hosting
pour un site existant.
@morgler Oh, merci beaucoup pour les entrées. Je l'ai fait fonctionner il y a à peine quelques heures.
Pour ceux pour qui la première solution ne fonctionne pas, assurez-vous également que le javascript.config.DistributionDir
dans votre fichier project-config.json
est configuré correctement. Cela peut également provoquer l'erreur AccessDenied (comme je viens de l'apprendre à la dure).
Amplify s'attend à ce que le point d'entrée de votre application (index.html) soit au premier niveau du répertoire que vous avez configuré. Donc, si vous acceptez la configuration par défaut d'amplify ( dist
) et que vous utilisez un projet qui place les fichiers construits à un niveau plus profond dans la hiérarchie ( dist/<project name>
dans le cas de angular 8), alors cela se manifeste comme un 403 AccessDenied erreur après la publication. Cela est vrai pour les options d'hébergement amplify et s3.
docs:https://docs.aws.amazon.com/amplify/latest/userguide/manual-deploys.html (voir la fin)
Alors que la réponse de @ raj-paliwal m'a énormément aidé à résoudre mon problème d'origine, Amplify a depuis résolu le problème avec une nouvelle option.
Si vous tapez Amplify add hosting
(ou un Amplify update hosting
pour un site existant), Amplify vous offre l'option d' Hosting with Amplify Console
.
Choisir ceci créera également un environnement d'hébergement avec S3 et CloudFront, mais Amplify gérera tout pour vous. Avec cette option, je n'ai eu aucun problème. Il semble que cette première option corrige le bug que j'ai rencontré.
Si vous souhaitez mettre à niveau un site existant d'un Hosting with Amplify Console
CloudFront et S3 manuel vers un Hosting with Amplify Console
, vous devez appeler amplify update hosting
et sélectionner la nouvelle option.
pourriez-vous s'il vous plaît partager votre configuration de distribution S3 et Cloudfront.
J'ai ajouté les informations à la question @RajPaliwal. Tout a été automatiquement configuré de cette façon via
amplify
. La seule chose que j'ai modifiée (après que cela n'a pas fonctionné) était d'ajouter la partieeu-central-1
au chemin S3 configuré dans Cloudfront.