

# Configurar ACLs
<a name="managing-acls"></a>

Esta seção explica como gerenciar permissões de acesso para buckets do S3 e objetos usando listas de controle de acesso (ACLs). Você pode adicionar concessões à ACL do recurso usando o Console de gerenciamento da AWS, a AWS Command Line Interface (CLI), a API REST ou os AWS SDKs.

As permissões do bucket e de objeto são independentes uma da outra. Um objeto não herda as permissões de seu bucket. Por exemplo, se criar um bucket e conceder acesso de gravação a outro usuário, você não poderá acessar os objetos desse usuário, a menos que ele conceda o acesso explicitamente.

Você pode conceder permissões a outros usuários da Conta da AWS ou a grupos predefinidos. O usuário ou o grupo para o qual você concede permissões é chamado de usuário *favorecido*. Por padrão, o proprietário, que é a Conta da AWS que criou o bucket, tem permissões totais.

Cada permissão concedida a um usuário ou a um grupo adiciona uma entrada na ACL associada ao bucket. A ACL lista concessões, o que identifica o usuário favorecido e a permissão concedida.

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 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](about-object-ownership.md).

**Importante**  
Se o bucket de uso geral utilizar 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 de uso geral 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.

**Atenção**  
É altamente recomendável que você evite conceder acesso de gravação aos grupos **Todos (acesso público)** ou **Grupo de usuários autenticados (todos os usuários autenticados da AWS)**. Para obter mais informações sobre os efeitos da concessão de acesso de gravação a esses grupos, consulte [Grupos predefinidos do Amazon S3](acl-overview.md#specifying-grantee-predefined-groups).

## Usar o console do S3 para definir permissões de ACL para um bucket
<a name="set-bucket-permissions"></a>

O console exibe concessões de acesso combinadas para favorecidos duplicados. Para ver a lista completa de ACLs, use a API REST do Amazon S3, a AWS CLI ou os AWS SDKs.

A tabela a seguir mostra as permissões de ACL que você pode configurar para buckets no console do Amazon S3.


**Permissões de ACL do console do Amazon S3 para buckets**  

| Permissão do console | Permissão da ACL | Acesso | 
| --- | --- | --- | 
| Objetos - listar | READ | Permite ao favorecido listar os objetos no bucket | 
| Objetos - gravar | 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. | 
| ACL de bucket: ler | READ\$1ACP | Permite ao favorecido ler a ACL do bucket | 
| ACL do bucket - gravar | WRITE\$1ACP | Permite ao favorecido gravar a ACL para o bucket aplicável | 
| Todos (acesso público): Objetos - listar | READ | Concede acesso público de leitura para os objetos no bucket. Quando você concede acesso à lista a Todos (acesso público), qualquer pessoa no mundo pode acessar os objetos no bucket. | 
| Todos (acesso público): ACL do bucket - Ler | READ\$1ACP | Concede acesso de leitura pública para a ACL de bucket. Quando você concede acesso de leitura a Todos (acesso público), qualquer pessoa no mundo pode acessar a ACL de bucket. | 

Para obter mais informações sobre permissões de ACL, consulte [Visão geral da lista de controle de acesso (ACL)](acl-overview.md).

**Importante**  
Se o bucket de uso geral utilizar 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 de uso geral 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.

**Para definir permissões de ACL para um bucket**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No painel de navegação à esquerda, escolha **Buckets de uso geral**.

1. Na lista **Buckets**, escolha o nome do bucket para o qual você deseja definir permissões.

1. Escolha **Permissions (Permissões)**.

1. Em **Access control list** (Lista de controle de acesso), escolha **Edit** (Editar).

   Você pode editar as seguintes permissões de ACL para o bucket:

**Objetos**
   + **List** (Listar): permite ao favorecido listar os objetos no bucket.
   + **Gravação**: 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. 

     No console do S3, você só pode conceder acesso de gravação ao grupo de entrega de log do S3 e ao proprietário do bucket (sua Conta da AWS). É recomendável não conceder acesso de gravação a outros favorecidos. No entanto, se você precisar conceder acesso de gravação, poderá usar a AWS CLI, os AWS SDKs ou a API REST. 

**Bucket ACL**
   + **Read** (Ler): permite ao beneficiário ler a ACL do bucket.
   + **Write** (Gravar): permite ao beneficiário gravar a ACL para o bucket aplicável.

1. Para alterar as permissões do proprietário do bucket, ao lado de **Proprietário do bucket (sua conta da Conta da AWS)**, desmarque ou selecione uma das seguintes permissões de ACL:
   + **Objetos**: **listar** ou **gravar**
   + **ACL de bucket**: **ler** ou **gravar**

   O *proprietário* refere-se ao Usuário raiz da conta da AWS, e não a um usuário do AWS Identity and Access Management (IAM). Para obter mais informações sobre o usuário raiz, consulte [O Usuário raiz da conta da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) no *Guia do usuário do IAM*.

1. Para conceder ou desfazer permissões para o público em geral (todos na Internet), ao lado de **Everyone (public access) (Todos (acesso público))**, limpe ou selecione uma das seguintes permissões da ACL:
   + **Objetos**: **listar**
   + **ACL de bucket**: **ler**
**Atenção**  
Tenha cuidado ao conceder ao grupo **Everyone (Todos)** acesso público ao seu bucket do S3. Quando você concede acesso a esse grupo, qualquer pessoa no mundo pode acessar seu bucket. É altamente recomendável que você nunca conceda nenhum tipo de acesso público de gravação ao seu bucket do S3.

1. Para conceder ou cancelar as permissões de qualquer pessoa com uma Conta da AWS, ao lado de **Grupo de usuários autenticados (qualquer pessoa com uma Conta da AWS)**, selecione ou desmarque uma das seguintes permissões de ACL:
   + **Objetos**: **listar**
   + **ACL de bucket**: **ler**

1. Para conceder ou desfazer permissões para o Amazon S3 gravar logs de acesso ao servidor no bucket, em **S3 log delivery group (Grupo de entrega de log do S3)**, limpe ou selecione uma das seguintes permissões ACL:
   + **Objetos**: **listar** ou **gravar** 
   + **ACL de bucket**: **ler** ou **gravar** 

     Se um bucket for configurado como o bucket de destino para receber logs de acesso, as permissões do bucket devem permitir ao grupo **Log Delivery (Entrega de logs)** acesso de gravação ao bucket. Quando você ativa o registro em log do acesso ao servidor em um bucket, o console do Amazon S3 concede acesso de gravação ao grupo **Log Delivery (Entrega de logs)** para o bucket de destino do qual você opta por receber os logs. Para obter mais informações sobre o registro em log de acesso ao servidor, consulte [Habilitar o log de acesso ao servidor do Amazon S3](enable-server-access-logging.md).

1. Para conceder acesso a outra Conta da AWS, faça o seguinte:

   1. Escolha **Add grantee (Adicionar beneficiário)**.

   1. Na caixa **Grantee** (Beneficiário), insira o ID canônico da outra Conta da AWS.

   1. Selecione uma das seguintes permissões de ACL:
      + **Objetos**: **listar** ou **gravar**
      + **ACL de bucket**: **ler** ou **gravar**
**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](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) no *Guia do usuário do IAM*. 

