Utilizo la característica de sitio web estático de Amazon S3, pero aparece un error de acceso denegado. ¿Por qué sucede esto?

8 minutos de lectura
0

Utilizo un bucket de Amazon Simple Storage Service (Amazon S3) para alojar un sitio web estático con el punto de conexión de sitios web estáticos de S3. ¿Por qué aparece un error de acceso denegado?

Descripción breve

Si intenta alojar un sitio web estático con Amazon S3, pero aparece un error de acceso denegado, compruebe los siguientes requisitos:

  • Los objetos del bucket deben ser de acceso público.
  • La política del bucket de S3 debe conceder acceso a la acción s3:GetObject.
  • La cuenta de AWS que posee el bucket también debe ser propietaria del objeto.
  • AWS Key Management Service (AWS KMS) no puede cifrar los objetos.
  • Los objetos que se solicitan deben existir en el bucket de S3.
  • El bloqueo de acceso público de Amazon S3 debe estar desactivado a nivel de bucket y de cuenta.

Resolución

Los objetos del bucket deben ser de acceso público

El punto de conexión del sitio web estático de S3 únicamente admite contenido de acceso público. Para verificar si un objeto del bucket de S3 es de acceso público, abra la URL del objeto en un navegador web. O bien, puede ejecutar 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 cURL devuelven un error de acceso denegado, significa que el objeto no es de acceso público. Para permitir el acceso público de lectura al objeto de S3, cree una política de bucket que permita el acceso público de lectura para todos los objetos del bucket.

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

Revise la política del bucket y asegúrese de que no hay ninguna instrucción de denegación que bloquee el acceso de lectura público a la acción s3:GetObject. Incluso si tiene una instrucción de permiso explícita para s3:GetObject en la política del bucket, confirme que no haya una instrucción de denegación explícita que genere discrepancias. Una instrucción de denegación explícita siempre anulará una instrucción de permiso explícita.

Para revisar la política del bucket con respecto a s3:GetObject, realice los siguientes pasos:

1.    Abra la consola de Amazon S3.

2.    Haga clic en la pestaña Permisos.

3.    Elija Política del bucket.

4.    Revise la política del bucket en busca de instrucciones con “Acción”: “s3:GetObject” o “Acción”: “s3:*”.

5.    (Opcional) Modifique la política del bucket. Por ejemplo, puede eliminar o editar las instrucciones que bloquean el acceso público de lectura a s3:GetObject.

La cuenta de AWS que posee el bucket también debe ser propietaria del objeto

Para permitir el acceso público de lectura a los objetos, la cuenta de AWS que posee el bucket también debe ser 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 público de lectura concedido por una política de bucket. No se aplica al acceso público de lectura concedido por la lista de control de acceso (ACL) del objeto.

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

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

aws s3api list-buckets --query Owner.ID

2.    Para recuperar el ID canónico de S3 del propietario del objeto, utilice el siguiente comando:

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

Nota: Este ejemplo muestra un solo objeto. Para verificar varios objetos, utilice el comando enumerar.

3.    Confirme 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 diferentes propietarios.

Nota: También puede utilizar la consola de Amazon S3 para comprobar los propietarios de los buckets y de los objetos. Los propietarios se encuentran en la pestaña Permisos del respectivo bucket u objeto.

4.    Si los ID canónicos del bucket y del propietario del objeto no coinciden, cambie el propietario del objeto por el propietario del bucket.

Desde la cuenta del propietario del objeto, ejecute el siguiente comando para recuperar los permisos ACL asignados al objeto:

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

Si el objeto no tiene permisos de ACL de bucket-owner-full-control, ejecute 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 de bucket-owner-full-control, ejecute el siguiente comando desde la cuenta del propietario del bucket. Este comando cambia el propietario del objeto al copiar 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 puede utilizar S3 Object Ownership 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 pueden estar cifrados por AWS KMS

AWS KMS no admite solicitudes anónimas. Por lo tanto, cualquier bucket de Amazon S3 que permita el acceso anónimo o público no se aplicará a los objetos que estén cifrados con AWS KMS. Debe eliminar el cifrado KMS de los objetos que desee entregar mediante el punto de conexión del sitio web estático de Amazon S3.

Nota: En lugar de utilizar el cifrado de AWS KMS, utilice AES-256 para cifrar los objetos.

Puede revisar si un objeto en el bucket está cifrado por KMS por medio de los siguientes métodos:

  • Utilice la consola de Amazon S3 para ver las propiedades del objeto. Revise el cuadro de diálogo de cifrado. Si la opción AWS-KMS está seleccionada, significa que el objeto está cifrado por KMS.
  • Ejecute el comando head-object mediante la Interfaz de la línea de comandos de AWS (AWS CLI). Si el comando devuelve ServerSideEncryption como aws:kms, significa que el objeto está cifrado por KMS.

Nota: Si aparecen errores al ejecutar los comandos de AWS CLI, asegúrese de que utiliza la versión más reciente de AWS CLI.

Para cambiar la configuración de cifrado del objeto mediante la consola de Amazon S3, consulte Especificar el cifrado de Amazon S3.

Para cambiar la configuración de cifrado del objeto mediante AWS CLI, compruebe que el bucket del objeto no tiene cifrado predeterminado. Si el bucket no tiene cifrado predeterminado, entonces elimine el cifrado del objeto al copiar 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 eliminan las configuraciones de storage-class y website-redirect-location. Para mantener esta configuración en el nuevo objeto, asegúrese de especificar explícitamente los valores de storage-class o website-redirect-location en 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 permisos de s3:ListBucket, entonces el usuario recibe un error de Acceso Denegado por los objetos faltantes.

Puede ejecutar el comando head-object de AWS CLI para comprobar si existe un objeto 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 informará de que falta el objeto.

Si el objeto existe en el bucket, significa que el error de acceso denegado no está enmascarando un error 404 no encontrado. Verifique otros requisitos de configuración para resolver el error de Acceso Denegado.

Si el objeto no existe en el bucket, significa que el error de acceso denegado enmascara un error 404 no encontrado. Resuelva el problema relacionado con el objeto que falta.

Nota: No es una práctica recomendada de seguridad habilitar el acceso público s3:ListBucket. Habilitar el acceso público s3:ListBucket permite a los usuarios ver y listar todos los objetos de un bucket. Este acceso expone los detalles de los metadatos del objeto (por ejemplo, la clave y el tamaño) a los usuarios, incluso si estos no tienen permisos para descargar el objeto.

El bloqueo de acceso público de Amazon S3 debe estar desactivado en el bucket

La configuración del bloqueo de acceso público de Amazon S3 se puede aplicar a cuentas de AWS o a buckets individuales. Confirme que no hay ninguna configuración de bloqueo de acceso público de Amazon S3 aplicada al bucket de S3 o a la cuenta de AWS. Esta configuración puede anular los permisos que permiten el acceso público de lectura.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años