¿Por qué aparece el error “403 Forbidden” al intentar cargar archivos en Amazon S3?

Última actualización: 27/04/2022

Intento cargar archivos en el bucket de Amazon Simple Storage Service (Amazon S3) mediante la consola de Amazon S3. Sin embargo, aparece el error “403 Prohibido”.

Descripción corta

El error “403 Prohibido” puede ocurrir debido a las siguientes razones:

  • Faltan permisos para que s3:PutObject agregue un objeto o s3:PutObjectAcl modifique la ACL del objeto.
  • No tiene permiso para utilizar una clave de AWS Key Management Service (AWS KMS).
  • Hay una declaración de denegación explícita en la política de bucket.
  • El bloqueo de acceso público de Amazon S3 está habilitado.
  • La lista de control de acceso (ACL) del bucket no permite al usuario raíz de la cuenta de AWS escribir objetos.
  • Una política de control de servicios de AWS Organizations no permite el acceso a Amazon S3.

Resolución

Verifique los permisos correspondientes a s3:PutObject o s3:PutObjectAcl

Siga estos pasos:

  1. Abra la consola de AWS Identity and Access Management (IAM).
  2. Seleccione la identidad que se utiliza para acceder a la política de bucket, como Usuario o Rol.
  3. Seleccione el nombre de la identidad de IAM que utiliza para acceder a la política de bucket.
  4. Elija la pestaña Permisos y expanda cada política para ver el documento de política JSON correspondiente.
  5. En los documentos de políticas de JSON, busque políticas relacionadas con el acceso a Amazon S3. A continuación, confirme que tiene permisos para las acciones s3:PutObject o s3:PutObjectAcl en el bucket.

Solicitar permiso para usar una clave de AWS KMS

Para acceder a un bucket de S3 que utiliza el cifrado predeterminado con una clave personalizada de AWS KMS, un administrador de claves debe concederle permiso en la política de claves.

Para cargar un objeto en un bucket cifrado, el usuario o rol de IAM debe tener permisos de AWS KMS para al menos kms:Encrypt y kms:GenerateDataKey.

Verifique la política del bucket para comprobar si existen declaraciones de denegación explícitas

Siga estos pasos:

  1. Abra la consola de Amazon S3.
  2. En la lista de buckets, abra el bucket en el que desea cargar los archivos.
  3. Haga clic en la pestaña Permisos.
  4. Elija Política del bucket.
  5. Busque declaraciones con “Efecto” “Denegar”.
  6. Verifique que la política de bucket incluye los parámetros de solicitud URI correctos para que s3:PutObject cumpla las condiciones específicas.

Importante: Antes de guardar una política de bucket con “Efecto”: “Denegar”, asegúrese de comprobar si hay alguna declaración que deniegue el acceso al bucket de S3. Si se queda sin acceso, consulte He negado accidentalmente a todos el acceso al bucket de Amazon S3. ¿Cómo se puede recuperar el acceso?

La siguiente declaración de ejemplo deniega explícitamente el acceso a s3:PutObject en awsdoc-example-bucket a menos que la solicitud de carga incluya el cifrado con la clave AWS KMS arn:aws:kms:us-east-1:111122223333:key:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::awsdoc-example-bucket/*",
      "Condition": {
        "StringNotLikeIfExists": {
          "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
        }
      },
      "Principal": "*"
    }
  ]
}

Desactivar el Bloqueo de acceso público de S3

Si pasa la ACL pública en una solicitud de carga y la característica de bloqueo de acceso público de S3 está habilitada, desactívela antes de cargar los archivos.

Para obtener más información sobre la configuración de los ajustes de bloqueo de acceso público de S3 a nivel de cuenta, consulte Configuración de los ajustes de bloqueo de acceso público para su cuenta. Para configurar los ajustes a nivel de bucket, consulte Configuración de los ajustes de bloqueo de acceso público para los buckets de S3.

Conceda al usuario raíz permiso para escribir objetos

Configure los permisos ACL del bucket para conceder al usuario raíz acceso para escribir objetos.

Elimine las políticas de control de servicios para AWS Organizations

Si utiliza AWS Organizations, elimine cualquier política de control de servicios que deniegue explícitamente las acciones de S3.