¿Por qué aparece un error Acceso denegado cuando uso la característica de sitio web estático de Amazon S3?

7 minutos de lectura
0

Quiero saber por qué aparece un error Acceso denegado cuando uso un bucket de Amazon Simple Storage Service (Amazon S3) para alojar un sitio web estático con el punto de enlace de sitio web estático de S3.

Resolución

Si deseas alojar un sitio web estático con Amazon S3, pero aparece un error Acceso denegado, comprueba los siguientes requisitos:

Los objetos del bucket deben ser de acceso público

El punto de enlace del sitio web estático de S3 solo admite contenido de acceso público. Para comprobar si un objeto de tu bucket de S3 es de acceso público, abre la URL del objeto en un navegador web. Como alternativa, puedes usar un comando cURL en la URL.

A continuación se muestra un ejemplo de URL de un objeto de S3:

http://doc-example-bucket.s3-website-us-east-1.amazonaws.com/index.html

Si el navegador web o el comando cURK devuelven un error Acceso denegado, significa que el objeto no es de acceso público. Para permitir el acceso de lectura pública al objeto de S3, crea una política de bucket que permita el acceso de lectura pública para todos los objetos del bucket.

La política de bucket de S3 debe permitir el acceso a la acción s3:GetObject

Revisa tu política de bucket y asegúrate de que no haya ninguna instrucción de denegación que bloquee el acceso de lectura pública a la acción s3:GetObject. Aunque tengas una instrucción allow explícita para s3:GetObject en la política de bucket, confirma que no haya ninguna instrucción deny explícita que entre en conflicto. Una instrucción deny explícita siempre tiene preferencia sobre una instrucción allow explícita.

Para revisar la política de bucket de s3:GetObject, sigue estos pasos:

  1. Abre la consola de Amazon S3.
  2. Selecciona la pestaña Permisos.
  3. Elige Política de bucket.
  4. Revisa la política de bucket en busca de instrucciones con "Action": "s3:GetObject" o "Action": "s3:*".
  5. (Opcional) Modifica la política de bucket. Por ejemplo, puedes eliminar o editar las instrucciones que bloquean el acceso de lectura pública a s3:GetObject.

La cuenta de AWS propietaria del bucket también debe ser la propietaria del objeto

Para permitir el acceso público de lectura a los objetos, la cuenta de AWS propietaria del bucket también debe ser la propietaria de los objetos. Un bucket u objeto es propiedad de la cuenta de la identidad de AWS Identity and Access Management (IAM) que creó el bucket u objeto.

Nota: El requisito de propiedad del objeto se aplica al acceso de lectura público concedido por una política de bucket. No se aplica al acceso de lectura público que otorga la lista de control de acceso (ACL) del objeto.

Para comprobar si el bucket y los objetos de Amazon S3 pertenecen a la misma cuenta de AWS, lleva a cabo los siguientes pasos:

  1. Para recuperar el ID canónico de S3 del propietario del bucket, utiliza el siguiente comando:

    aws s3api list-buckets --query Owner.ID
  2. Para recuperar el ID canónico de S3 del propietario del objeto, utiliza el siguiente comando:

    aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html

    Nota: En este ejemplo se muestra un único objeto. Para revisar varios objetos, utiliza el comando list.

  3. Confirma si los ID canónicos del propietario del bucket y del propietario del objeto coinciden. Si no coinciden, significa que el bucket y el objeto tienen propietarios diferentes.
    Nota: También puedes usar la consola de Amazon S3 para comprobar los propietarios del bucket y del objeto. Los propietarios se encuentran en la pestaña Permisos del bucket u objeto correspondiente.

  4. Si los ID canónicos del propietario del bucket y del objeto no coinciden, cambia el propietario del objeto por el propietario del bucket.
    Desde la cuenta del propietario del objeto, usa el siguiente comando para recuperar los permisos de ACL asignados al objeto:

    aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name

    Si el objeto no tiene permisos de ACL bucket-owner-full-control, usa el siguiente comando desde la cuenta del propietario del objeto:

    aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control

    Si el objeto tiene permisos de ACL bucket-owner-full-control, usa el siguiente comando desde la cuenta del propietario del bucket. Este comando cambia el propietario del objeto copiando el objeto sobre sí mismo:

    aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD

    También puedes usar la propiedad del objeto de S3 para conceder al propietario del bucket la propiedad automática de cualquier objeto cargado por usuarios anónimos u otras cuentas de AWS.

