Skip to content

fix: Remove uso de ACL nos uploads para S3#111

Merged
diraol merged 1 commit into
mainfrom
fix/remove-s3-acl-usage
Dec 29, 2025
Merged

fix: Remove uso de ACL nos uploads para S3#111
diraol merged 1 commit into
mainfrom
fix/remove-s3-acl-usage

Conversation

@diraol
Copy link
Copy Markdown
Contributor

@diraol diraol commented Dec 29, 2025

Problema

Ao tentar fazer upload de arquivos para S3, ocorria o erro:

An error occurred (AccessControlListNotSupported) when calling the PutObject operation: 
The bucket does not allow ACLs

Isso acontece porque buckets S3 modernos frequentemente têm a configuração 'Object Ownership' definida como 'Bucket owner enforced', o que desabilita ACLs completamente.

Solução

Esta PR remove todos os parâmetros ACL das operações de upload no módulo storage/digital_ocean_spaces.py:

  • upload_content() - Removido ExtraArgs={"ACL": permission}
  • upload_file() - Removido ExtraArgs={"ACL": permission}
  • upload_file_multipart() - Removido parâmetro ACL=permission

Como controlar acesso público agora?

O acesso público deve ser controlado através de políticas de bucket ao invés de ACLs em nível de objeto, seguindo as melhores práticas da AWS:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "PublicRead",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::nome-do-bucket/*"
  }]
}

Testes

  • ✅ Testes unitários atualizados em tests/digital_ocean_spaces.py
  • ✅ Código compatível com AWS S3, Digital Ocean Spaces e outros serviços S3-compatíveis

Nota

Este não era um problema de permissão IAM faltante, mas sim uma incompatibilidade entre o código (que tentava definir ACLs) e a configuração do bucket (que desabilita ACLs).

Buckets S3 modernos frequentemente têm 'Object Ownership' configurado como
'Bucket owner enforced', o que desabilita ACLs completamente. Isso causava
erros 'AccessControlListNotSupported' ao tentar fazer upload de arquivos.

Esta mudança remove todos os parâmetros ACL das operações de upload:
- upload_content()
- upload_file()
- upload_file_multipart()

O acesso público agora deve ser controlado via políticas de bucket ao invés
de ACLs em nível de objeto, seguindo as melhores práticas da AWS.

Corrige o erro AccessControlListNotSupported ao fazer upload para S3.
@diraol diraol merged commit 56806b5 into main Dec 29, 2025
1 check failed
@diraol diraol deleted the fix/remove-s3-acl-usage branch December 29, 2025 21:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant