Controlar a propriedade de objetos e desabilitar ACLs para seu bucket - Amazon Simple Storage Service

Controlar a propriedade de objetos e desabilitar ACLs para seu bucket

O S3 Object Ownership é uma configuração no nível do bucket do Amazon S3 que você pode usar para desabilitar as listas de controle de acesso (ACLs) e assumir a propriedade de cada objeto em seu bucket, simplificando o gerenciamento de acesso para dados armazenados no Amazon S3. Por padrão, quando outra Conta da AWS carrega um objeto no bucket do S3, essa conta (que gravou o objeto) é a proprietária do objeto, tem acesso a ele e pode conceder acesso a outros usuários por meio de ACLs. Você pode usar o Object Ownership para alterar esse comportamento padrão. Em Object Ownership, as ACLs são desabilitadas e você, como proprietário do bucket, automaticamente tem a propriedade de todos os objetos de seu bucket. Como resultado, o controle de acesso para seus dados é baseado em políticas, como políticas do IAM, políticas de bucket do S3, políticas de endpoint da Virtual Private Cloud (VPC) e políticas de controle de serviço (SCPs) do AWS Organizations.

A maioria dos casos de uso modernos no Amazon S3 não requer mais o uso de ACLs, e recomendamos desabilitar as ACLs, exceto em circunstâncias incomuns em que seja necessário controlar o acesso para cada objeto individualmente. Com Object Ownership, é possível desabilitar ACLs e confiar em políticas para controle de acesso. Ao desabilitar ACLs, você pode facilmente manter um bucket com objetos carregados por diferentes Contas da AWS. Como proprietário do bucket, você possui todos os objetos do bucket e pode gerenciar o acesso a eles usando políticas.

Há três configurações em Object Ownership que podem ser usadas para controlar a propriedade de objetos carregados no bucket e para desabilitar ou habilitar ACLs:

ACLs desabilitadas

  • Bucket owner enforced (Aplicada pelo proprietário do bucket) (recomendado): as ACLs são desabilitadas e o proprietário do bucket automaticamente tem a propriedade e o controle total sobre todos os objetos do bucket. As ACLs não afetam mais as permissões nos dados no bucket do S3. O bucket usa políticas para definir o controle de acesso.

ACLs habilitadas

  • Bucket owner preferred (Preferencial do proprietário do bucket): o proprietário do bucket tem a propriedade e o controle total sobre novos objetos que outras contas gravam no bucket com a ACL bucket-owner-full-control pré-configurada.

  • Object writer (Gravador de objetos) (padrão): a Conta da AWS que carrega um objeto é a proprietária do objeto, tem controle total sobre ele e pode conceder acesso a outros usuários por meio de ACLs.

Na maioria dos casos de uso modernos do S3, recomendamos desabilitar as ACLs escolhendo a configuração aplicada pelo proprietário do bucket e usar sua política de bucket para compartilhar dados com usuários fora da conta, conforme necessário. Esse método simplifica o gerenciamento e a auditoria de permissões. É possível desabilitar as ACLs em buckets recém-criados e já existentes. No caso de um bucket existente que já contenha objetos, depois que você desabilitar ACLs, as ACLs de objeto e bucket não farão mais parte de uma avaliação de acesso, e o acesso será concedido ou negado com base em políticas. Para buckets existentes, você pode habilitar novamente as ACLs a qualquer momento após desabilitá-las, e suas ACLs de objeto e bucket preexistentes serão restauradas.

Antes de desabilitar as ACLs, recomendamos revisar sua política de bucket para garantir que ela abranja todas as maneiras pelas quais você pretende conceder acesso ao bucket fora da conta. É necessário redefinir a ACL do bucket para o padrão (controle total para o proprietário do bucket). Depois que você desabilitar as ACLs, seu bucket aceitará somente solicitações PUT que não especificam ACL ou solicitações PUT com ACLs de controle total do proprietário do bucket, como a ACL bucket-owner-full-control predefinida ou formas equivalentes dessa ACL expressa em XML. Aplicações existentes compatíveis com ACLs de controle total do proprietário do bucket não são afetadas. Solicitações PUT que contêm outras ACLs (por exemplo, concessões personalizadas para determinadas Contas da AWS) falham e retornam um erro 400 com o código de erro AccessControlListNotSupported.