Los objetos del bucket no se pueden cifrar con AWS KMS

AWS KMS no admite solicitudes anónimas. Como resultado, cualquier bucket de Amazon S3 que permita el acceso anónimo o público no se aplicará a los objetos cifrados con AWS KMS. Debes eliminar el cifrado de KMS de los objetos que quieres publicar mediante el punto de enlace del sitio web estático de Amazon S3.

Nota: En lugar del cifrado de AWS KMS, utiliza AES-256 para cifrar los objetos.

Puedes comprobar si un objeto de tu bucket está cifrado con KMS mediante los siguientes métodos:

  • Utiliza la consola de Amazon S3 para ver las propiedades del objeto. Revisa el cuadro de diálogo Cifrado. Si se ha marcado AWS KMS, el objeto está cifrado con KMS.
  • También puedes usar el comando head-object mediante Interfaz de la línea de comandos de AWS (AWS CLI). Si el comando devuelve ServerSideEncryption como aws:kms, el objeto estará cifrado con KMS.

Nota: Si se muestran errores al usar comandos de AWS CLI, comprueba si estás utilizando la versión más reciente de AWS CLI.

Para cambiar la configuración de cifrado del objeto mediante la consola de Amazon S3, consulta Especificación del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3).

Para usar AWS CLI para cambiar la configuración de cifrado del objeto, comprueba que el bucket del objeto no tenga AWS KMS como cifrado predeterminado. Si el bucket no tiene un cifrado predeterminado, elimina el cifrado del objeto copiando el objeto sobre sí mismo:

aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD

Advertencia: Al copiar el objeto sobre sí mismo, se elimina la configuración de storage-class y website-redirect-location. Para mantener esta configuración en el nuevo objeto, asegúrate de especificar explícitamente los valores de storage-class o website-redirect-locationen la solicitud de copia.

Los objetos que se solicitan deben existir en el bucket de S3

Si el usuario que realiza la solicitud no tiene los permisos s3:ListBucket, recibirá un error Acceso denegado para los objetos que faltan.

Puedes usar el comando head-object de AWS CLI para comprobar si un objeto existe en el bucket.

Nota: Los nombres de los objetos de S3 distinguen entre mayúsculas y minúsculas. Si la solicitud no tiene un nombre de objeto válido, Amazon S3 indicará que falta el objeto.

Si el objeto existe en el bucket, el error Acceso denegado no estará enmascarando un error 404, que indicaría que no se ha encontrado el objeto. Comprueba otros requisitos de configuración para solucionar el error Acceso denegado.

Si el objeto no está en el bucket, el error Acceso denegado estará enmascarando un error 404. Soluciona el problema relacionado con el objeto que falta.

Nota: Se desaconseja habilitar el acceso público a s3:ListBucket por cuestiones de seguridad. Si se habilita el acceso público a s3:ListBucket, los usuarios podrán ver todos los objetos en un bucket y generar un listado de estos. Este acceso expondría a los usuarios detalles de los metadatos del objeto, como la clave y el tamaño, aunque no tengan los permisos para descargar el objeto.

Bloqueo del acceso público de Amazon S3 debe desactivarse en el bucket

La configuración de Bloqueo del acceso público de Amazon S3 se puede aplicar a cuentas de AWS o a buckets individuales. Confirma que no se haya aplicado ninguna configuración de Bloqueo del acceso público de Amazon S3 a tu bucket de S3 ni a tu cuenta de AWS. Estas configuraciones pueden anular los permisos que permiten el acceso de lectura público.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 5 meses