Servicios web de Amazon: 403 prohibido. al servir una aplicación de varias páginas a través de Cloudfront desde s3

CorePress2024-01-25  10

En general, todo funciona, tengo un sitio web estático generado por Gatsby, una configuración de depósito s3 para alojamiento estático y una distribución en la nube para servir los archivos. El problema es que cuando voy a una subpágina y actualizo la página o voy directamente a una URL, aparece un error 403. Esto no sucede cuando agrego /index.html al final de la URL.

En la configuración de mi nube, tengo el objeto raíz predeterminado configurado en index.html, por lo que, según la documentación, todo debería funcionar. Este no es un SPA, por lo que configurar la página de error 403 en index.html no ayudará: simplemente redirigirá a la página de inicio.

El comportamiento deseado que busco es cuando el usuario va a la URL http://example.com/path/to/directory, y se sirve el archivo index.html de /path/to/directory/index.html.

Permisos del depósito S3:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[bucket-name]/*"
        },
        {
            "Sid": "2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/[user]"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[bucket-name]/*"
        },
        {
            "Sid": "3",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/[user]"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[bucket-name]/*"
        }
    ]
}

¿Ha definido el objeto raíz predeterminado como index.html en su distribución CF?

- Marcin

28/03/2021 a las 10:55

"En la configuración de mi nube, tengo el objeto raíz predeterminado configurado en index.html"

- Exanubes

28 de marzo de 2021 a las 11:26



------------------------------------

Me encontré con el mismo problema con las páginas localizadas de Gatsby cuando usaba Cloudfront con S3.

Funciona bien cuando se navega desde el documento de índice raíz. Pero no es así cuando intentas llamar directamente al subdirectorio desde la solicitud de URL.

Razón:

El objeto raíz predeterminado de Cloudfront se comporta de manera diferente al documento de índice de S3. Entonces, incluso si hay un archivo de índice presente en el subdirectorio, Cloudfront no lo devolverá en una solicitud de URL directa. Puedes leer más aquí

Soluciones:

Utilice la función LamdaEdge para que Cloudfront agregue index.html a la solicitud de URL si incluye un subdirectorio

Simplemente use S3 como proveedor de alojamiento de sitios web y agregue index.html como documento de índice. Sin embargo, no obtendrá el rendimiento de baja latencia de Cloudfront.

1

También puede agregar un comportamiento de error en CloudFront para devolver un 200 con el documento /index.html cada vez que recibe un 403 de S3. Si no está satisfecho con anular los 403 globalmente en su distribución de CloudFront, puede agregar el permiso s3:ListObjects en su política de depósito para CloudFront, de esa manera S3 devolverá 404 en lugar de 403 para objetos no existentes y usted lo hace.la configuración del comportamiento de error basado en 404 en lugar de 403

- Félix

29 de marzo de 2023 a las 1:06



------------------------------------

El objeto raíz predeterminado de Cloudfront se aplicará solo cuando un usuario solicite la URL raíz, no para las subcarpetas. El documento de índice para subcarpetas debe configurarse en S3: https://docs.aws.amazon.com/AmazonS3/latest/userguide/IndexDocumentSupport.html

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare