Visão geral da lista de controle de acesso (ACL) - Amazon Simple Storage Service

Visão geral da lista de controle de acesso (ACL)

As listas de controle de acesso (ACLs) do Amazon S3 permitem o gerenciamento do acesso aos buckets e objetos. Cada bucket e objeto tem uma ACL anexada como um sub-recurso. Ela define a quais grupos ou Contas da AWS o acesso é concedido, bem como o tipo de acesso. Quando um recurso é solicitado, o Amazon S3 consulta a ACL correspondente para verificar se o solicitante tem as permissões de acesso necessárias.

A Propriedade de objetos 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 para desabilitar ou habilitar as ACLs. Por padrão, a Propriedade de Objetos 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 a eles exclusivamente usando políticas de gerenciamento de acesso.

A maioria dos casos de uso modernos no Amazon S3 não exige mais o uso de ACLs. 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 desabilitadas, é possível usar políticas para controlar o acesso a todos os objetos no bucket, independentemente de quem carregou os objetos para o bucket. Para ter mais informações, consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket.

Importante

Se o bucket usar a configuração Imposto pelo proprietário do bucket para a Propriedade de Objetos do S3, será necessário usar políticas para conceder acesso ao bucket e aos objetos contidos nele. Quando a configuração Imposto pelo proprietário do bucket estiver habilitada, as solicitações para definir listas de controle de acesso (ACLs) ou atualizar ACLs falharão e retornarão o código de erro AccessControlListNotSupported. Ainda há suporte para solicitações de leitura de ACLs.

Quando você cria um bucket ou um objeto, o Amazon S3 cria uma ACL padrão que concede ao proprietário do recurso controle total sobre o recurso. Isso é exibido no seguinte exemplo de ACL de bucket (a ACL de objeto padrão tem a mesma estrutura):

<?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>owner-display-name</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Canonical User"> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

A ACL de exemplo inclui um elemento Owner que identifica o proprietário pelo ID de usuário canônico da Conta da AWS. Para obter instruções sobre como encontrar seu ID de usuário canônico, consulte Encontrar um ID de usuário canônico da Conta da AWS. O elemento Grant identifica o favorecido (uma Conta da AWS ou um grupo predefinido) e a permissão concedida. Esta ACL padrão tem um elemento Grant para o proprietário. Conceda permissões adicionando elementos Grant, com cada concessão identificando o favorecido e a permissão.

nota

Uma ACL pode ter até 100 concessões.

Quem é o favorecido?

O favorecido pode ser uma Conta da AWS ou um dos grupos predefinidos do Amazon S3. Você concede permissão a uma Conta da AWS usando o endereço de e-mail ou o ID de usuário canônico. No entanto, se você fornecer um endereço de e-mail na solicitação de concessão, o Amazon S3 encontrará o ID de usuário canônico para essa conta e o adicionará à ACL. As ACLs resultantes sempre conterão o ID de usuário canônico para a Conta da AWS, e não o endereço de e-mail da Conta da AWS.

Ao conceder direitos de acesso, você especifica cada favorecido como um par de type="value", em que type é um dos seguintes:

  • id: se o valor especificado é o ID de usuário canônico de uma Conta da AWS

  • uri: se as permissões estiverem sendo concedidas a um grupo predefinido

  • emailAddress: se o valor especificado é o endereço de e-mail de uma Conta da AWS

Importante

O uso de endereços de e-mail para especificar um favorecido tem suporte somente nas seguintes regiões da AWS:

  • Leste dos EUA (Norte da Virgínia)

  • Oeste dos EUA (N. da Califórnia)

  • Oeste dos EUA (Oregon)

  • Ásia-Pacífico (Singapura)

  • Ásia-Pacífico (Sydney)

  • Ásia-Pacífico (Tóquio)

  • Europa (Irlanda)

  • América do Sul (São Paulo)

Para obter uma lista de todas as regiões e endpoints compatíveis com o Amazon S3, consulte Regiões e endpoints na Referência geral da Amazon Web Services.

exemplo Exemplo: endereço de e-mail

Por exemplo, o cabeçalho x-amz-grant-read a seguir concede às Contas da AWS identificadas por endereços de e-mail permissões para ler dados de objetos e os respectivos metadados:

