Quais são alguns casos de uso para utilizar uma ACL de objeto no Amazon S3?

Data da última atualização: 21/12/2021

Quero delegar acesso a meus objetos do Amazon Simple Storage Service (Amazon S3) usando uma lista de controle de acesso (ACL). Quais são alguns casos de uso para utilizar uma ACL de objeto ou de bucket?

Resolução

As listas de controle de acesso (ACLs) do Amazon S3 permitem gerenciar o acesso a buckets e objetos do S3. Em cada bucket e objeto do S3, há uma ACL anexada como um sub-recurso. As ACLs definem quais contas ou grupos da AWS receberão acesso, bem como o tipo de acesso. Quando você envia uma solicitação em relação a um recurso, o Amazon S3 verifica a ACL correspondente para confirmar que você tem as permissões de acesso necessárias.

A maioria dos casos de uso em que o acesso é concedido a objetos ou buckets não requer mais ACLs. Porém, em alguns casos, convém usar uma ACL. Por exemplo, estes são alguns casos de uso para quando talvez seja necessário usar uma ACL para gerenciar o acesso a um bucket ou objeto:

  • Uma ACL de objeto é a única maneira de conceder acesso a objetos que não pertencem ao proprietário do bucket. Por padrão, quando outra conta da AWS carrega um objeto no bucket do S3, essa conta (que gravou o objeto) é proprietária do objeto. Além disso, o gravador do objeto tem acesso ao objeto e pode conceder a outros usuários acesso a ele usando ACLs.
  • As ACLs de objeto podem ser usadas quando é necessário gerenciar permissões no nível do objeto. Por exemplo, se você precisar delegar acesso a uma pasta inteira, poderá usar uma política de bucket. Porém, se as permissões de acesso variarem de acordo com o objeto, talvez não seja prático conceder permissões a objetos individuais usando uma política de bucket. Portanto, uma ACL de objeto pode ser mais adequada para gerenciar o acesso a objetos.
  • Caso queira a propriedade de novos objetos gravados em seu bucket por outras contas da AWS (e caso sua ACL não esteja desabilitada), aplique a configuração preferencial do proprietário do bucket. Com essa configuração, os novos objetos que são gravados com a ACL bucket-owner-full-control são automaticamente de propriedade do proprietário do bucket (e não do gravador do objeto). Todos os outros comportamentos de ACL permanecem em vigor.
    Observação: para desativar uma ACL, use a configuração bucket owner enforced (aplicada pelo proprietário do bucket) da Propriedade de objetos do S3. Quando as ACLs são desabilitadas, você pode facilmente manter um bucket com objetos carregados (entre contas) por diferentes contas da AWS usando políticas de bucket. Se o bucket usar a configuração aplicada pelo proprietário do bucket da Propriedade de objeto do S3, haverá falha nas solicitações para definir ou atualizar ACLs, retornando o código de erro AccessControlListNotSupported. Porém, as solicitações de leitura de ACLs continuarão compatíveis.
  • As ACLs de bucket podem ser usadas para conceder permissões a produtos da AWS, como o Amazon CloudFront, para executar determinadas ações em seu bucket. Por exemplo, quando você cria ou atualiza uma distribuição do CloudFront e ativa o log do CloudFront, o CloudFront atualiza a ACL do bucket. Essa atualização concede à conta awslogsdelivery permissões FULL_CONTROL para gravar registros em seu bucket. Para obter mais informações, consulte Permissões necessárias para configurar o registro padrão e acessar arquivos de log.

Aplicar ACLs a objetos

Exemplo 1

Se você estiver carregando um objeto para um bucket em uma conta da AWS diferente, use a ACL pré-configurada bucket-owner-full-control do bucket:

aws s3api put-object --bucket destination_bucket --key dir-1/myfile --body dir-1/myfile --acl bucket-owner-full-control

A ACL pré-configurada bucket-owner-full-control fornece acesso à conta do proprietário do bucket.

Observação: o Amazon S3 oferece suporte a um conjunto de ACLs predefinidas conhecidas como ACLs pré-configuradas (como a ACL bucket-owner-full-control usada neste exemplo).

Exemplo 2

O carregador de objetos também pode adicionar uma ACL para conceder permissões de leitura a outras contas da AWS:

aws s3api put-object --bucket destination_mybucket --key dir/myfile --body dir/myfile --grant-read emailaddress=user1@amazon.com,id=canonical-id-of-account

Observação: só é possível especificar um beneficiário usando e-mails nas seguintes regiões da AWS: Norte da Virgínia, Norte da Califórnia, Oregon, Singapura, Sydney, Tóquio, Irlanda e São Paulo.

Exemplo 3

Também é possível atualizar a ACL de um objeto existente:

aws s3api put-object-acl --bucket destination_bucket --key dir/myfile --acl bucket-owner-full-control

Exemplo 4

O Amazon S3 tem um conjunto de grupos predefinidos. É possível usar ACLs de objeto para conceder permissões aos usuários que fazem parte desses grupos predefinidos.

Por exemplo, você pode conceder acesso a objetos a qualquer usuário autenticado da AWS, por meio da concessão de acesso ao grupo Authenticated Users (Usuários autenticados):

aws s3api put-object --bucket destination_mybucket --key dir/myfile --body dir/myfile --grant-read uri=http://acs.amazonaws.com/groups/global/AuthenticatedUsers

Observação: antes de conceder acesso ao grupo Authenticated Users (Usuários autenticados), desative as configurações de Block Public Access (Bloquear acesso público) para ACLs no nível da conta e do bucket. Senão, você receberá um erro Access Denied (Acesso negado). Para solucionar erros Access Denied (Acesso negado) relacionados a ACLs, consulte Um usuário com permissão para adicionar objetos a meu bucket do Amazon S3 está recebendo erros Access Denied. Por quê?