Diretrizes para políticas de acesso - Amazon Simple Storage Service

Diretrizes para políticas de acesso

O Amazon S3 oferece suporte para políticas com base em recursos e políticas de usuário para gerenciar o acesso aos recursos do Amazon S3. Para obter mais informações, consulte Gerenciar o acesso aos recursos. As políticas com base em recursos incluem políticas de bucket, listas de controle de acesso (ACLs) de bucket e ACLs de objeto. Esta seção descreve cenários específicos para usar políticas de acesso com base em recursos para gerenciar o acesso aos recursos do Amazon S3.

Quando usar uma política de acesso com base em ACL (ACLs de bucket e objeto)

Os buckets e objetos têm ACLs associadas que você pode usar para conceder permissões.

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. É possível usar Object Ownership para alterar esse comportamento padrão para que as ACLs sejam desabilitadas e você, como proprietário do bucket, automaticamente seja proprietário 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. Para obter mais informações, consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket.

Importante

Se o bucket usar a configuração aplicada pelo proprietário do bucket em S3 Object Ownership, será necessário usar políticas para conceder acesso ao bucket e aos objetos contidos nele. Solicitações para definir ACLs ou atualizar ACLs falham e retornam o código de erro AccessControlListNotSupported. Ainda há suporte para solicitações de leitura de ACLs.

Quando usar uma ACL de objeto

Os cenários a seguir mostram quando você usa ACLs de objeto para gerenciar permissões.

Objetos não pertencentes ao proprietário do bucket

Uma ACL de objeto é a única maneira de gerenciar o acesso a objetos não pertencentes ao proprietário do bucket. Uma Conta da AWS que seja proprietária do bucket pode conceder permissão à outra Conta da AWS para carregar objetos. O proprietário do bucket não detém esses objetos. A Conta da AWS que criou o objeto deve conceder permissões usando ACLs de objeto.

nota

Um proprietário do bucket não pode conceder permissões em objetos que não possui. Por exemplo, uma política de bucket que concede permissões de objeto aplica-se somente a objetos do proprietário do bucket. Contudo, o proprietário do bucket, que paga as faturas, pode gravar uma política de bucket para negar acesso a todos os objetos no bucket, independentemente de quem o possui. O proprietário do bucket também pode excluir todos os objetos no bucket.

Você precisa gerenciar permissões no nível do objeto

Suponha que as permissões variem de acordo com o objeto e você precise gerenciar permissões no nível do objeto. É possível gravar uma única instrução de política que conceda a uma Conta da AWS permissão de leitura e milhões de objetos com um prefixo específico de nome de chave. Por exemplo, você pode conceder permissão de leitura em objetos que começam com o prefixo de nome de chave logs. Contudo, se as permissões de acesso variam por objeto, conceder permissões para objetos individuais usando uma política de bucket talvez não seja prático. Além disso, o tamanho das políticas de bucket é limitado a 20 KB.

Nesse caso, você pode considerar o uso de ACLs de objeto como uma boa alternativa. No entanto, mesmo uma ACL de objeto é limitada a, no máximo, 100 concessões. Para obter mais informações, consulte Visão geral da lista de controle de acesso (ACL).

As ACLs de objeto controlam somente permissões no nível do objeto

Há uma política de bucket para o bucket todo, mas as ACLs de objeto são especificadas por objeto.

Uma Conta da AWS que possui um bucket pode conceder permissão a outra Conta da AWS para gerenciar a política de acesso. Isso permite que a conta altere algo na política. Para gerenciar permissões melhor, você poderá optar por não conceder uma permissão tão ampla e conceder somente as permissões READ-ACP e WRITE-ACP em um subconjunto de objetos. Isso limita a conta para gerenciar permissões somente em objetos específicos atualizando ACLs de objeto individuais.

Para usar ACLs para gerenciar permissões no nível do objeto e ter propriedade sobre novos objetos gravados em seu bucket, você pode aplicar a configuração preferencial do proprietário do bucket em Object Ownership. 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 serã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.

Alternativas ao uso de ACLs

Além de uma ACL de objeto, o proprietário de objeto pode gerenciar permissões de objeto de outras formas:

  • Se a Conta da AWS que é proprietária do objeto também for proprietária do bucket, ela poderá criar uma política de bucket para gerenciar permissões de objeto.

  • Se a Conta da AWS que é proprietária do objeto quiser conceder permissão a um usuário na respectiva conta, ela poderá usar uma política de usuário.

  • Como proprietário do bucket, se você quiser ter automaticamente a propriedade e o controle total sobre cada objeto de seu bucket, aplique a configuração aplicada pelo proprietário do bucket em Object Ownership para desabilitar ACLs. Consequentemente, o controle de acesso para seus dados é baseado em políticas. Para obter mais informações, consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket.