x-amz-grant-read: emailAddress="xyz@example.com", emailAddress="abc@example.com"
Atenção

Ao conceder aos recursos acesso a outras Contas da AWS, esteja ciente de que as Contas da AWS podem delegar as permissões delas a usuários de suas próprias contas. Isso é conhecido como acesso entre contas. Para obter informações sobre como usar o acesso entre contas, consulte Criar uma função para delegar permissões a um usuário do IAM no Guia do usuário do IAM.

Encontrar um ID de usuário canônico da Conta da AWS

O ID de usuário canônico está associado à Conta da AWS. Esse ID é uma longa string de caracteres, como:

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be

Para obter informações sobre como encontrar o ID de usuário canônico da sua conta, consulte Como encontrar o ID de usuário canônico da Conta da AWS.

Você também pode pesquisar o ID de usuário canônico de uma Conta da AWS lendo a ACL de um bucket ou objeto para o qual a Conta da AWS tem permissões de acesso. Quando uma Conta da AWS individual recebe permissões por meio de uma solicitação de concessão, um registro de concessão é adicionado à ACL com o ID de usuário canônico da conta.

nota

Se você tornar seu bucket público (não recomendado) qualquer usuário não autenticado poderá carregar objetos para o bucket. Esses usuários anônimos não têm uma Conta da AWS. Quando um usuário anônimo carrega um objeto no bucket, o Amazon S3 adiciona um ID de usuário canônico especial (65a011a29cdf8ec533ec3d1ccaae921c) como o proprietário do objeto na ACL. Para ter mais informações, consulte Propriedade de bucket e objeto do Amazon S3.

Grupos predefinidos do Amazon S3

O Amazon S3 tem um conjunto de grupos predefinidos. Ao conceder acesso de conta a um grupo, especifique um dos URIs do Amazon S3 em vez do ID de usuário canônico. O Amazon S3 fornece os seguintes grupos predefinidos:

  • Grupo Usuários autenticados: representado por http://acs.amazonaws.com/groups/global/AuthenticatedUsers.

    Este grupo representa todas as Contas da AWS. A permissão de acesso a esse grupo permite que qualquer Conta da AWS acesse o recurso. No entanto, todas as solicitações devem estar assinadas (autenticadas).

    Atenção

    Quando você concede acesso ao grupo Usuários autenticados, qualquer usuário autenticado da AWS em todo o mundo pode acessar seu recurso.

  • Grupo Todos os usuários: representado por http://acs.amazonaws.com/groups/global/AllUsers.

    A permissão de acesso a esse grupo permite que qualquer um acesse o recurso. As solicitações podem estar assinadas (autenticadas) ou não (anônimas). As solicitações não assinadas omitem o cabeçalho Autenticação na solicitação.

    Atenção

    Recomendamos fortemente que você nunca conceda ao grupo All Users permissões WRITE, WRITE_ACP ou FULL_CONTROL. Por exemplo, embora WRITE as permissões não permitam que não proprietários substituam ou excluam objetos existentes, as permissões WRITE ainda permitem que qualquer pessoa armazene objetos em seu bucket, pelo qual você é cobrado. Para obter mais informações sobre essas permissões, consulte a seguinte seção Quais permissões posso conceder?.

  • Grupo Entrega de logs: representado por http://acs.amazonaws.com/groups/s3/LogDelivery.

    A permissão WRITE em um bucket permite que esse grupo grave logs de acesso ao servidor (consulte Registrar em log as solicitações com registro em log de acesso ao servidor) no bucket.

nota

Ao usar ACLs, um favorecido pode ser uma Conta da AWS ou um dos grupos predefinidos do Amazon S3. No entanto, o favorecido não pode ser um usuário do IAM. Para obter mais informações sobre usuários da AWS e permissões no IAM, consulte Usar o AWS Identity and Access Management.

Quais permissões posso conceder?

A tabela a seguir lista o conjunto de permissões para as quais o Amazon S3 oferece suporte em uma ACL. O conjunto de permissões da ACL é o mesmo para a ACL de objetos e para a ACL de bucket. No entanto, dependendo do contexto (ACL de buckets ou ACL de objetos), essas permissões da ACL concedem permissão para operações de bucket ou objeto específicas. A tabela lista as permissões e descreve seus significados no contexto de objetos e buckets.