1. Para remover o acesso a outra Conta da AWS, em **Acesso a outras Contas da AWS**, selecione **Remover**.

1. Para salvar suas alterações, escolha **Save changes (Salvar alterações)**.

## Usar o console do S3 para definir permissões de ACL para um objeto
<a name="set-object-permissions"></a>

O console exibe concessões de acesso combinadas para favorecidos duplicados. Para ver a lista completa de ACLs, use a API REST do Amazon S3, a AWS CLI ou os AWS SDKs. A tabela a seguir mostra as permissões de ACL que você pode configurar para objetos no console do Amazon S3.


**Permissões de ACL do console do Amazon S3 para objetos**  

| Permissão do console | Permissão da ACL | Acesso | 
| --- | --- | --- | 
| Objeto - Ler | READ | Permite ao favorecido ler os dados do objeto e seus metadados. | 
| ACL do objeto - ler | READ\$1ACP | Permite ao favorecido ler a ACL do objeto | 
| ACL Objeto - gravar | WRITE\$1ACP | Permite ao favorecido gravar a ACL para o objeto aplicável | 

Para obter mais informações sobre permissões de ACL, consulte [Visão geral da lista de controle de acesso (ACL)](acl-overview.md).

**Importante**  
Se o bucket de uso geral utilizar 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 de uso geral 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.