Em contrapartida, um bucket com a configuração preferencial do proprietário do bucket continua aceitando e respeitando as ACLs de bucket e objeto. Com essa configuração, novos objetos que são escritos com a ACL bucket-owner-full-control pré-configurada são automaticamente de propriedade do proprietário do bucket, e não do gravador de objeto. Todos os outros comportamentos da ACL permanecem em vigor. Para exigir que todas as operações PUT do Amazon S3 incluam a ACL bucket-owner-full-control pré-configurada, adicione uma política de bucket que permita somente o carregamento de objetos que usam essa ACL.

Configurações do Object Ownership

Esta tabela mostra como cada configuração do Object Ownership afeta ACLs, objetos, propriedade de objetos e carregamentos de objetos.

Configuração Aplica-se a Efeito na propriedade de objetos Efeito nas ACLs Carregamentos aceitos
Aplicada pelo proprietário do bucket (recomendado) Objetos novos e existentes O proprietário do bucket possui todos os objetos.

As ACLs estão desabilitadas e não afetam mais as permissões de acesso ao bucket. As solicitações para definir ou atualizar ACLs falham. Porém, há suporte para solicitações de leitura de ACLs.

O proprietário do bucket tem total propriedade e controle.

O gravador de objetos não tem mais total propriedade e controle.

Carregamentos com ACLs de controle total do proprietário do bucket ou carregamentos que não especificam uma ACL
Preferencial do proprietário do bucket Novos objetos Se um carregamento de objeto incluir a ACL bucket-owner-full-control pré-configurada, o proprietário do bucket terá o objeto.

Os objetos carregados com outras ACLs são de propriedade da conta de gravação.

As ACLs podem ser atualizadas e podem conceder permissões.

Se um carregamento de objeto incluir a ACL bucket-owner-full-control pré-configurada, o proprietário do bucket terá acesso de controle total, e o gravador de objetos não terá mais acesso de controle total.

Todos os carregamentos
Gravador de objetos (padrão) Novos objetos O gravador de objetos é o proprietário do objeto.

As ACLs podem ser atualizadas e podem conceder permissões.

O gravador de objetos tem total acesso de controle.

Todos os carregamentos

Alterações introduzidas ao desabilitar ACLs

Ao adotar a configuração aplicada pelo proprietário do bucket em Object Ownership para desabilitar ACLs, você automaticamente é o proprietário e assume controle total sobre todos os objetos do bucket sem realizar nenhuma outra ação. Após aplicar essa configuração, você verá três alterações:

  • Todas as ACLs de bucket e as ACLs de objeto estão desabilitadas, dando a você acesso total, como o proprietário do bucket. Ao executar uma solicitação de ACL de leitura em seu bucket ou objeto, você verá que o acesso total é dado somente ao proprietário do bucket.

  • Você, como proprietário do bucket, automaticamente tem a propriedade e o controle total sobre todos os objetos de seu bucket.

  • As ACLs não afetam mais as permissões de acesso ao bucket. Como resultado, o controle de acesso a seus dados é baseado em políticas, como políticas do IAM, políticas de bucket do S3, políticas de endpoint da VPC e SCPs do Organizations.


				Diagrama exibindo o que acontece quando você aplica a configuração aplicada pelo proprietário do bucket para desabilitar ACLs.

Se você usar o versionamento do S3, o proprietário do bucket terá propriedade e controle total sobre todas as versões de objeto do bucket. Adotar a configuração aplicada pelo proprietário do bucket não adiciona uma nova versão do objeto.

Será possível carregar novos objetos no bucket somente se eles usarem ACLs de controle total do proprietário do bucket ou não especificarem uma ACL. Os carregamentos de objetos falharão se especificarem qualquer outra ACL. Para obter mais informações, consulte Solução de problemas.

