Saltar al contenido

Archivo en S3 con CloudFront devuelve "Access Denied"

0

Hola a todos,

Soy un desarrollador que está aprendiendo a usar AWS para un proyecto personal. Es un pequeño sitio para compartir recursos (un resource pack y una app de ayuda en formato APK) para un servidor de Minecraft con mis amigos.

He subido los archivos a un bucket de S3 y he configurado una distribución de CloudFront para servirlos más rápido y de forma segura, restringiendo el acceso directo al bucket.

El problema: Al intentar acceder al archivo APK a través de la URL de CloudFront, recibo constantemente un error XML de "Access Denied". El acceso directo al archivo en S3 (si lo hago público temporalmente) funciona bien, por lo que el problema parece estar en la conexión entre CloudFront y S3.

Lo que he intentado hasta ahora:

  1. Origin Access Identity (OAI): He creado una OAI y la he asociado a mi distribución de CloudFront.

  2. Bucket Policy: He actualizado la política del bucket de S3 para permitir la acción s3:GetObject únicamente a la OAI. La política se ve así:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E12345EXAMPLE"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::mi-bucket-de-minecraft/*"
            }
        ]
    }
  3. Invalidación de Caché: He creado invalidaciones (/*) en CloudFront después de cada cambio en la configuración para asegurarme de que no estoy viendo una respuesta almacenada en caché.

A pesar de todo esto, el error persiste.

Mi objetivo final es tener una página de aterrizaje simple y funcional para este proyecto. De hecho, estoy usando el diseño limpio y directo de este sitio como inspiración: https://modhello.io/

Desde esa futura página, los usuarios podrían descargar los archivos que ahora mismo me están dando problemas en CloudFront.

¿Alguien ha enfrentado un problema similar al servir archivos estáticos (especialmente APKs, por si hubiera alguna particularidad con el MIME type) a través de CloudFront con un origen S3 privado? ¿Hay algún detalle en la configuración de permisos o encabezados que podría estar pasando por alto?

Agradezco de antemano cualquier ayuda o sugerencia.

preguntada hace 8 meses150 visualizaciones
1 Respuesta
0

El error "Access Denied" que estás experimentando al intentar acceder a tu archivo APK a través de CloudFront es un problema común que puede tener varias causas. Basado en la información que has proporcionado, aquí hay algunas posibles soluciones:

  1. Verifica el tipo de origen que estás utilizando: Asegúrate de que estás utilizando el endpoint REST API de S3 como origen en CloudFront (formato: bucket-name.s3.amazonaws.com) y no el endpoint de sitio web de S3. Si estás utilizando el endpoint de sitio web, CloudFront no podrá autenticarse correctamente con tu OAI.

  2. Considera actualizar a Origin Access Control (OAC): OAC es el enfoque más moderno y recomendado para la comunicación segura entre CloudFront y S3, reemplazando al OAI. Esto podría resolver problemas de autenticación.

  3. Revisa la política del bucket: Tu política parece correcta, pero asegúrate de que:

  • El ARN de tu bucket es exactamente correcto
  • El ID de OAI en la política coincide exactamente con el que está configurado en CloudFront
  • No hay otras políticas o configuraciones de Block Public Access que puedan estar interfiriendo
  1. Verifica la configuración de comportamiento de caché: Asegúrate de que tu comportamiento de caché en CloudFront está configurado correctamente para reenviar los encabezados necesarios al origen.

  2. Comprueba el cifrado del bucket: Si tu bucket S3 utiliza cifrado del lado del servidor (SSE-S3), asegúrate de que CloudFront tiene los permisos necesarios para acceder a objetos cifrados.

  3. Verifica el estado de la distribución: Asegúrate de que el estado de tu distribución CloudFront es "Deployed" y no "In Progress".

  4. Prueba con curl: Utiliza curl para acceder a tu contenido directamente a través de la URL de CloudFront y presta atención a los errores y encabezados de respuesta, lo que puede ayudarte a identificar el problema.

Si has configurado recientemente tu distribución o has realizado cambios, ten en cuenta que CloudFront puede tardar algún tiempo en propagar completamente los cambios a todas las ubicaciones de borde, así que podría ser necesario esperar un poco más.
Sources
Access Denied for CloudFront to S3 static site | AWS re:Post
Access Denied for CloudFront to S3 | AWS re:Post
Request for Help: Access Denied Error with CloudFront and S3 Bucket Policy | AWS re:Post
Troubleshoot 403 Access Denied error in Amazon S3 | AWS re:Post

respondido hace 8 meses
EXPERTO
revisado hace 8 meses

No has iniciado sesión. Iniciar sesión para publicar una respuesta.

Una buena respuesta responde claramente a la pregunta, proporciona comentarios constructivos y fomenta el crecimiento profesional en la persona que hace la pregunta.