Embora eu não tenha encontrado uma maneira de definir as ACLs por objeto, existe uma maneira de garantir que as ACLs sejam definidas corretamente no upload usando uma política de bucket. Esta política de exemplo mostra como permitir que uma conta da AWS carregue objetos em seu bucket e exige que o proprietário do bucket receba controle total de todos os objetos carregados:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSourceAccount0123456789ToPutObjects",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::0123456789:root"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::data-warehouse/*"
},
{
"Sid": "RequireAllUploadedObjectsToAssignFullControlToBucketOwner",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::data-warehouse/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
A chave é a negação explícita que verifica o cabeçalho x-amz-acl: bucket-owner-full-control
(mencionado por Michael-sqlbot nos comentários) e falha em qualquer upload onde isso não está definido. Ao usar o AWS CLI para fazer upload de arquivos, isso exige que o sinalizador - acl bucket-owner-full-control seja definido.
Exemplo:
aws s3 cp example-file.txt s3://data-warehouse/example-file.txt --profile aws-profile-name --acl bucket-owner-full-control
Espero que a AWS forneça uma maneira de abordar as ACLs de modo mais elegante em algum momento.