Como a operação PutObject do exemplo a seguir usando a AWS Command Line Interface (AWS CLI) contém a ACL bucket-owner-full-control pré-configurada, o objeto pode ser carregado em um bucket com ACLs desabilitadas.

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key key-name --body path-to-file --acl bucket-owner-full-control

Como a operação PutObject não especifica uma ACL, ela também funciona em um bucket com ACLs desabilitadas.

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key key-name --body path-to-file
nota

Se outras Contas da AWS precisarem de acesso a objetos após o carregamento, será necessário conceder outras permissões a essas contas por meio de políticas de bucket. Para obter mais informações, consulte Demonstrações de exemplo: gerenciar o acesso aos recursos do Amazon S3.

Habilitar ACLs novamente

É possível habilitar novamente as ACLs alterando da configuração aplicada pelo proprietário do bucket para outra configuração do Object Ownership a qualquer momento. Se você usou ACLs de objeto para gerenciamento de permissões antes de adotar a configuração aplicada pelo proprietário do bucket e não migrou essas permissões de ACL de objeto para sua política de bucket, essas permissões serão restauradas quando as ACLs forem habilitadas novamente. Além disso, os objetos gravados no bucket enquanto a configuração aplicada pelo proprietário do bucket foi aplicada ainda pertencem ao proprietário do bucket.

Por exemplo, ao mudar da configuração aplicada pelo proprietário do bucket para o gravador de objetos, como proprietário do bucket, você não terá mais propriedade e controle total sobre objetos que anteriormente pertenciam a outras Contas da AWS. Em vez disso, as contas de carregamento voltam a ser proprietárias desses objetos. Objetos pertencentes a outras contas usam ACLs para permissões. Portanto, você não pode usar políticas para conceder permissões a esses objetos. No entanto, como proprietário do bucket, você ainda possui os objetos que foram gravados no bucket enquanto a configuração aplicada pelo proprietário do bucket foi aplicada. Esses objetos não pertencem ao gravador de objetos, mesmo que você habilite as ACLs novamente.

Pré-requisitos para desabilitar ACLs

Antes de desabilitar as ACLs de um bucket existente, cumpra os pré-requisitos a seguir.

Revise as ACLs de bucket e de objeto e migre permissões de ACLs

Quando você desabilita ACLs, as permissões concedidas por ACLs de bucket e de objeto não afetam mais o acesso. Antes de desabilitar as ACLs, revise suas ACLs de objeto e de bucket. Se as ACLs de bucket concederem permissões de leitura ou gravação a outras pessoas fora da conta, será necessário migrar essas permissões para a política de bucket antes de adotar a configuração aplicada pelo proprietário do bucket. Se você não migrar ACLs de bucket que concedem acesso de leitura ou gravação fora de sua conta, a solicitação para aplicar a configuração aplicada pelo proprietário do bucket falhará e retornará o código de erro InvalidBucketAclWithObjectOwnership.

Por exemplo, se você quiser desabilitar as ACLs de um bucket que recebe logs de acesso ao servidor, deverá migrar as permissões de ACL do bucket para o grupo de entrega de log do S3 para a entidade principal do serviço de log em uma política de bucket. Para obter mais informações, consulte Conceder acesso ao grupo de entrega de logs do S3 para log de acesso ao servidor.

Para que o gravador de objetos mantenha o controle total do objeto que ele carrega, o gravador de objetos é a melhor configuração do Object Ownership para seu caso de uso. Se você quiser controlar o acesso no nível de objeto individual, preferencial do proprietário do bucket é a melhor opção. Esses casos de uso são incomuns.

Para revisar ACLs e migrar permissões de ACL para políticas de bucket, consulte Pré-requisitos para desabilitar ACLs.

Revisar e atualizar políticas de bucket que usam chaves de condição relacionadas à ACL

Depois de adotar a configuração aplicada pelo proprietário do bucket para desabilitar ACLs, será possível carregar novos objetos no bucket somente se a solicitação usar ACLs de controle total do proprietário do bucket ou não especificar uma ACL. Antes de desabilitar as ACLs, revise a política de bucket para chaves de condição relacionadas à ACL.