Para obter mais informações sobre permissões de ACL no console do Amazon S3, consulte Configurar ACLs.

Permissões de ACL
Permissão Quando concedida em um bucket Quando concedida em um objeto
READ Permite ao favorecido listar os objetos no bucket Permite ao favorecido ler os dados do objeto e seus metadados
WRITE Permite que o favorecido crie novos objetos no bucket. Para os proprietários de bucket e objeto de objetos existentes, também permite exclusões e substituições desses objetos. Não aplicável
READ_ACP Permite ao favorecido ler a ACL do bucket Permite ao favorecido ler a ACL do objeto
WRITE_ACP Permite ao favorecido gravar a ACL para o bucket aplicável Permite ao favorecido gravar a ACL para o objeto aplicável
FULL_CONTROL Permite ao beneficiário as permissões READWRITEREAD_ACP e WRITE_ACP no bucket Permite ao beneficiário as permissões READREAD_ACP e WRITE_ACP no objeto
Atenção

Tenha cuidado ao conceder permissões de acesso a buckets e objetos do S3. Por exemplo, conceder acesso de WRITE a um bucket permite que o favorecido crie objetos no bucket. É altamente recomendável que você leia toda a seção Visão geral da lista de controle de acesso (ACL) antes de conceder permissões.

Mapeamento das permissões da ACL e das permissões da política de acesso

Conforme mostrado na tabela anterior, uma ACL concede apenas um conjunto finito de permissões, em comparação com o número de permissões que pode ser definido em uma política de acesso (consulte Ações de política do Amazon S3). Cada uma dessas permissões permite uma ou mais operações do Amazon S3.

A tabela a seguir mostra como cada uma das permissões da ACL se correlaciona com as permissões de política de acesso correspondentes. Como você pode ver, a política de acesso permite mais permissões que uma ACL. Use ACLs principalmente para conceder permissões básicas de leitura/gravação, similares às permissões de sistema de arquivos. Para obter mais informações sobre quando usar uma ACL, consulte Diretrizes para políticas de acesso.

Para obter mais informações sobre permissões de ACL no console do Amazon S3, consulte Configurar ACLs.

Permissão da ACL Permissões correspondentes da política de acesso quando permissões da ACL são concedidas em um bucket Permissões correspondentes da política de acesso quando permissões da ACL são concedidas em um objeto
READ s3:ListBucket, s3:ListBucketVersions, e s3:ListBucketMultipartUploads s3:GetObject e s3:GetObjectVersion
WRITE

s3:PutObject

O proprietário do bucket pode criar, substituir e excluir qualquer objeto no bucket, e o proprietário do objeto tem FULL_CONTROL sobre seu objeto.

Além disso, quando o favorecido é o proprietário do bucket, conceder a permissão WRITE em uma ACL do bucket permite que a ação s3:DeleteObjectVersion seja executada em qualquer versão naquele bucket.

Não aplicável
READ_ACP s3:GetBucketAcl s3:GetObjectAcl e s3:GetObjectVersionAcl
WRITE_ACP s3:PutBucketAcl s3:PutObjectAcl e s3:PutObjectVersionAcl
FULL_CONTROL Equivalente a conceder as permissões READ, WRITE, READ_ACP e WRITE_ACP da ACL. Assim, essa permissão da ACL equivale à combinação das permissões correspondentes da política de acesso. Equivalente a conceder as permissões READ, READ_ACP e WRITE_ACP da ACL. Assim, essa permissão da ACL equivale à combinação das permissões correspondentes da política de acesso.

Chaves de condição

Ao conceder permissões de política de acesso, você pode usar chaves de condição para restringir o valor da ACL em um objeto usando uma política de bucket. As chaves de contexto a seguir correspondem a ACLs. Você pode usar essas chaves de contexto para obrigar a usar uma ACL específica em uma solicitação:

  • s3:x-amz-grant-read: exigir acesso de leitura.

  • s3:x-amz-grant-write: exigir acesso de gravação.

  • s3:x-amz-grant-read-acp: exigir acesso de leitura à ACL do bucket.

  • s3:x-amz-grant-write-acp: exigir acesso de gravação à ACL do bucket.

  • s3:x-amz-grant-full-control: exigir controle total.

  • s3:x-amz-acl: exigir um ACL pré-configurada.

