Estoy tratando de configurar el almacenamiento de archivos multimedia y estáticos en un depósito de AWS S3, en una aplicación de Django, y aparece el siguiente error cuando intento ejecutar python manage.py collectstatic para colocar los archivos estáticos en el depósito:
botocore.exceptions.ClientError: Se produjo un error (Acceso denegado) al llamar a la operación PutObject: Acceso denegado
Estoy ejecutando almacenamientos boto3 y django. Revisé las otras respuestas aquí y probé las ideas allí primero. Mi clave de acceso, etc. es correcta, ya que puedo conectarme a SES OK. Tengo CORS configurado en el depósito.
Mi política de depósitos es
{ "Id": "Policyxxx", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmtxxx", "Action": "s3:*", "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucketname/*", "arn:aws:s3:::bucketname" ], "Principal": { "AWS": [ "arn:aws:iam::xxxx:user/xxxx" ] } } ] }Mi usuario de IAM tiene AmazonS3FullAccess como se muestra a continuación:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": "*" } ] }También intenté crear mi propia política y adjuntarla al usuario de IAM de la siguiente manera:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::bucketname", "arn:aws:s3:::bucketname/*" ] } ] }Ninguno de estos funciona, así que claramente me estoy perdiendo algo.
Yo tenía el mismo error. Y, a diferencia de usted, estaba usando el usuario correcto con las políticas de IAM adecuadas.
En la salida de:
python manage.py collectstatic antes del error de pila AccessDenied, pude leer este mensaje de django-storage lib :
Advertencia para el usuario: el comportamiento predeterminado de S3Boto3Storage no es seguro y cambiará en django-storages 2.0. De forma predeterminada, los archivos y los cubos nuevos se guardan con una ACL de 'lectura pública' (lectura pública global). La versión 2.0 usará de manera predeterminada la ACL del depósito. Para optar por el nuevo comportamiento, establezca AWS_DEFAULT_ACL = Ninguno; de lo contrario, para silenciar esta advertencia, establezca explícitamente AWS_DEFAULT_ACL. "El comportamiento predeterminado de S3Boto3Storage no es seguro y cambiará"
Esto me llevó a intentarlo.
Configurando :
AWS_DEFAULT_ACL = NoneLuego, los archivos estáticos se recopilaron en el cubo.