Se a política de bucket usar uma chave de condição relacionada à ACL para exigir a ACL bucket-owner-full-control pré-configurada (por exemplo, s3:x-amz-acl), não será necessário atualizar sua política de bucket. A política de bucket a seguir usa s3:x-amz-acl para exigir a ACL bucket-owner-full-control pré-configurada para solicitações PutObject do S3. Essa política ainda requer que o gravador de objetos especifique a ACL bucket-owner-full-control pré-configurada. No entanto, buckets com ACLs desabilitadas ainda aceitam essa ACL, então as solicitações continuam sendo bem-sucedidas sem necessidade de alterações no lado do cliente.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with bucket owner full control", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/ExampleUser" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

Porém, se a política de bucket usar uma chave de condição relacionada à ACL que requer uma ACL diferente, será necessário remover essa chave de condição. Este exemplo de política de bucket requer a ACL public-read pré-configurada para solicitações PutObject do S3 e devem ser atualizadas antes de desabilitar as ACLs.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with public read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/ExampleUser" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }

Permissões do Object Ownership

Para aplicar, atualizar ou excluir uma configuração do Object Ownership de um bucket, é necessária a permissão s3:PutBucketOwnershipControls. Para retornar a configuração do Object Ownership para um bucket, é necessário ter a permissão s3:GetBucketOwnershipControls. Para obter mais informações, consulte Configurar Object Ownership ao criar um bucket e Visualizar a configuração do Object Ownership de um bucket do Amazon S3.

Desabilitar ACLs para todos os novos buckets

Você pode exigir que todos os novos buckets sejam criados com ACLs desabilitadas usando políticas do IAM ou do Organizations. Você pode usar a chave de condição s3:x-amz-object-ownership em uma política do IAM ou do Organizations para exigir a configuração aplicada pelo proprietário do bucket para Object Ownership em todos os buckets recém-criados. Ao exigir a configuração aplicada pelo proprietário do bucket, você garante que as ACLs estejam desabilitadas para todos os novos buckets de sua conta ou organização. Para obter mais informações, consulte Desabilitar ACLs para todos os novos buckets (aplicada pelo proprietário do bucket).

Replicação e Object Ownership

Quando você usa a replicação do S3 e os buckets de origem e destino pertencem a diferentes Contas da AWS, é possível desabilitar ACLs (com a configuração aplicada pelo proprietário do bucket em Object Ownership) para alterar a propriedade da réplica para a Conta da AWS que possui o bucket de destino. Essa configuração imita o comportamento de substituição do proprietário existente sem a necessidade da permissão s3:ObjectOwnerOverrideToBucketOwner. Todos os objetos que são replicados para o bucket de destino com a configuração aplicada pelo proprietário do bucket pertencem ao proprietário do bucket de destino. Para obter mais informações sobre a opção de substituição do proprietário para configurações de replicação, consulte Alterar o proprietário da réplica.

Ao usar a configuração padrão do gravador de objetos em Object Ownership ou aplicar a configuração preferencial do proprietário do bucket para o bucket de destino, você poderá usar a opção de substituição do proprietário da replicação do Amazon S3 para transferir a propriedade de objetos replicados ao proprietário do bucket de destino.

Configurar o Object Ownership

É possível aplicar uma configuração do Object Ownership usando o console do S3, a AWS CLI, AWS SDKs, a API REST do Amazon S3 ou o AWS CloudFormation. A seguinte API REST e comandos da AWS CLI são compatíveis com o Object Ownership:

API REST AWS CLI Descrição
PutBucketOwnershipControls put-bucket-ownership-controls Cria ou modifica a configuração do Object Ownership para um bucket do S3 existente.
CreateBucket create-bucket Cria um bucket usando o cabeçalho de solicitação x-amz-object-ownership para especificar a configuração do Object Ownership.
GetBucketOwnershipControls get-bucket-ownership-controls Recupera a configuração do Object Ownership de um bucket do Amazon S3.
DeleteBucketOwnershipControls delete-bucket-ownership-controls Exclui a configuração do Object Ownership de um bucket do Amazon S3.

Para obter mais informações sobre como aplicar e trabalhar com configurações de Object Ownership, consulte os tópicos a seguir.