Para obter exemplos de políticas que envolvem cabeçalhos específicos de ACL, consulte Exemplo 1: Concessão da permissão s3:PutObject com uma condição que exige que o proprietário do bucket obtenha controle total. Consulte uma lista completa de chaves de condição específicas do Amazon S3 em Actions, resources, and condition keys for Amazon S3 na Referência de autorização do serviço.

Valores aclRequired para solicitações comuns do Amazon S3

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. O valor aclRequired que aparece nos logs de acesso ao servidor do CloudTrail ou do Amazon S3 depende de quais operações foram chamadas e de determinadas informações sobre o solicitante, o proprietário do objeto e o proprietário do bucket. Se nenhuma ACLs for necessária, ou se você estiver configurando a 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.

As tabelas a seguir listam os valores esperados de aclRequired nos logs de acesso ao servidor do CloudTrail ou do Amazon S3 para as várias operações de API do Amazon S3. É possível usar essas informações para entender quais operações do Amazon S3 dependem de ACLs para autorização. Nas tabelas a seguir, A, B e C representam as diferentes contas associadas ao solicitante, ao proprietário do objeto e ao proprietário do bucket. As entradas com um asterisco (*) indicam qualquer uma das contas A, B ou C.

nota

As operações PutObject na tabela a seguir, a menos que especificado de outra forma, indicam solicitações que não definem uma ACL, a não ser que a ACL seja bucket-owner-full-control. Um valor nulo para aclRequired indica que aclRequired está ausente nos logs do AWS CloudTrail.

Os valores de aclRequired para o CloudTrail
Nome de operação Solicitante Proprietário do objeto Bucket owner A política de bucket concede acesso Valor do aclRequired Motivo
GetObject A A A Yes ou No nulo Acesso na mesma conta
A B A Yes ou No nulo Acesso à mesma conta com o proprietário do bucket aplicado
A A B Sim nulo Acesso entre contas concedido pela política de bucket
A A B Não Sim O acesso entre contas depende da ACL
A A B Sim nulo Acesso entre contas concedido pela política de bucket
A B B Não Sim O acesso entre contas depende da ACL
A B C Sim nulo Acesso entre contas concedido pela política de bucket
A B C Não Sim O acesso entre contas depende da ACL
PutObject A Não aplicável A Yes ou No nulo Acesso na mesma conta
A Não aplicável B Sim nulo Acesso entre contas concedido pela política de bucket
A Não aplicável B Não Sim O acesso entre contas depende da ACL
PutObject com uma ACL (exceto por bucket-owner-full-control) * Não aplicável * Yes ou No Sim ACL de concessões de solicitação
ListObjects A Não aplicável A Yes ou No nulo Acesso na mesma conta
A Não aplicável B Sim nulo Acesso entre contas concedido pela política de bucket
A Não aplicável B Não Sim O acesso entre contas depende da ACL
DeleteObject A Não aplicável A Yes ou No nulo Acesso na mesma conta
A Não aplicável B Sim nulo Acesso entre contas concedido pela política de bucket
A Não aplicável B Não Sim O acesso entre contas depende da ACL
PutObjectAcl * * * Yes ou No Sim ACL de concessões de solicitação
PutBucketAcl * Não aplicável * Yes ou No Sim ACL de concessões de solicitação

nota

As operações REST.PUT.OBJECT na tabela a seguir, a menos que especificado de outra forma, indicam solicitações que não definem uma ACL, a não ser que a ACL seja bucket-owner-full-control. Uma string de valor aclRequired de “-” indica um valor nulo nos logs de acesso ao servidor do Amazon S3.

