
Hola tengo un problema recibo AccessDenied en mi dominio
Subo mi sitio a un AWS S3 Bucket, lo hago público, creo una página estática, pero cuando accedo a través de mi dominio.com/mypage obtengo un AccessDenied.
Desde aws mydomain.s3.amazonaws.com/mypage funciona bien.
Los DNS de mi dominio están configurados así
;; ANSWER SECTION:
mydomain.com. 2101 IN CNAME mydomain.s3.amazonaws.com.
mydomain.s3.amazonaws.com. 41342 IN CNAME s3-1-w.amazonaws.com.
s3-1-w.amazonaws.com. 219 IN CNAME s3-w.us-east-1.amazonaws.com.
s3-w.us-east-1.amazonaws.com. 3 IN A 52.217.69.36
¿Algún consejo para solucionar esto?
Respuesta1
Esto esde la documentación de soporte de Amazon:
Breve descripción:
Para solucionar errores de acceso denegado, determine si el nombre de dominio de origen de su distribución es un punto final de sitio web de S3 o un punto final de API REST de S3. Siga estos pasos para determinar el tipo de punto final:
- Abra la consola de CloudFront.
- Elija su distribución de CloudFront y luego elija Configuración de distribución.
- Elija la pestaña Orígenes y Grupos de orígenes.
- Elija la pestaña Orígenes y Grupos de orígenes.
Revise el nombre de dominio en Nombre de dominio de origen y ruta y luego determine el tipo de punto final según el formato del nombre de dominio.
Los puntos finales de la API REST utilizan este formato:
DOC-EXAMPLE-BUCKET.s3.amazonaws.com
Nota: asegúrese de seguir las reglas para nombrar los depósitos de Amazon S3.
Los puntos finales del sitio web utilizan este formato:
DOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com
Nota: Dependiendo de la región de AWS, el formato del punto final puede utilizar el formato de guión (s3-sitio web-Región) o el formato de puntos (s3-sitio web.Región).
Si su distribución utiliza un punto final de API REST, consulte Estoy usando un punto final de API REST de S3 como origen de mi distribución de CloudFront.¿Por qué recibo errores 403 de acceso denegado?
Si su distribución utiliza un punto final de sitio web, verifique los siguientes requisitos para evitar errores de acceso denegado:
- Los objetos del depósito deben ser de acceso público.
- AWS Key Management Service (AWS KMS) no puede cifrar los objetos del depósito.
- La política del depósito debe permitir el acceso a s3:GetObject.
- Si la política del depósito otorga acceso de lectura público, entonces la cuenta de AWS propietaria del depósito también debe ser propietaria del objeto. 5.Los objetos solicitados deben existir en el depósito.
- El acceso público al bloque de Amazon S3 debe estar deshabilitado en el depósito.
- Si el Solicitante paga está habilitado, entonces la solicitud debe incluir el parámetro solicitud-pagador.
- Si está utilizando un encabezado Referer para restringir el acceso desde CloudFront a su origen S3, revise el encabezado personalizado.
Nota: Si no desea permitir el acceso público (anónimo) acceda a sus objetos S3, luego cambie su configuración para usar el punto final de la API REST de S3 como origen de su distribución. Luego, configure su distribución y su depósito S3 para restringir el acceso mediante una identidad de acceso de origen (OAI). Para obtener instrucciones, consulte Uso de un punto final de API REST como origen con acceso restringido por una OAI en ¿Cómo uso CloudFront para servir un sitio web estático alojado en Amazon S3?
Resolución
Los objetos del depósito deben ser de acceso público.
Una distribución que utiliza un punto final de sitio web solo admite contenido de acceso público. Para determinar si un objeto en su depósito de S3 es de acceso público, abra la URL del objeto en un navegador web. O puede ejecutar un comando curl en la URL.
La siguiente es una URL de ejemplo de un objeto 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, entonces el objeto no es accesible públicamente.
Permita el acceso público de lectura al objeto de una de las siguientes maneras:
- Cree una política de depósito que permita el acceso público de lectura para todos los objetos del depósito.
- Utilice la consola de Amazon S3 para permitir el acceso público de lectura al objeto.
- Los objetos del depósito no se pueden cifrar con AWS KMS
- Las distribuciones de CloudFront no admiten objetos cifrados con AWS KMS. Debe eliminar el cifrado KMS de los objetos S3 que desea servir mediante la distribución.
Nota: en lugar de utilizar el cifrado AWS KMS, utilice AES-256 para cifrar sus objetos.
Utilice una de las siguientes formas de comprobar si un objeto en su depósito está cifrado con KMS:
Utilice la consola de Amazon S3 para ver las propiedades del objeto. Revise el cuadro de diálogo Cifrado. Si se selecciona AWS-KMS, el objeto está cifrado con KMS. Ejecute el comando head-object mediante la interfaz de línea de comandos de AWS (AWS CLI). Si el comando devuelve ServerSideEncryption como aws:kms, entonces el objeto está cifrado con KMS. Nota: Si recibe errores al ejecutar comandos de AWS CLI, asegúrese de estar 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, consulte ¿Cómo agrego cifrado a un objeto S3?
Para cambiar la configuración de cifrado del objeto usando elCLI de AWS, primero verifique que el depósito del objeto no tenga cifrado predeterminado. Si el depósito no tiene cifrado predeterminado, ejecute el siguiente comando para eliminar el cifrado del objeto copiándolo sobre sí mismo:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html
Advertencia: Copiar el objeto sobre sí mismo elimina la configuración de clase de almacenamiento y
ubicación de redireccionamiento del sitio web. Para mantener esta configuración en el nuevo objeto, asegúrese de especificar explícitamente los valores de clase de almacenamiento o ubicación de redireccionamiento del sitio web en la solicitud de copia.La política de depósito debe permitir el acceso a s3:GetObject. Para utilizar una distribución con un punto final de sitio web S3, su política de depósito no debe tener una declaración de denegación que bloquee el acceso público de lectura a la acción s3:GetObject.
Incluso si tiene una declaración de permiso explícita para s3:GetObject en su política de depósito, confirme que no haya una declaración de denegación explícita en conflicto. Una declaración de denegación explícita siempre anula una declaración de permiso explícita.
Siga estos pasos para revisar su política de depósito para s3:GetObject:
Abra su depósito S3 desde la consola de Amazon S3.
Elija la pestaña Permisos.
Elija Política de depósito.
Revise la política del depósito para ver las declaraciones con "Action": "s3:GetObject" o "Action": "s3:*".
La siguiente política de ejemplo contiene una declaración de permiso explícita para el acceso público a s3:GetObject. Sin embargo, también hay una declaración de denegación explícita para s3:GetObject que bloquea el acceso a menos que la solicitud provenga de una nube privada virtual de Amazon (Amazon VPC) específica.
{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "Allow-OAI-Access-To-Bucket", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX" }, "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" } } } ] }
- Modifique la política del depósito para eliminar o editar declaraciones que bloquean el acceso público de lectura a s3:GetObject.
Nota: CloudFront almacena en caché los resultados de un error de acceso denegado durante el período de tiempo especificado en el TTL mínimo de almacenamiento en caché de errores. El valor predeterminado es un minuto. Después de eliminar una declaración de denegación de la política de depósito, puede ejecutar una invalidación en su distribución para eliminar el objeto de la caché.
Si la política del depósito otorga acceso de lectura público, entonces la cuenta de AWS propietaria del depósito también debe poseer el objeto. Para que una política de depósito permita el acceso público de lectura a los objetos, la cuenta de AWS propietaria del depósito también debe ser propietaria de los objetos. Un depósito u objeto es propiedad de la cuenta de la identidad de AWS Identity and Access Management (IAM) que creó el depósito u objeto.
Nota: El requisito de propiedad del objeto se aplica al acceso de lectura público otorgado por una política de depósito. No se aplica al acceso de lectura público otorgado por la lista de control de acceso (ACL) del objeto.
Siga estos pasos para comprobar si el depósito y los objetos tienen el mismo propietario:
- Ejecute este comando de AWS CLI para obtener el ID canónico de S3 del propietario del depósito:
aws s3api list-buckets --query Owner.ID
- Ejecute este comando para obtener el ID canónico de S3 del propietario del objeto:
Nota: Este ejemplo muestra un solo objeto, pero puede usar el comando de lista para verificar varios objetos.
aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html
- Si los ID canónicos no coinciden, entonces el depósito y el objeto tienen propietarios diferentes.
Nota: También puede utilizar la consola de Amazon S3 para comprobar los propietarios del depósito y de los objetos. Los propietarios se encuentran en la pestaña Permisos del depósito u objeto respectivo.
Siga estos pasos para cambiar el propietario del objeto por el propietario del depósito:
- Desde la cuenta del propietario del objeto, ejecute este comando para recuperar los permisos ACL asignados al objeto:
aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name
- Si el objeto tiene permisos ACL de control total del propietario del depósito, salte al paso 3. Si el objeto no tiene permisos ACL de control total del propietario del depósito, ejecute este 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
- Desde la cuenta del propietario del depósito, ejecute este comando para cambiar 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
Los objetos solicitados deben existir en el depósito.Si un usuario no tiene permisos s3:ListBucket, entonces el usuario recibe errores de Acceso denegado por objetos faltantes en lugar de errores 404 No encontrado. Ejecute el comando head-object de AWS CLI para comprobar si existe un objeto en el depósito.
Nota: Confirme que la solicitud de objeto enviada a CloudFront coincida exactamente con el nombre del objeto S3. Los nombres de objetos de S3 distinguen entre mayúsculas y minúsculas. Si la solicitud no tiene el nombre de objeto correcto, Amazon S3 responde como si faltara el objeto. Para identificar qué objeto solicita CloudFront a Amazon S3, utilice el registro de acceso al servidor.
Si el objeto existe en el depósito, entonces el error de Acceso denegado no es enmascarar un error 404 No encontrado. Verifique otros requisitos de configuración para resolver el error de Acceso denegado.
Si el objeto no está en el depósito, entonces se muestra el error Acceso denegado. enmascarar un error 404 No encontrado. Resuelva el problema relacionado con el objeto perdido.
Nota: No es una práctica recomendada de seguridad habilitar el acceso público a s3:ListBucket. Habilitar el acceso público a s3:ListBucket permite a los usuarios ver y enumerar todos los objetos en un depósito. Esto expone los detalles de los metadatos del objeto (por ejemplo, clave y tamaño) a los usuarios incluso si los usuarios no tienen permisos para descargar el objeto.
El acceso público al bloque de Amazon S3 debe estar deshabilitado en el depósitoConfirme que no haya ninguna configuración de bloqueo de acceso público de Amazon S3 aplicada al depósito. Estas configuraciones pueden anular los permisos que permiten el acceso de lectura público. La configuración de acceso público de bloques de Amazon S3 se puede aplicar a depósitos individuales o cuentas de AWS.
Si Requester Pays está habilitado, entonces la solicitud debe incluir el parámetro request-payer. Si Requester Pays está habilitado en un depósito, entonces no se permite el acceso anónimo al depósito. Los usuarios de otras cuentas deben especificar el parámetro del pagador de solicitudes cuando envían solicitudes al depósito. De lo contrario, esos usuarios obtienen un error de Acceso denegado.
Si está utilizando un encabezado de referencia para restringir el acceso desde CloudFront a su origen de S3, revise el encabezado personalizado. Si está utilizando el encabezado de referencia para restringir el acceso desde CloudFront a su origen de punto final de sitio web de S3, verifique el valor secreto o el conjunto de tokens. en la política del depósito S3. Luego, confirme que el valor secreto o el token coincidan con el valor en el encabezado personalizado de origen de CloudFront.
Si está utilizando una declaración de denegación explícita en la política del depósito, confirme que también hay una declaración de permiso que otorga acceso según el encabezado Referer. No puede otorgar acceso con solo una declaración de denegación explícita.
Por ejemplo, la siguiente política de depósito otorga acceso al origen de S3 cuando la solicitud contiene la cadena "aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER":
{ "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"} } } ] }
Con esta política de depósito de ejemplo, el encabezado personalizado de origen de CloudFront debe ser:
- Encabezamiento: Referidor
- Valor:MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER
Nota: La política de depósito de ejemplo otorga acceso público (anónimo) al depósito porque el Principal es un valor comodín ("Principal":"*"). Sin embargo, debido a la declaración de condición, el acceso al origen de S3 se otorga solo si la solicitud incluye el encabezado Referer y el valor del encabezado coincide con el valor de la política del depósito.