**Para definir permissões de ACL para um objeto**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Na lista **Buckets**, escolha o nome do bucket que contém o objeto.

1. Na lista **Name (Nome)**, escolha o nome do objeto para o qual você deseja definir permissões.

1. Escolha **Permissions (Permissões)**.

1. Na lista do controle de acesso (ACL), escolha **Edit** (Editar).

   Você pode editar as seguintes permissões de ACL para o objeto:

**Objeto**
   + **Read** (Ler): permite ao favorecido ler os dados do objeto e seus metadados.

**ACL do objeto **
   + **Read** (Ler): permite ao favorecido ler a ACL do objeto.
   + **Write** (Gravar): permite ao favorecido gravar a ACL para o objeto aplicável. No console do S3, você só pode conceder acesso de gravação ao proprietário do bucket (sua Conta da AWS). É recomendável não conceder acesso de gravação a outros favorecidos. No entanto, se você precisar conceder acesso de gravação, poderá usar a AWS CLI, os AWS SDKs ou a API REST. 

1. É possível gerenciar as permissões de acesso do objeto ao seguinte: 

   1. 

**Acesso para o proprietário do objeto**

      O *proprietário* refere-se ao Usuário raiz da conta da AWS, e não a um usuário do AWS Identity and Access Management (IAM). Para obter mais informações sobre o usuário raiz, consulte [O Usuário raiz da conta da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) no *Guia do usuário do IAM*.

      Para alterar as permissões de acesso ao objeto do proprietário, em **Acesso para o proprietário do objeto**, selecione **Sua AWS (proprietário)**.

      Marque as caixas de seleção das permissões que você deseja alterar e escolha **Save (Salvar)**.

   1. 

**Acesso para outras Contas da AWS**

      Para conceder permissões a um usuário da AWS de uma Conta da AWS diferente, em **Acesso a outras Contas da AWS**, selecione **Adicionar conta**. No campo **Enter an ID** (Inserir um ID), digite o ID canônico do usuário da AWS ao qual você deseja conceder permissões para o objeto. Para obter informações sobre como encontrar um ID canônico, consulte [Identificadores de Conta da AWS](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html) no *Referência geral da Amazon Web Services*. Você pode adicionar até 99 usuários.

      Marque as caixas de seleção das permissões que você deseja conceder ao usuário e escolha **Save (Salvar)**. Para exibir informações sobre as permissões, escolha os ícones da Ajuda. 

   1. 

**Acesso público**

      Para conceder acesso ao seu objeto para o público geral (todos no mundo), em **Public access (Acesso público)**, escolha **Everyone (Todos)**. Conceder permissões de acesso público significa que todos no mundo podem acessar o objeto.

      Marque as caixas de seleção das permissões que você deseja conceder e escolha **Save (Salvar)**. 
**Atenção**  
Tenha cuidado ao conceder ao grupo **Everyone (Todos)** acesso anônimo aos seus objetos do Amazon S3. Quando você concede acesso a esse grupo, qualquer pessoa no mundo pode acessar seu objeto. Se você precisar conceder acesso a todos, é altamente recomendável que só conceda permissões para **Read objects (Ler objetos)**.
Recomendamos fortemente que você *não* conceda ao grupo **Everyone (Todos)** permissões de gravação no objeto. Isso permite que qualquer pessoa substitua as permissões da ACL para o objeto.

## Uso da SDKs AWS
<a name="acl-using-sdk"></a>

