5
votes

Amplify publish provoque une erreur AccessDenied

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:

  • Nom de domaine ou chemin d'origine: 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é ).
  • ID d'origine: hostingS3Bucket
  • Type d'origine: 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 ?


2 commentaires

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 partie eu-central-1 au chemin S3 configuré dans Cloudfront.


3 Réponses :


5
votes

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

  • Cliquez sur le bouton Créer pour enregistrer l'origine.

entrez la description de l'image ici


6 commentaires

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.



6
votes

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)


0 commentaires

1
votes

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 .

entrez la description de l'image ici

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.


0 commentaires