AWS CloudFront de refus d'accès à un compartiment S3
J'essaye de configurer CloudFront
pour servir les fichiers statiques hébergé dans mon S3
seau. J'ai de distribution de l'installation, mais je reçois AccessDenied
lorsque vous essayez de parcourir le CSS (/CSS/stlyle.css
) de fichiers à l'intérieur d'un compartiment S3:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>E193C9CDF4319589</RequestId>
<HostId>
xbU85maj87/jukYihXnADjXoa4j2AMLFx7t08vtWZ9SRVmU1Ijq6ry2RDAh4G1IGPIeZG9IbFZg=
</HostId>
</Error>
J'ai mis ma distribution CloudFront pour mon S3 seau et créé de nouveaux Origin Access Identity policy
qui a été automatiquement ajouté dans le compartiment S3:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E21XQ8NAGWMBQQ"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myhost.com.cdn/*"
}
]
}
Ai-je raté quelque chose?
Je veux que tous mes fichiers dans ce compartiment S3 être servi par CloudFront...
* Mise à JOUR *
Ce nuage avant guide dit:
Par défaut, votre compartiment Amazon S3 et tous les objets en sont privés—seulement le compte AWS qui a créé le seau a la permission de lire ou d'écrire des objets qu'il contient. Si vous souhaitez autoriser toute personne à accéder aux objets dans votre compartiment Amazon S3 à l'aide de CloudFront Url, vous devez accorder des autorisations de lecture pour les objets. (C'est l'une des erreurs les plus courantes lorsque vous travaillez avec CloudFront et Amazon S3. Vous devez explicitement d'accorder des privilèges à chaque objet dans un compartiment Amazon S3.)
Donc, sur cette base, j'ai ajouté de nouvelles autorisations de tous les objets à l'intérieur d'un compartiment S3 à Everyone Read/Download
. Maintenant, je peux accéder aux fichiers.
Mais maintenant, quand j'ai accès au fichier comme https://d3u61axijg36on.cloudfront.net/css/style.css
c'est d'être redirigé vers S3 URI et HTTP
. Comment puis-je désactiver cette option?
Je suis tombé sur ce sujet moi-même. Toujours en attente pour voir si c'est le cas...
OriginalL'auteur Primoz Rome | 2017-02-15
Vous devez vous connecter pour publier un commentaire.
Pour aider avec votre question, j'ai recréé la situation par le biais de:
J'ai vérifié le seau, et CloudFront avait ajouté un Seau, une Politique similaire à la vôtre.
La distribution a été marqué comme
In Progress
pendant un certain temps. Une fois qu'il a ditEnabled
, j'ai consulté les fichiers via lexxx.cloudfront.net
URL:xxx.cloudfront.net/public.jpg
redirigé moi pour le S3 URLhttp://bucketname.s3.amazonaws.com/public.jpg
. Oui, je pouvais voir le fichier, mais il ne devrait pas utiliser une redirection.xxx.cloudfront.net/private.jpg
redirigé moi aussi, mais j'ai ensuite reçuAccess Denied
parce que c'est un fichier privé dans S3.J'ai ensuite fait quelques recherche et trouve que c'est assez fréquent. Certaines personnes utilisent une solution de contournement en pointant leur distribution CloudFront pour la statique site web hébergé URL, mais cela a l'inconvénient que cela ne fonctionnera pas avec l'Origine de l'Accès à l'Identité et je pense aussi qu'il ne recevra pas le " libre-S3 trafic vers le bord de remise.
Donc, j'ai attendu la nuit, testé ce matin et tout fonctionne bien.
Ligne du bas: Même si elle dit
ENABLED
, les choses pourraient prendre plusieurs heures (par exemple la nuit) pour se faire la droite. Il travaille ensuite comme indiqué.Ce n'était pas évident pour moi, c'est que le cloudfront url ne PAS inclure le nom de bucket. c'est à dire 'xxxx.cloudfront.net/:path" et PAS "xxxx.cloudfront.net/bucketname/:path'
Si je pouvais avoir upvoted cette fois, je l'aurais fait. Ça m'a coûté des heures de ma vie.
Je ne suis pas à la suite de votre réponse. Si je fais des objets dans mon seau public, je peux y accéder via mon distribution CloudFront URL. C'est génial! Mais je peux aussi y accéder directement via l'URL S3. J'ai mis en place un protocole OAI afin que seulement mon CloudFront dist pouvez lire mes objets et personne d'autre ne peut. Je ne comprends pas l'utilisation de cette si mes objets sont publiques. Ai-je mal compris votre réponse? Je peux fournir plus d'informations pour préciser ma question?
C'est une vieille question. Si vous avez quelque chose à demander, s'il vous plaît créer une nouvelle question plutôt que de demander dans un commentaire.
OriginalL'auteur John Rotenstein
Dans mon cas, j'ai été en utilisant de multiples origines avec "parcours" des Comportements à l'Origine de Chemin dans mon compartiment S3:
Mauvaise installation:
CloudFront Comportement:
/images/*
->My-S3-origin
Mon-S3-origine:
Origine Path:
/images
S3 fichiers:
/images/my-image.jpg
Requête GET:
/images/my-image.jpg -> 403
Ce qui se passait a l'ensemble de la CloudFront OBTENIR la demande est envoyée à l'origine:
/image/my-image.jpg
préfixé par Origine Path:/images
, de sorte que la demande en S3 ressemble/images/images/my-image.jpg
qui n'existe pas.Solution
supprimer Origine Chemin.
OriginalL'auteur Scott Jungwirth
Au lieu de choisir par défaut s3 seau pour Origine un Nom de Domaine, veuillez entrer les
<bucket-name>.s3-website.<region>.amazonaws.com
l'origine de Nom de Domaine(Vous pouvez obtenir cette URL dans d'hébergement de site Statique de la propriété en vertu d'un compartiment S3 propriétés).OriginalL'auteur uday reddy
J'ai ajouté 'index.html" dans
Default Root Object
sous l'onglet Général de cloudFront 'Paramètres de Distribution" et il a travaillé pour moi.Comme index.html a la racine de fichier pour mon projet!
OriginalL'auteur Zohab Ali