Quando usar uma ACL de bucket

O único caso de uso recomendado para ACLs de bucket é conceder permissões a determinados Serviços da AWS, como a conta de awslogsdelivery do Amazon CloudFront. Ao criar ou atualizar uma distribuição e habilitar o registro do CloudFront, o CloudFront atualiza a ACL do bucket para fornecer à conta awslogsdelivery permissões FULL_CONTROL para registrar logs em seu bucket. Para obter mais informações, consulte Permissões necessárias para configurar o registro padrão e acessar seus arquivos de log no Guia do desenvolvedor do Amazon CloudFront. Se o bucket que armazena os logs usar a configuração aplicada pelo proprietário do bucket em S3 Object Ownership para desabilitar ACLs, o CloudFront não poderá gravar logs no bucket. Para obter mais informações, consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket.

Quando usar uma política de bucket

Se uma Conta da AWS que é proprietária de um bucket quiser conceder permissão aos usuários na respectiva conta, ela poderá usar uma política de bucket ou de usuário. Porém, nos cenários a seguir, é necessário usar uma política de bucket.

Você deseja gerenciar permissões entre contas para todas as permissões do Amazon S3

Você pode usar ACLs para conceder permissões entre contas a outras contas. Mas as ACLs são compatíveis apenas com um conjunto finito de permissões, e essas não incluem todas as permissões do Amazon S3. Para obter mais informações, consulte Quais permissões posso conceder?. Por exemplo, você não pode conceder permissões em sub-recursos de bucket. Para obter mais informações, consulte Identity and Access Management no Amazon S3.

As políticas de bucket e de usuário são compatíveis com a concessão de permissão para todas as operações do Amazon S3. (Para obter mais informações, consulte Ações do Amazon S3.) No entanto, as políticas de usuário se destinam a gerenciar permissões para usuários em sua conta. Para permissões entre contas para outras Contas da AWS ou usuários em outra conta, você deve usar uma política de bucket.

Quando usar uma política de usuário

Geralmente, você pode usar uma política de usuário ou uma política de bucket para gerenciar permissões. Você pode optar por gerenciar permissões criando usuários e gerenciando permissões individualmente com a associação de políticas a usuários (ou grupos de usuários). Também é possível que você considere as políticas baseadas em recursos, como a política de bucket, funcionam melhor para o seu cenário.

Com o AWS Identity and Access Management (IAM), é possível criar vários usuários em sua Conta da AWS e gerenciar as permissões deles por meio de políticas de usuário. Um usuário do IAM deve ter permissões da conta pai a qual ele pertence e da Conta da AWS que é proprietária do recurso que ele deseja acessar. As permissões podem ser concedidas do seguinte modo:

  • Permissão na conta pai: a conta pai pode conceder permissões para seu usuário anexando uma política de usuário.

  • Permissão do proprietário do recurso: o proprietário do recurso pode conceder permissão para o usuário do IAM (usando uma política de bucket) ou para a conta pai (usando uma política de bucket, uma ACL de bucket ou uma ACL de objeto).

É semelhante a uma criança que deseja brincar com um brinquedo que pertence a outra pessoa. Nesse caso, a criança precisa obter permissão de um responsável para brincar com o brinquedo e permissão do proprietário do brinquedo.

Para obter mais informações, consulte Políticas de bucket e políticas de usuário.

Delegação de permissão

Se uma Conta da AWS for proprietária de um recurso, ela poderá conceder essas permissões a outra Conta da AWS. Essa conta pode então delegar essas permissões, ou um subconjunto delas, para usuários da conta. Isso é chamado de delegação de permissão. Porém, uma conta que recebe permissões de outra conta não pode delegar permissão entre contas para outra Conta da AWS.

Recomendamos analisar, primeiro, todos os tópicos introdutórios que explicam como gerenciar o acesso aos recursos do Amazon S3 e as diretrizes relacionadas. Para obter mais informações, consulte Identity and Access Management no Amazon S3. Você pode usar os seguintes tópicos para obter mais informações sobre as opções específicas da política de acesso.