¿Por qué aparece el error «403 access denied» cuando uso un punto de enlace del sitio web de Amazon S3 como origen de mi distribución de CloudFront?
Utilizo un bucket de Amazon Simple Storage Service (Amazon S3) como origen de mi distribución de Amazon CloudFront. Quiero solucionar el error «403 access denied».
Solución
Para solucionar los problemas de las distribuciones de CloudFront con puntos de enlace del sitio web de Amazon S3 como origen, complete las siguientes tareas.
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Revisión del cifrado de los objetos de el bucket
AWS Key Management Service (AWS KMS) no admite solicitudes anónimas. Los buckets de Amazon S3 que permiten el acceso anónimo o público no aplican este acceso a los objetos cifrados con AWS KMS. Elimine el cifrado de AWS KMS de los objetos de S3 que desee para el servicio. En lugar del cifrado de AWS KMS, utilice AES-256 para cifrar los objetos.
Determinación de si los objetos están cifrados con AWS KMS
Para comprobar si los objetos de su bucket están cifrados con AWS KMS, complete las siguientes tareas:
Visualiza las propiedades del objeto en la consola de Amazon S3. Si se ha seleccionado AWS-KMS en la ventana de diálogo Cifrado, el objeto estará cifrado con AWS KMS.
Como alternativa, usa el comando head-object en AWS CLI. Si el comando devuelve ServerSideEncryption como aws:kms, el objeto estará cifrado con AWS KMS.
Cambio de la configuración de cifrado de un objeto
Para usar la consola de Amazon S3 para cambiar la configuración de cifrado del objeto, consulte Especificación del cifrado del lado del servidor con AWS KMS (SSE-KMS).
Para usar la AWS CLI para cambiar la configuración de cifrado del objeto, compruebe que el bucket del objeto no tenga AWS KMS como cifrado predeterminado. Si el bucket tiene AWS KMS como cifrado predeterminado, cámbielo a SSE-S3.
Si el bucket no tiene el cifrado predeterminado, ejecute el siguiente comando para copiar el objeto sobre sí mismo y eliminar el cifrado del objeto:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html
Nota: Sustituya DOC-EXAMPLE-BUCKET por el nombre del bucket. Al copiar el objeto sobre sí mismo, la acción elimina la configuración de storage-class y website-redirect-location. Para mantener esta configuración en el nuevo objeto, especifique explícitamente estos valores en la solicitud de copia.
Revisión de la política de bucket
La política de bucket no puede tener una instrucción deny que bloquee el acceso de lectura público a la acción s3:GetObject.
Si tiene una instrucción allow explícita para s3:GetObject, asegúrese de que no haya ninguna instrucción deny explícita que entre en conflicto con esta instrucción. Una instrucción deny explícita siempre tiene preferencia sobre una instrucción allow explícita.
Para revisar la política de bucket para s3:GetObject, siga estos pasos:
- Abra la consola de Amazon S3 y, a continuación, navegue hasta su bucket de S3.
- Seleccione la pestaña Permisos.
- Elija Política de bucket.
- Revise la política de bucket en busca de instrucciones con «Action»: « s3:GetObject » o «Action»: « s3:* ».
- Modifique la política de bucket para eliminar o editar las instrucciones que bloqueen el acceso de lectura público a s3:GetObject.
Por ejemplo, la siguiente política contiene una instrucción allow explícita para el acceso público a s3:GetObject. Sin embargo, también contiene una instrucción deny explícita para el acceso a s3:GetObject, a menos que la solicitud venga de una Amazon Virtual Private Cloud (Amazon VPC) concreta. Modifique esta política para permitir la acción s3:GetObject:
{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "Allow-OAI-Access-To-Bucket", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5#########" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] }, { "Sid": "Allow-Public-Access-To-Bucket", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] }, { "Sid": "Access-to-specific-VPCE-only", "Effect": "Deny", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c4d" } } } ] }
La siguiente política es un ejemplo de una política de bucket de Amazon S3 que permite el acceso público de solo lectura al punto de enlace del sitio web de S3:
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowPublicReadOnly", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } }
Revisión de la propiedad del objeto y el bucket
Para que una política de bucket permita 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.
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.
Confirmación de si el depósito y los objetos tienen el mismo propietario
Nota: Puedes utilizar la consola de Amazon S3 para comprobar los propietarios del objeto y el bucket. Encontrará los propietarios en la pestaña Permisos del objeto o el bucket.
Para usar la AWS CLI para comprobar los propietarios del objeto y el bucket, ejecute los siguientes comandos:
Ejecute el comando list-buckets para obtener el ID canónico de S3 del propietario del bucket:
aws s3api list-buckets --query Owner.ID
Ejecute el comando list-objects para obtener el ID canónico de S3 del propietario del objeto:
aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html
Nota: El resultado del comando del ejemplo anterior muestra un único objeto, pero puede usar el comando list-objects para comprobar varios objetos. Si los ID canónicos no coinciden, significa que el bucket y el objeto tienen propietarios diferentes.
Actualización de la propiedad del objeto
Los propietarios de buckets pueden gestionar la propiedad de los objetos con Propiedad del objeto de S3. La opción Propiedad del objeto de S3 está activada de forma predeterminada para todos los nuevos buckets de S3. Para actualizare un bucket existente, consulte Configuración de la propiedad de objetos en un bucket existente.
Se recomienda que los propietarios de buckets utilicen la opción Propiedad del objeto de S3 en todos los buckets. Además, se recomienda administrar los permisos a través de las políticas de buckets y roles de AWS Identity and Access Management (IAM).
Para eliminar las ACL del bucket y tomar posesión de todos los objetos del bucket, ejecute el comando put-bucket-ownership-controls:
aws s3api put-bucket-ownership-controls --bucket example-bucket --ownership-controls 'Rules=[{ObjectOwnership=BucketOwnerEnforced}]'
Si no quiere desactivar las ACL del bucket de S3, cambie el propietario del objeto por el propietario del bucket.
Siga estos pasos:
-
Desde la cuenta del propietario del objeto, ejecute el comando get-object-acl para recuperar los permisos de ACL asignados al objeto:
aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name
Nota: Si el objeto tiene permisos de ACL bucket-owner-full-control, pase directamente al paso 3.
-
Si el objeto no tiene permisos de ACL bucket-owner-full-control, ejecute el comando put-object-acl desde la cuenta del propietario del objeto:
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control
-
Desde la cuenta del propietario del bucket, ejecute el siguiente comando para copiar el objeto sobre sí mismo y cambiar el propietario del objeto:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html
Nota: Sustituya DOC-EXAMPLE-BUCKET por el nombre de su bucket. Sustituya DOC-EXAMPLE-BUCKET por el nombre de su bucket.
Revisión de la configuración de Bloqueo del acceso público para el bucket
Compruebe que no se haya aplicado la configuración de Bloqueo del acceso público de Amazon S3 al bucket ni a la cuenta. Estas configuraciones pueden anular los permisos que permiten el acceso de lectura público. La configuración de Bloqueo del acceso público de Amazon S3 se puede aplicar a cuentas de AWS o a buckets individuales.
Confirmación de si los objetos del bucket son de acceso público
Una distribución que usa un punto de enlace de sitio web solo admite contenido de acceso público. Para determinar si un objeto del bucket de S3 es de acceso público, abra la URL del objeto del punto de enlace del sitio web de S3 en un navegador web. Como alternativa, ejecute un comando curl en la URL.
Ejemplo:
http://DOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com/index.html
Si el navegador web o el comando curl devuelven un error Acceso denegado, significa que el objeto no es de acceso público.
Para permitir el acceso de lectura público, complete una de las siguientes tareas:
- Cree una política de bucket que permita el acceso de lectura público para todos los objetos en el bucket.
- Utilice la consola de Amazon S3 para permitir el acceso de lectura público para el objeto.
Revisión de la opción El solicitante paga
Si la opción El solicitante paga está activada, desactive la opción. Los buckets El solicitante paga no permiten el acceso a través de un punto de enlace de un sitio web.
Revisión del encabezado personalizado
Si usa el encabezado referer para restringir el acceso a su origen de punto de enlace de S3 desde CloudFront, compruebe su política de bucket. Verifique si el valor secreto o el token establecido en la política de bucket de S3 coincide con el valor del encabezado personalizado de origen de CloudFront.
Para usar una instrucción deny explícita en la política de bucket, debe haber una declaración allow que conceda acceso en función del encabezado referer. No puede conceder acceso solo con una instrucción deny explícita.
Por ejemplo, la siguiente política de bucket concede acceso al origen de S3 si la solicitud contiene la cadena «aws:Referer»:«MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER».
El encabezado personalizado de origen de CloudFront debe tener las siguientes configuraciones:
- Encabezado: referer
- Valor: MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER
Ejemplo de política de bucket:
{ "Version":"2012-10-17", "Id":"http referer policy example", "Statement":[ { "Sid":"Allow get requests originating from my CloudFront with referer header", "Effect":"Allow", "Principal":"*", "Action":"s3:GetObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{ "StringLike":{"aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER"} } } ] }
Nota: Dado que el valor de Entidad principal es un comodín («Principal»:«*»), la política de bucket de ejemplo concede acceso público (anónimo) al bucket. Debido a la instrucción condicional, la solicitud debe incluir el encabezado referer y el valor del encabezado debe coincidir con el valor en la política de bucket. Si no se cumple la instrucción condicional, no podrá acceder al origen de S3.
Revisión de la cuenta de administración de la organización
Utiliza la cuenta de administración de la organización en AWS Organizations para comprobar si existen políticas de control de servicio (SCP) de denegación. Revise las políticas de denegación de la acción s3:GetObject asociada a la raíz de la organización, la unidad organizativa (OU) o directamente a la cuenta.
Información relacionada
Solución de problemas de códigos de estado de respuesta a errores en CloudFront
¿Cómo puedo solucionar los errores 403 de acceso denegado de Amazon S3?
¿Cómo puedo utilizar CloudFront para ofrecer un sitio web estático alojado en Amazon S3?
Vídeos relacionados
Contenido relevante
- preguntada hace 20 díaslg...
- Como solucionar el error: Supplied Policy document is breaching Cloudwatch Logs policy length limit.Respuesta aceptadapreguntada hace 6 díaslg...
- preguntada hace un meslg...
- preguntada hace 8 díaslg...
- preguntada hace un meslg...
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 meses
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años