amazon web services - code - Acceso denegado a AWS CloudFront a S3 bucket
s3 bucket policy public read (4)
Estoy tratando de configurar CloudFront
para que sirva los archivos estáticos alojados en mi S3
. He configurado la distribución, pero obtengo AccessDenied
al intentar buscar el archivo CSS ( /CSS/stlyle.css
) dentro de S3 bucket:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>E193C9CDF4319589</RequestId>
<HostId>
xbU85maj87/jukYihXnADjXoa4j2AMLFx7t08vtWZ9SRVmU1Ijq6ry2RDAh4G1IGPIeZG9IbFZg=
</HostId>
</Error>
He establecido mi distribución de CloudFront en mi grupo de S3 y he creado una nueva Origin Access Identity policy
que se agregó automáticamente al grupo de 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/*"
}
]
}
¿Me he perdido algo?
Quiero que todos mis archivos en este cubo de S3 se sirvan a través de CloudFront ...
* ACTUALIZACIÓN *
Esta guide frontal de la nube dice:
De forma predeterminada, su depósito de Amazon S3 y todos los objetos que contiene son privados: solo la cuenta de AWS que creó el depósito tiene permiso para leer o escribir los objetos que contiene. Si desea permitir que cualquier persona acceda a los objetos en su depósito de Amazon S3 utilizando las URL de CloudFront, debe otorgar permisos de lectura públicos a los objetos. (Este es uno de los errores más comunes cuando se trabaja con CloudFront y Amazon S3. Debe otorgar privilegios explícitamente a cada objeto en un depósito de Amazon S3).
Por lo tanto, en base a esto, he agregado nuevos permisos a todos los objetos dentro del grupo S3 para que Everyone Read/Download
. Ahora puedo acceder a los archivos.
Pero ahora, cuando accedo al archivo como https://d3u61axijg36on.cloudfront.net/css/style.css
esto se está redirigiendo a S3 URI y HTTP
. ¿Cómo desactivo esto?
Agregué ''index.html'' en el Default Root Object
en la pestaña General de ''Configuración de distribución'' de cloudFront y funcionó para mí. Como index.html fue el archivo raíz de mi proyecto!
En lugar de elegir el cubo de s3 predeterminado para el nombre de dominio de origen, ingrese el <bucket-name>.s3-website.<region>.amazonaws.com
como nombre de dominio de origen (puede obtener esta URL en la propiedad de alojamiento de sitios web estáticos bajo las propiedades del bucket de S3 ).
En mi caso, estaba usando varios orígenes con comportamientos de "patrón de ruta" junto con una ruta de origen en mi cubo S3:
Mala configuración:
Comportamiento de CloudFront: /images/*
-> My-S3-origin
Origen de My-S3: Ruta de origen: /images
Archivos S3: /images/my-image.jpg
Solicitud GET: /images/my-image.jpg -> 403
Lo que estaba sucediendo era que toda la solicitud GET de CloudFront se enviaba al origen: /image/my-image.jpg
prefijo Path de origen: /images
, por lo que la solicitud en S3 se parece a /images/images/my-image.jpg
que no no existe
Solución
eliminar ruta de origen.
Para ayudar con su pregunta, recreé la situación a través de:
- Creó un cazo de Amazon S3 sin política de cazo.
- Subió public.jpg y hágalo público a través de "Hacer público".
- Subido private.jpg y lo mantuve privado
- Creó una distribución web de Amazon CloudFront:
- Nombre de dominio de origen: Seleccioné mi cubo S3 de la lista
- Restringir el acceso de cubo: Sí
- Identidad de acceso al origen: crear una nueva identidad
- Otorgar permisos de lectura en Bucket: Sí, actualizar política de Bucket
Revisé el cubo, y CloudFront había agregado una Política de cubo similar a la suya.
La distribución fue marcada como In Progress
por un tiempo. Una vez que dijo Enabled
, xxx.cloudfront.net
a los archivos a través de la URL xxx.cloudfront.net
:
-
xxx.cloudfront.net/public.jpg
me redirigió a la URL de S3http://bucketname.s3.amazonaws.com/public.jpg
. Sí, podría ver el archivo, pero no debería usar una redirección. -
xxx.cloudfront.net/private.jpg
también me redirigió , pero luego recibíAccess Denied
porque es un archivo privado en S3.
Luego hice una research y encontré que esto es bastante común. Algunas personas utilizan una solución al apuntar su distribución de CloudFront a la URL del sitio web alojado , pero esto tiene la desventaja de que no funcionará con la Identidad de Acceso al Origen y también sospecho que no recibirá el ''tráfico S3 gratuito hasta el borde'' descuento.
Entonces, esperé durante la noche, lo probé esta mañana y todo está funcionando bien .
En pocas palabras: incluso si dice ENABLED
, las cosas pueden tardar varias horas (por ejemplo, durante la noche) en ponerse en forma. Entonces funcionará como se documenta.