Controlar a propriedade de objetos e desabilitar ACLs para seu bucket
A Propriedade de objeto do S3 é uma configuração no nível do bucket do Amazon S3 que você pode usar para controlar a propriedade de objetos carregados no bucket e desabilitar ou habilitar as listas de controle de acesso (ACLs). Por padrão, a Propriedade de objeto está definida com a configuração Imposto pelo proprietário do bucket e todas as ACLs estão desabilitadas. Quando as ACLs são desabilitadas, o proprietário do bucket possui todos os objetos do bucket e gerencia o acesso aos dados usando políticas de gerenciamento de acesso.
A maioria dos casos de uso modernos no Amazon S3 não requer mais o uso de ACLs e, portanto, recomendamos manter as ACLs desabilitadas exceto em circunstâncias incomuns em que seja necessário controlar o acesso para cada objeto individualmente. Com as ACLs desativadas, é possível usar políticas para controlar mais facilmente o acesso a cada objeto no bucket, independentemente de quem carregou os objetos no bucket.
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
-
Imposto pelo proprietário do bucket (padrão): 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): 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 manter as ACLs desabilitadas escolhendo a configuração imposta pelo proprietário do bucket e usar sua política de bucket para compartilhar dados com usuários fora da conta, conforme necessário. Essa abordagem simplifica o gerenciamento de permissões. É possível desabilitar as ACLs em buckets recém-criados e já existentes. Para buckets recém-criados, as ACLs são desabilitadas por padrão. 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. Depois que você desabilitar as ACLs, o bucket aceitará somente solicitações PUT
que não especificam uma ACL ou solicitações PUT
com ACLs de controle total do proprietário do bucket, como a ACL predefinida bucket-owner-full-control
ou formas equivalentes dessa ACL expressas 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.
Para ver quais configurações da Propriedade de Objeto são aplicadas aos seus buckets, você pode usar as métricas da Lente de Armazenamento do Amazon S3. A Lente de Armazenamento do S3 é um recurso de análise de armazenamento em nuvem que você pode usar para obter visibilidade em toda a organização sobre o uso e a atividade do armazenamento de objetos. Para obter mais informações, consulte Como usar a Lente de Armazenamento do S3 para encontrar configurações da Propriedade de Objeto.
nota
Para obter mais informações sobre o uso da classe de armazenamento Amazon S3 Express One Zone com buckets de diretório, consulte Buckets de diretório e S3 Express One Zone e Visão geral dos buckets de diretório.
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 |
---|---|---|---|---|
Imposto pelo proprietário do bucket (padrão) | 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 |
Todos os carregamentos |
Autor do objeto | 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
Quando a configuração Imposto pelo proprietário do bucket para a Propriedade de objeto é utilizada, as ACLs são desabilitadas e você automaticamente se torna o proprietário e assume controle total sobre todos os objetos do bucket sem realizar nenhuma outra ação. A configuração Imposto pelo proprietário do bucket é a configuração padrão para todos os buckets recém-criados. Ao adotar a configuração Imposto pelo proprietário do bucket, 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.
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 Imposto pelo proprietário do bucket não adiciona uma nova versão de um 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
amzn-s3-demo-bucket
--keykey-name
--bodypath-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
amzn-s3-demo-bucket
--keykey-name
--bodypath-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 que usam políticas para gerenciar o acesso a recursos do Amazon S3.
Habilitar ACLs novamente
É possível habilitar novamente as ACLs alterando a configuração Imposto pelo proprietário do bucket para outra configuração de Propriedade de objeto a qualquer momento. Se você usou ACLs de objeto para gerenciamento de permissões antes de adotar a configuração Imposto pelo proprietário do bucket e não migrou essas permissões de ACL de objeto para a 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 Imposto pelo proprietário do bucket foi usada ainda pertencem ao proprietário do bucket.
Por exemplo, ao mudar da configuração Imposto pelo proprietário do bucket para a configuração Autor do objeto, você, como proprietário do bucket, 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 Imposto pelo proprietário do bucket foi usada. Esses objetos não pertencem ao gravador de objetos, mesmo que você habilite as ACLs novamente.
Para obter instruções sobre como habilitar e gerenciar ACLs usando o AWS Management Console, a AWS Command Line Interface (CLI), a API REST ou AWS SDKs, consulte Configurar ACLs.
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 Imposto 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 Imposto 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 ter mais informações, consulte Conceder acesso ao grupo de entrega de logs do S3 para registro em log de acesso ao servidor.
Para que o autor do objeto mantenha o controle total do objeto que ele carrega, Autor do objeto é a melhor configuração da Propriedade de Objeto 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.
Identificar as solicitações que exigiram uma ACL para autorização
Para identificar solicitações do Amazon S3 que exigiam ACLs para autorização, você pode usar o valor aclRequired
nos logs de acesso do servidor do Amazon S3 ou do AWS CloudTrail. Se a solicitação exigiu uma ACL para autorização ou se você tem solicitações PUT
que especificam uma ACL, a string é Yes
. Se nenhuma ACL for necessária, ou se você estiver configurando uma ACL bucket-owner-full-control
predefinida, ou se as solicitações forem permitidas pela política de bucket, a string de valor aclRequired
será “-
” nos logs de acesso ao servidor do Amazon S3 e estará ausente no CloudTrail. Para obter mais informações sobre valores aclRequired
esperados, consulte Valores aclRequired para solicitações comuns do Amazon S3.
Se você tiver solicitações PutBucketAcl
ou PutObjectAcl
com cabeçalhos que concedam permissões baseadas em ACL, com exceção da ACL bucket-owner-full-control
predefinida, será necessário remover esses cabeçalhos antes de poder desabilitar as ACLs. Caso contrário, as solicitações falharão.
Para todas as outras solicitações que exigiram uma ACL para autorização, migre essas permissões de ACL para políticas de bucket. Depois, remova todas as ACLs do bucket antes de habilitar a configuração imposta pelo proprietário do bucket.
nota
Não remova ACLs de objetos. Caso contrário, as aplicações que dependem de ACLs de objetos para obter permissões perderão o acesso.
Se você perceber que nenhuma solicitação exigiu uma ACL para autorização, será possível continuar desabilitando as ACLs. Para obter mais informações sobre como identificar solicitações, consulte Usar logs de acesso ao servidor do Amazon S3 para identificar solicitações e Identificar solicitações do Amazon S3 usando o CloudTrail.
Revisar e atualizar políticas de bucket que usam chaves de condição relacionadas à ACL
Depois de adotar a configuração Imposto 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:::amzn-s3-demo-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:::amzn-s3-demo-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 ter 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
Por padrão, todos os novos buckets são criados usando a configuração Imposto pelo proprietário do bucket e as ACLs são desabilitadas. Recomendamos manter as ACLs desabilitadas. Como regra geral, recomendamos o uso de políticas baseadas em recursos do S3 (políticas de bucket e políticas de ponto de acesso) ou políticas do IAM para controle de acesso, em vez de ACLs. As políticas são uma opção de controle de acesso simplificada e mais flexível. Com políticas de bucket e políticas de ponto de acesso, é possível definir regras que se aplicam amplamente a todas as solicitações para seus recursos do Amazon S3.
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 Imposto pelo proprietário do bucket em Propriedade de objeto) 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 Imposto 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.
Configurar o Object Ownership
É possível aplicar uma configuração de Propriedade de objeto usando o console do Amazon 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.