Valores de aclRequired para logs de acesso ao servidor do Amazon S3
Nome de operação Solicitante Proprietário do objeto Bucket owner A política de bucket concede acesso Valor do aclRequired Motivo
REST.GET.OBJECT A A A Yes ou No - Acesso na mesma conta
A B A Yes ou No - Acesso à mesma conta com o proprietário do bucket aplicado
A A B Sim - Acesso entre contas concedido pela política de bucket
A A B Não Sim O acesso entre contas depende da ACL
A B B Sim - Acesso entre contas concedido pela política de bucket
A B B Não Sim O acesso entre contas depende da ACL
A B C Sim - Acesso entre contas concedido pela política de bucket
A B C Não Sim O acesso entre contas depende da ACL
REST.PUT.OBJECT A Não aplicável A Yes ou No - Acesso na mesma conta
A Não aplicável B Sim - Acesso entre contas concedido pela política de bucket
A Não aplicável B Não Sim O acesso entre contas depende da ACL
REST.PUT.OBJECT com uma ACL (exceto por bucket-owner-full-control) * Não aplicável * Yes ou No Sim ACL de concessões de solicitação
REST.GET.BUCKET A Não aplicável A Yes ou No - Acesso na mesma conta
A Não aplicável B Sim - Acesso entre contas concedido pela política de bucket
A Não aplicável B Não Sim O acesso entre contas depende da ACL
REST.DELETE.OBJECT A Não aplicável A Yes ou No - Acesso na mesma conta
A Não aplicável B Sim - Acesso entre contas concedido pela política de bucket
A Não aplicável B Não Sim O acesso entre contas depende da ACL
REST.PUT.ACL * * * Yes ou No Sim ACL de concessões de solicitação

Amostra de ACL

A seguir, a amostra de ACL em um bucket identifica o proprietário do recurso e um conjunto de concessões. O formato é a representação XML de uma ACL na API REST do Amazon S3. O proprietário do bucket tem FULL_CONTROL sobre o recurso. Além disso, a ACL mostra como as permissões são concedidas em um recurso para duas Contas da AWS, identificadas pelo ID de usuário canônico, e para dois grupos predefinidos do Amazon S3 discutidos na seção anterior.

<?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>Owner-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>Owner-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>user1-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>WRITE</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>user2-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>READ</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee> <Permission>READ</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> </Grantee> <Permission>WRITE</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

ACL pré-configurada

O Amazon S3 oferece suporte a um conjunto de concessões predefinidas, conhecidas como ACLs pré-configuradas. Cada ACL pré-configurada tem um conjunto predefinido de concessões e permissões. A tabela a seguir lista o conjunto de ACLs pré-configuradas e as concessões predefinidas associadas.

ACL pré-configurada Aplica-se a Permissões adicionadas à ACL
private Bucket e objeto O proprietário obtém FULL_CONTROL. Ninguém mais tem direitos de acesso (padrão).
public-read Bucket e objeto O proprietário obtém FULL_CONTROL. O grupo AllUsers (consulte Quem é o favorecido?) obtém acesso READ.
public-read-write Bucket e objeto O proprietário obtém FULL_CONTROL. O grupo AllUsers obtém os acessos READ e WRITE. Essa concessão não costuma ser recomendada em um bucket.
aws-exec-read Bucket e objeto O proprietário obtém FULL_CONTROL. O Amazon EC2 obtém acesso READ a GET um pacote de imagem de máquina da Amazon (AMI) do Amazon S3.
authenticated-read Bucket e objeto O proprietário obtém FULL_CONTROL. O grupo AuthenticatedUsers obtém acesso READ.
bucket-owner-read Objeto O proprietário do objeto obtém FULL_CONTROL. O proprietário do bucket obtém acesso READ. Se você especificar essa ACL pré-configurada ao criar um bucket, o Amazon S3 a ignorará.
bucket-owner-full-control Objeto Os proprietários do objeto e do bucket obtêm FULL_CONTROL sobre o objeto. Se você especificar essa ACL pré-configurada ao criar um bucket, o Amazon S3 a ignorará.
log-delivery-write Bucket O grupo LogDelivery obtém as permissões WRITE e READ_ACP no bucket. Para obter mais informações sobre logs, consulte (Registrar em log as solicitações com registro em log de acesso ao servidor).
nota

Você pode especificar apenas uma dessas ACLs pré-configuradas na solicitação.

Especifique uma ACL pré-configurada na solicitação usando o cabeçalho de solicitação x-amz-acl. Quando o Amazon S3 recebe uma solicitação com uma ACL pré-configurada, ele adiciona as concessões predefinidas à ACL do recurso.