Esta seção fornece exemplos de como configurar concessões na lista de controle de acesso (ACL) em buckets e objetos.

**Importante**  
Se o bucket de uso geral utilizar 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 de uso geral 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.

------
#### [ Java ]

Esta seção fornece exemplos de como configurar concessões na lista de controle de acesso (ACL) em buckets e objetos. O primeiro exemplo cria um bucket com uma ACL padrão (consulte [ACL pré-configurada](acl-overview.md#canned-acl)), cria uma lista de concessões de permissão personalizadas e, em seguida, substitui a ACL padrão por uma ACL que contém concessões personalizadas. O segundo exemplo mostra como modificar uma ACL usando o método `AccessControlList.grantPermission()`.

**Example Crie um bucket e especifique uma ACL pré-configurada que conceda permissão ao grupo de entrega de logs do S3**  
Este exemplo cria um bucket. Na solicitação, o exemplo especifica uma ACL padrão que concede permissão ao grupo de Entrega de logs para gravar logs no bucket.   

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.io.IOException;
import java.util.ArrayList;

public class CreateBucketWithACL {

    public static void main(String[] args) throws IOException {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";
        String userEmailForReadPermission = "*** user@example.com ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .build();

            // Create a bucket with a canned ACL. This ACL will be replaced by the
            // setBucketAcl()
            // calls below. It is included here for demonstration purposes.
            CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName, clientRegion.getName())
                    .withCannedAcl(CannedAccessControlList.LogDeliveryWrite);
            s3Client.createBucket(createBucketRequest);

            // Create a collection of grants to add to the bucket.
            ArrayList<Grant> grantCollection = new ArrayList<Grant>();

            // Grant the account owner full control.
            Grant grant1 = new Grant(new CanonicalGrantee(s3Client.getS3AccountOwner().getId()),
                    Permission.FullControl);
            grantCollection.add(grant1);

            // Grant the LogDelivery group permission to write to the bucket.
            Grant grant2 = new Grant(GroupGrantee.LogDelivery, Permission.Write);
            grantCollection.add(grant2);

            // Save grants by replacing all current ACL grants with the two we just created.
            AccessControlList bucketAcl = new AccessControlList();
            bucketAcl.grantAllPermissions(grantCollection.toArray(new Grant[0]));
            s3Client.setBucketAcl(bucketName, bucketAcl);

            // Retrieve the bucket's ACL, add another grant, and then save the new ACL.
            AccessControlList newBucketAcl = s3Client.getBucketAcl(bucketName);
            Grant grant3 = new Grant(new EmailAddressGrantee(userEmailForReadPermission), Permission.Read);
            newBucketAcl.grantAllPermissions(grant3);
            s3Client.setBucketAcl(bucketName, newBucketAcl);
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it and returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

**Example Atualizar ACL em um objeto existente**  
Este exemplo atualiza a ACL em um objeto. O exemplo realiza as seguintes tarefas:   
+ Recupera a ACL de um objeto
+ Limpa a ACL removendo todas as permissões existentes
+ Adiciona duas permissões: acesso total do proprietário, e WRITE\$1ACP (consulte [Quais permissões posso conceder?](acl-overview.md#permissions)) para o usuário identificado por endereço de e-mail
+ Salva a ACL no objeto

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AccessControlList;
import com.amazonaws.services.s3.model.CanonicalGrantee;
import com.amazonaws.services.s3.model.EmailAddressGrantee;
import com.amazonaws.services.s3.model.Permission;

import java.io.IOException;

public class ModifyACLExistingObject {

    public static void main(String[] args) throws IOException {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";
        String keyName = "*** Key name ***";
        String emailGrantee = "*** user@example.com ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(clientRegion)
                    .build();

            // Get the existing object ACL that we want to modify.
            AccessControlList acl = s3Client.getObjectAcl(bucketName, keyName);

            // Clear the existing list of grants.
            acl.getGrantsAsList().clear();

            // Grant a sample set of permissions, using the existing ACL owner for Full
            // Control permissions.
            acl.grantPermission(new CanonicalGrantee(acl.getOwner().getId()), Permission.FullControl);
            acl.grantPermission(new EmailAddressGrantee(emailGrantee), Permission.WriteAcp);

            // Save the modified ACL back to the object.
            s3Client.setObjectAcl(bucketName, keyName, acl);
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------
#### [ .NET ]

**Example Crie um bucket e especifique uma ACL pré-configurada que conceda permissão ao grupo de entrega de logs do S3**  
Este exemplo do C\$1 cria um bucket. Na solicitação, o código também especifica uma ACL padrão que concede permissões ao grupo de Entrega de logs para gravar os logs no bucket.  
 Para obter informações sobre como configurar e executar exemplos de código, consulte [Conceitos básicos do AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) no *Guia do desenvolvedor do AWS SDK for .NET*.   

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class ManagingBucketACLTest
    {
        private const string newBucketName = "*** bucket name ***"; 
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            CreateBucketUseCannedACLAsync().Wait();
        }

        private static async Task CreateBucketUseCannedACLAsync()
        {
            try
            {
                // Add bucket (specify canned ACL).
                PutBucketRequest putBucketRequest = new PutBucketRequest()
                {
                    BucketName = newBucketName,
                    BucketRegion = S3Region.EUW1, // S3Region.US,
                                                  // Add canned ACL.
                    CannedACL = S3CannedACL.LogDeliveryWrite
                };
                PutBucketResponse putBucketResponse = await client.PutBucketAsync(putBucketRequest);

                // Retrieve bucket ACL.
                GetACLResponse getACLResponse = await client.GetACLAsync(new GetACLRequest
                {
                    BucketName = newBucketName
                });
            }
            catch (AmazonS3Exception amazonS3Exception)
            {
                Console.WriteLine("S3 error occurred. Exception: " + amazonS3Exception.ToString());
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: " + e.ToString());
            }
        }
    }
}
```

**Example Atualizar ACL em um objeto existente**  
Este exemplo do C\$1 atualiza a ACL em um objeto existente. O exemplo realiza as seguintes tarefas:  
+ Recupera a ACL de um objeto.
+ Limpa a ACL removendo todas as permissões existentes.
+ Adiciona duas permissões: acesso total do proprietário, e WRITE\$1ACP para o usuário identificado por endereço de e-mail.
+ Salva a ACL enviando uma solicitação `PutAcl`.
Para obter informações sobre como configurar e executar exemplos de código, consulte [Conceitos básicos do AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) no *Guia do desenvolvedor do AWS SDK for .NET*.   

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class ManagingObjectACLTest
    {
        private const string bucketName = "*** bucket name ***"; 
        private const string keyName = "*** object key name ***"; 
        private const string emailAddress = "*** email address ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;
        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            TestObjectACLTestAsync().Wait();
        }
        private static async Task TestObjectACLTestAsync()
        {
            try
            {
                    // Retrieve the ACL for the object.
                    GetACLResponse aclResponse = await client.GetACLAsync(new GetACLRequest
                    {
                        BucketName = bucketName,
                        Key = keyName
                    });

                    S3AccessControlList acl = aclResponse.AccessControlList;

                    // Retrieve the owner (we use this to re-add permissions after we clear the ACL).
                    Owner owner = acl.Owner;

                    // Clear existing grants.
                    acl.Grants.Clear();

                    // Add a grant to reset the owner's full permission (the previous clear statement removed all permissions).
                    S3Grant fullControlGrant = new S3Grant
                    {
                        Grantee = new S3Grantee { CanonicalUser = owner.Id },
                        Permission = S3Permission.FULL_CONTROL
                        
                    };

                    // Describe the grant for the permission using an email address.
                    S3Grant grantUsingEmail = new S3Grant
                    {
                        Grantee = new S3Grantee { EmailAddress = emailAddress },
                        Permission = S3Permission.WRITE_ACP
                    };
                    acl.Grants.AddRange(new List<S3Grant> { fullControlGrant, grantUsingEmail });
 
                    // Set a new ACL.
                    PutACLResponse response = await client.PutACLAsync(new PutACLRequest
                    {
                        BucketName = bucketName,
                        Key = keyName,
                        AccessControlList = acl
                    });
            }
            catch (AmazonS3Exception amazonS3Exception)
            {
                Console.WriteLine("An AmazonS3Exception was thrown. Exception: " + amazonS3Exception.ToString());
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: " + e.ToString());
            }
        }
    }
}
```

------

## Uso da API REST
<a name="acl-using-rest-api"></a>

As APIs do Amazon S3 permitem a definição de uma ACL quando você cria um bucket ou um objeto. O Amazon S3 também fornece API para definir uma ACL em um bucket ou objeto existente. Estas APIs oferecem os seguintes métodos para definir uma ACL:
+ **Definir ACL usando cabeçalhos de solicitação**: ao enviar uma solicitação para criar um recurso (bucket ou objeto), defina uma ACL usando os cabeçalhos de solicitação. Com esses cabeçalhos, você pode especificar uma ACL pré-configurada ou especificar concessões explicitamente (identificando o favorecido e as permissões de maneira explícita). 
+ **Definir ACL usando o corpo da solicitação**: ao enviar uma solicitação para definir uma ACL em um recurso existente, defina a ACL no cabeçalho da solicitação ou no corpo. 

Para obter informações sobre o suporte à API REST para gerenciar ACLs, consulte as seções a seguir na *Referência da API do Amazon Simple Storage Service*:
+  [GetBucketAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETacl.html) 
+  [PutBucketAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTacl.html) 
+  [GetObjectAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETacl.html) 
+  [PutObjectAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUTacl.html) 
+  [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) 
+  [CreateBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUT.html) 
+  [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html) 
+  [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html) 

**Importante**  
Se o bucket de uso geral utilizar 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 de uso geral 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.

### Lista de controle de acesso (ACL - Access Control List) - Cabeçalhos específicos de solicitação
<a name="acl-headers-rest-api"></a>

Você pode usar cabeçalhos para conceder permissões baseadas em lista de controle de acesso (ACL). Por padrão, todos os objetos são privados. Somente o proprietário tem controle total de acesso. Ao adicionar um novo objeto, você pode conceder permissões a Contas da AWS individuais ou a grupos predefinidos pelo Amazon S3. Depois essas permissões são adicionadas à lista de controle de acesso (ACL) no objeto. Para obter mais informações, consulte [Visão geral da lista de controle de acesso (ACL)](acl-overview.md).

Com esta operação, você pode conceder permissões de acesso usando um destes dois métodos:
+ **Canned ACL (`x-amz-acl`) (ACL pré-configurada)** — O Amazon S3 oferece suporte a um conjunto de ACLs predefinidas, conhecidas como ACLs pré-configuradas. Cada ACL pré-configurada tem um conjunto predefinido de concessões e permissões. Para obter mais informações, consulte [ACL pré-configurada](acl-overview.md#canned-acl).
+ **Access Permissions** (Permissões de acesso): para conceder explicitamente permissões de acesso a grupos ou Contas da AWS específicos, use os seguintes cabeçalhos. Cada cabeçalho mapeia para permissões específicas compatíveis com o Amazon S3 em uma ACL. Para obter mais informações, consulte [Visão geral da lista de controle de acesso (ACL)](acl-overview.md). No cabeçalho, você especifica uma lista de favorecidos que obtêm a permissão específica. 
  + x-amz-grant-read
  + x-amz-grant-write
  + x-amz-grant-read-acp
  + x-amz-grant-write-acp
  + x-amz-grant-full-control

## Usar a AWS CLI
<a name="using-acl-cli"></a>

Para obter mais informações sobre como gerenciar ACLs usando a AWS CLI, consulte [put-bucket-acl](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-acl.html) na *Referência de comandos da AWS CLI*.

**Importante**  
Se o bucket de uso geral utilizar 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 de uso geral 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.