

# Controlar o acesso a um bucket com políticas de usuário
<a name="walkthrough1"></a>

Esta demonstração explica como as permissões de usuário funcionam com o Amazon S3. Nesse exemplo, você cria um bucket com pastas. Depois, crie usuários do AWS Identity and Access Management (IAM) na sua Conta da AWS e conceda a eles permissões incrementais no bucket do Amazon S3 e nas pastas dele. 

**Topics**
+ [Elementos básicos de buckets e pastas](#walkthrough-background1)
+ [Resumo da demonstração](#walkthrough-scenario)
+ [Preparar para a demonstração](#walkthrough-what-you-need)
+ [Etapa 1: Criar um bucket](#walkthrough1-create-bucket)
+ [Etapa 2: criar usuários do IAM e um grupo](#walkthrough1-add-users)
+ [Etapa 3: verificar se os usuários do IAM não têm nenhuma permissão](#walkthrough1-verify-no-user-permissions)
+ [Etapa 4: Conceder permissões no nível do grupo](#walkthrough-group-policy)
+ [Etapa 5: conceder permissões específicas do usuário do IAM Alice](#walkthrough-grant-user1-permissions)
+ [Etapa 6: conceder permissões específicas do usuário do IAM Bob](#walkthrough1-grant-permissions-step5)
+ [Etapa 7: Proteger a pasta Private](#walkthrough-secure-private-folder-explicit-deny)
+ [Etapa 8: Limpar](#walkthrough-cleanup)
+ [Recursos relacionados](#RelatedResources-walkthrough1)

## Elementos básicos de buckets e pastas
<a name="walkthrough-background1"></a>

O modelo de dados do Amazon S3 é uma estrutura plana: você cria um bucket e o bucket armazena objetos. Não há hierarquia de buckets ou de subpastas, mas você pode emular uma hierarquia de pastas. Ferramentas como o console do Amazon S3 podem apresentar uma visualização dessas pastas e subpastas lógicas no bucket.

O console mostra que o bucket nomeado `companybucket` tem três pastas, `Private`, `Development` e `Finance`, e um objeto, `s3-dg.pdf`. O console usa os nomes de objeto (chaves) para criar uma hierarquia lógica com pastas e subpastas. Considere os seguintes exemplos:
+ Ao criar a pasta `Development`, o console cria um objeto com a chave `Development/`. Observe delimitador (`/`) no final.
+ Quando você faz upload de um objeto chamado `Projects1.xls` na pasta `Development`, o console sobe o objeto e concede a ele a chave `Development/Projects1.xls`. 

  Na chave, `Development` é o [prefixo](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#keyprefix) e `/` é o delimitador. A API do Amazon S3 oferece suporte a prefixos e delimitadores em suas operações. Por exemplo, você pode obter uma lista de todos os objetos no bucket com um prefixo e um delimitador específicos. No console, quando você abre a pasta `Development`, o console lista os objetos nela. No exemplo a seguir, a pasta `Development` contém um objeto. 

  Quando o console lista a pasta `Development` no bucket `companybucket`, ele envia uma solicitação para o Amazon S3 na qual especifica o prefixo `Development` e o delimitador `/` na solicitação. A resposta do console parece uma lista de pastas no sistema de arquivos de seu computador. O exemplo anterior mostra que o bucket `companybucket` tem um objeto com a chave `Development/Projects1.xls`.

O console está usando chaves de objeto para inferir uma hierarquia lógica. O Amazon S3 não tem hierarquia física. O Amazon S3 só tem buckets que contêm objetos em uma estrutura de arquivos simples. Ao criar objetos usando a API do Amazon S3, você pode usar chaves de objeto que implicam uma hierarquia lógica. Ao criar uma hierarquia lógica de objetos, você pode gerenciar o acesso a pastas individuais, como este passo a passo ensina.

Antes de começar, você precisa conhecer o conceito de conteúdo *no nível raiz* do bucket. Suponha que seu bucket `companybucket` contenha os seguintes objetos:
+ `Private/privDoc1.txt`
+ `Private/privDoc2.zip`
+ `Development/project1.xls`
+ `Development/project2.xls`
+ `Finance/Tax2011/document1.pdf`
+ `Finance/Tax2011/document2.pdf`
+ `s3-dg.pdf`

Essas chaves de objeto criam uma hierarquia lógica com `Private`, `Development` e `Finance` como pastas no nível raiz, e `s3-dg.pdf` como objeto no nível raiz. Quando você escolhe o nome do bucket no console do Amazon S3, os itens no nível raiz são exibidos. O console exibe os prefixos no nível superior (`Private/`, `Development/` e `Finance/`) como pastas no nível raiz. A chave de `s3-dg.pdf` não tem um prefixo, então, ela aparece como um item no nível raiz.



## Resumo da demonstração
<a name="walkthrough-scenario"></a>

Neste passo a passo, você cria um bucket com três pastas (`Private`, `Development` e `Finance`). 

Você tem dois usuários, Alice e Bob. Você quer que a Alice tenha acesso somente à pasta `Development`, e Bob tenha acesso à `Finance`. Você quer manter o conteúdo da pasta `Private` privado. Na demonstração, você gerencia o acesso criando usuários do IAM (o exemplo usa os mesmos nomes de usuário, Alice e Bob) e concede as permissões necessárias. 

O IAM também permite criar grupos de usuários e conceder permissões no nível do grupo que se aplicam a todos os usuários no grupo. Isso ajuda a gerenciar melhor as permissões. Neste exercício, Alice e Bob precisam ter algumas permissões comuns. Então, você também cria um grupo chamado `Consultants` e adiciona Alice e Bob a ele. Primeiro, você concede permissões anexando uma política de grupo ao grupo. Depois, adiciona permissões específicas do usuário anexando políticas a usuários específicos.

**nota**  
O passo a passo usa `companybucket` como o nome do bucket, Alice e Bob como os usuários do `Consultants`, e IAM como o nome do grupo. Como o Amazon S3 exige que os nomes de bucket sejam globalmente exclusivos, você precisará substituir o nome do bucket pelo nome que criar.

## Preparar para a demonstração
<a name="walkthrough-what-you-need"></a>

 Neste exemplo, use suas credenciais da Conta da AWS para criar usuários do IAM. Inicialmente, esses usuários não têm nenhuma permissão. Você concede gradualmente a esses usuários as permissões para executar ações específicas do Amazon S3. Para testar essas permissões, você entra no console com as credenciais de cada usuário. À medida que conceder gradualmente permissões como proprietário da Conta da AWS e testar permissões como um usuário do IAM, você precisará entrar e sair, sempre usando credenciais diferentes. Você pode fazer o teste em apenas um navegador, mas o processo é mais rápido se você usar dois navegadores diferentes. Use um navegador para se conectar ao Console de gerenciamento da AWS com as suas credenciais da Conta da AWS e outro para se conectar com as credenciais de usuário do IAM. 

 Para fazer login no Console de gerenciamento da AWS com as credenciais da sua Conta da AWS, acesse [https://console.aws.amazon.com/](https://console.aws.amazon.com/).  Um usuário do IAM não pode fazer login com o mesmo link. Um usuário do IAM deve usar uma página de login habilitada para o IAM. Como proprietário da conta, você pode fornecer este link para seus usuários. 

Para obter mais informações sobre o IAM, consulte a [página sobre login no Console de gerenciamento da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/console.html) no *Guia do usuário do IAM*.

### Para fornecer um link de login para usuários do IAM
<a name="walkthrough-sign-in-user-credentials"></a>

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

1. No painel **Navigation (Navegação)**, escolha **IAM Dashboard (Painel do IAM)**.

1. Observe o URL em **IAM users sign in link: (Link de login de usuários do IAM:)**. Você dará este link para usuários do IAM entrarem no console com seu nome de usuário e senha do IAM.

## Etapa 1: Criar um bucket
<a name="walkthrough1-create-bucket"></a>

Nesta etapa, você faz login no console do Amazon S3 com suas credenciais da Conta da AWS, cria um bucket, adiciona pastas a ele e carrega uma ou duas amostras de documentos em cada pasta. 

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. Crie um bucket. 

   Para obter instruções detalhadas, consulte [Criar um bucket de uso geral](create-bucket-overview.md).

1. Faça upload de um documento no bucket.

   Este exercício pressupõe que você tem o documento `s3-dg.pdf` no nível raiz desse bucket. Se você carregar um documento diferente, substitua o nome de arquivo para `s3-dg.pdf`.

1. Adicione três pastas nomeadas `Private`, `Finance` e `Development` ao bucket.

   Para obter instruções detalhadas para criar uma pasta, consulte [Organizar objetos no console do Amazon S3 usando pastas](using-folders.md)> no *Manual do usuário do Amazon Simple Storage Service*.

1. Faça upload de um ou dois documentos em cada pasta. 

   Neste exercício, suponha que você tenha carregado alguns documentos em cada pasta, resultando que o bucket tenha objetos com as seguintes chaves:
   + `Private/privDoc1.txt`
   + `Private/privDoc2.zip`
   + `Development/project1.xls`
   + `Development/project2.xls`
   + `Finance/Tax2011/document1.pdf`
   + `Finance/Tax2011/document2.pdf`
   + `s3-dg.pdf`

   

   Para obter instruções detalhadas, consulte [Fazer upload de objetos](upload-objects.md). 

## Etapa 2: criar usuários do IAM e um grupo
<a name="walkthrough1-add-users"></a>

Agora, use o [console do IAM](https://console.aws.amazon.com/iam/) para adicionar dois usuários do IAM, Alice e Bob, à sua Conta da AWS. Para obter instruções passo a passo, consulte [Criar um usuário do IAM na sua Conta da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) no *Guia do usuário do IAM*. 

Crie também um grupo administrativo chamado `Consultants`. Depois, adicione os dois usuários ao grupo. Para obter instruções passo a passo, consulte [Criação de grupos de usuários do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_create.html). 

**Atenção**  
Quando você adicionar usuários e um grupo, não anexe políticas que concedem permissões a esses usuários. No início, esses usuários não terão permissões. Nas próximas seções, você concederá permissões incrementalmente. Primeiro verifique se atribuiu senhas a esses usuários do IAM. Você utilizará essas credenciais de usuário para testar as ações do Amazon S3 e verificar se as permissões funcionam como esperado.

Consulte instruções detalhadas de como criar um usuário do IAM em [Criar um usuário do IAM na sua Conta da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) no *Guia do usuário do IAM*. Ao criar usuários seguindo este passo a passo, selecione **Acesso ao Console de gerenciamento da AWS** e desmarque [Acesso programático](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys).

Para obter instruções passo a passo para criar um grupo administrativo, consulte [Criar seu primeiro usuário administrador e grupo do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html) no *Guia do usuário do IAM*.



## Etapa 3: verificar se os usuários do IAM não têm nenhuma permissão
<a name="walkthrough1-verify-no-user-permissions"></a>

Se você estiver usando dois navegadores, agora poderá usar o segundo navegador para entrar no console usando uma das credenciais de usuário do IAM.

1. Usando o link de login de usuário do IAM (consulte [Para fornecer um link de login para usuários do IAM](#walkthrough-sign-in-user-credentials)), entre no Console de gerenciamento da AWS usando qualquer uma das credenciais de usuário do IAM.

1. Abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

    Verifique a mensagem do console que informa que o acesso foi negado. 

Agora, você pode começar a conceder permissões incrementais aos usuários. Antes, você anexará uma política de grupo concedendo as permissões de que os dois usuários precisam. 

## Etapa 4: Conceder permissões no nível do grupo
<a name="walkthrough-group-policy"></a>

Você quer que os usuários possam fazer o seguinte:
+ Listar todos os buckets de propriedade da conta pai. Para fazer isso, Bob e Alice devem ter permissão para a ação `s3:ListAllMyBuckets`.
+ Listar itens, pastas e objetos no nível raiz no bucket `companybucket`. Para fazer isso, Bob e Alice devem ter permissão para a ação `s3:ListBucket` no bucket `companybucket`.

Primeiro, você cria uma política que concede essas permissões e, depois, anexa-a ao grupo `Consultants`. 

### Etapa 4.1: Conceder permissão para listar todos os buckets
<a name="walkthrough1-grant-permissions-step1"></a>

Nesta etapa, você cria uma política gerenciada que concede aos usuários as permissões mínimas para listar todos os buckets de propriedade da conta pai. Depois, anexa a política ao grupo `Consultants`. Ao anexar a política gerenciada a um usuário ou um grupo, você concede ao usuário ou grupo a permissão para obter uma lista de buckets de propriedade da pai Conta da AWS.

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).
**nota**  
Como você está concedendo permissões de usuário, faça login com suas credenciais da Conta da AWS, e não como um usuário do IAM.

1. Crie a política gerenciada.

   1. No painel de navegação à esquerda, escolha **Policies (Políticas)** e **Create Policy (Criar política)**.

   1. Selecione a guia **JSON**.

   1. Copie a política de acesso a seguir e cole-a no campo de texto da política.

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "AllowGroupToSeeBucketListInTheConsole",
            "Action": ["s3:ListAllMyBuckets"],
            "Effect": "Allow",
            "Resource": ["arn:aws:s3:::*"]
          }
        ]
      }
      ```

------

      Uma política é um documento JSON. No documento, uma `Statement` é uma matriz de objetos, cada uma descrevendo uma permissão usando uma coleção de pares de valores de nome. A política anterior descreve uma permissão específica. A `Action` especifica o tipo de acesso. Na política, `s3:ListAllMyBuckets` é uma ação do Amazon S3 predefinida. Esta ação abrange a operação GET Service do Amazon S3, que retorna uma lista de todos os buckets pertencentes ao remetente autenticado. O valor do elemento `Effect` determina se a permissão específica é permitida ou negada.

   1. Escolha **Review Policy** (Revisar política). Na próxima página, insira `AllowGroupToSeeBucketListInTheConsole` no campo **Name (Nome)** e escolha em **Create policy (Criar política)**.
**nota**  
A entrada **Summary (Resumo)** exibe uma mensagem afirmando que a política não concede permissão nenhuma. Para esta apresentação, você pode, de maneira segura, ignorar essa mensagem.

1. Anexe a política gerenciada `AllowGroupToSeeBucketListInTheConsole` que você criou para o grupo `Consultants`.

   Consulte instruções detalhadas de como anexar uma política gerenciada em [Adicionar e remover permissões de identidade do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#attach-managed-policy-console) no *Guia do usuário do IAM*. 

   Anexe documentos de política a usuários e grupos do IAM no console do IAM. Como você quer que os dois usuários possam listar os buckets, você anexa a política ao grupo. 

1. Teste a permissão.

   1. Usando o link de login de usuário do IAM (consulte [Para fornecer um link de login para usuários do IAM](#walkthrough-sign-in-user-credentials)), entre no console usando qualquer uma das credenciais de usuário do IAM.

   1. Abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

      O console agora deve listar todos os buckets, mas não os objetos dos buckets.

### Etapa 4.2: Permitir que os usuários listem o conteúdo do nível raiz de um bucket
<a name="walkthrough1-grant-permissions-step2"></a>

Agora, você permite que todos os usuários no grupo `Consultants` listem itens no nível raiz do bucket `companybucket`. Quando um usuário escolhe o bucket da empresa no console do Amazon S3, ele pode visualizar os itens no nível raiz do bucket.

**nota**  
Esse exemplo usa `companybucket` como ilustração. Use o nome do bucket que você criou.

Para entender a solicitação que o console envia ao Amazon S3 quando você escolhe o nome de um bucket, a resposta que o Amazon S3 retorna e como o console a interpreta, examine o fluxo mais detalhadamente.

Quando você clica no nome de um bucket, o console envia a solicitação [GET Bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) ao Amazon S3. Essa solicitação inclui os parâmetros a seguir:
+ O parâmetro `prefix` com uma string vazia como valor. 
+ O parâmetro `delimiter` com `/` como valor. 

Veja a seguir uma solicitação de exemplo.

```
GET ?prefix=&delimiter=/ HTTP/1.1 
Host: companybucket.s3.amazonaws.com
Date: Wed, 01 Aug  2012 12:00:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=
```

O Amazon S3 retorna uma resposta que inclui o seguinte elemento `<ListBucketResult/>`.

```
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Name>companybucket</Name>
  <Prefix></Prefix>
  <Delimiter>/</Delimiter>
   ...
  <Contents>
    <Key>s3-dg.pdf</Key>
    ...
  </Contents>
  <CommonPrefixes>
    <Prefix>Development/</Prefix>
  </CommonPrefixes>
  <CommonPrefixes>
    <Prefix>Finance/</Prefix>
  </CommonPrefixes>
  <CommonPrefixes>
    <Prefix>Private/</Prefix>
  </CommonPrefixes>
</ListBucketResult>
```

O objeto `s3-dg.pdf` da chave não contém o delimitador `/`, e o Amazon S3 retorna a chave no elemento `<Contents>`. Contudo, todas as outras chaves no bucket de exemplo contêm o delimitador `/`. O Amazon S3 agrupa essas chaves e retorna um elemento `<CommonPrefixes>` para cada um dos valores distintos de prefixo `Development/`, `Finance/` e `Private/`, isto é, uma substring desde o início dessas chaves até a primeira ocorrência do delimitador `/` especificado. 

O console interpreta este resultado e exibe os itens no nível raiz como três pastas e uma chave de objeto. 

Se Bob ou Alice abrirem a pasta **Development (Desenvolvimento)**, o console enviará a solicitação [GET Bucket (Listar objetos)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) ao Amazon S3 com os parâmetros `prefix` e `delimiter` definidos como os seguintes valores:
+ O parâmetro `prefix` com valor `Development/`.
+ O parâmetro `delimiter` com valor "`/`". 

Em resposta, o Amazon S3 retorna as chaves de objeto que começam com o prefixo especificado. 

```
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Name>companybucket</Name>
  <Prefix>Development</Prefix>
  <Delimiter>/</Delimiter>
   ...
  <Contents>
    <Key>Project1.xls</Key>
    ...
  </Contents>
  <Contents>
    <Key>Project2.xls</Key>
    ...
  </Contents> 
</ListBucketResult>
```

O console mostra as chaves de objeto.

Agora, volte a conceder aos usuários a permissão para listar itens no nível raiz do bucket. Para listar conteúdo de bucket, os usuários precisam de permissão para chamar a ação `s3:ListBucket`, conforme exibido na seguinte declaração de política. Para garantir que eles vejam somente o conteúdo no nível raiz, você adiciona uma condição de que os usuários devem especificar um `prefix` vazio na solicitação, isto é, eles não podem clicar duas vezes em nenhuma das pastas no nível raiz. Finalmente, você adiciona uma condição para solicitar o acesso de pasta exigindo que as solicitações de usuário incluam o parâmetro `delimiter` com valor "`/`". 

```
{
  "Sid": "AllowRootLevelListingOfCompanyBucket",
  "Action": ["s3:ListBucket"],
  "Effect": "Allow",
  "Resource": ["arn:aws:s3:::companybucket"],
  "Condition":{ 
         "StringEquals":{
             "s3:prefix":[""], "s3:delimiter":["/"]
                        }
              }
}
```

Quando você escolhe o bucket no console do Amazon S3, o console primeiro envia a solicitação [GET Bucket location](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html) para encontrar a Região da AWS em que o bucket está implantado. Depois, o console usa o endpoint específico da região para o bucket enviar a solicitação [GET Bucket (listar objetos)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html). Como resultado, se os usuários forem usar o console, você deverá conceder permissão para a ação `s3:GetBucketLocation` conforme exibido na seguinte declaração de política.

```
{
   "Sid": "RequiredByS3Console",
   "Action": ["s3:GetBucketLocation"],
   "Effect": "Allow",
   "Resource": ["arn:aws:s3:::*"]
}
```

**Para permitir que os usuários listem o conteúdo do nível raiz do bucket**

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

   Use as credenciais da sua Conta da AWS, e não as credenciais de um usuário do IAM, para fazer login no console.

1. Substitua a política gerenciada existente `AllowGroupToSeeBucketListInTheConsole` que está anexada ao grupo `Consultants` pela política a seguir, que também permite a ação `s3:ListBucket`. Lembre-se de substituir *`companybucket`* na política `Resource` pelo nome do bucket. 

   Consulte instruções detalhadas em [Edição de políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html) no *Guia do usuário do IAM*. Ao seguir as instruções detalhadas, siga as etapas para aplicar as alterações em todas as entidades principais às quais a política está anexada. 

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	                  
     "Statement": [
        {
          "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket",
          "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ],
          "Effect": "Allow",
          "Resource": [ "arn:aws:s3:::*"  ]
        },
        {
          "Sid": "AllowRootLevelListingOfCompanyBucket",
          "Action": ["s3:ListBucket"],
          "Effect": "Allow",
          "Resource": ["arn:aws:s3:::companybucket"],
          "Condition":{ 
                "StringEquals":{
                       "s3:prefix":[""], "s3:delimiter":["/"]
                              }
                      }
        }
     ] 
   }
   ```

------

1. Teste as permissões atualizadas.

   1. Usando o link de login de usuário do IAM (consulte [Para fornecer um link de login para usuários do IAM](#walkthrough-sign-in-user-credentials)), acesse o Console de gerenciamento da AWS. 

      Abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

   1. Escolha o bucket que você criou, e o console mostrará os itens no nível raiz do bucket. Se você escolher alguma pasta no bucket, não verá o conteúdo dela, porque ainda não concedeu essas permissões.

Esse teste é bem-sucedido quando os usuários usam o console do Amazon S3. Ao escolher um bucket no console, a implementação do console envia uma solicitação que inclui o parâmetro `prefix` com uma string vazia como seu valor e o parâmetro `delimiter` com "`/`" como valor.

### Etapa 4.3: Resumo da política de grupo
<a name="walkthrough-group-policy-summary"></a>

O efeito final da política de grupo que você adicionou é conceder aos usuários do IAM Alice e Bob as seguintes permissões mínimas:
+ Listar todos os buckets de propriedade da conta pai.
+ Ver itens no nível raiz no bucket `companybucket`. 

Contudo, os usuários ainda não podem fazer muita coisa. Agora, conceda as permissões específicas do usuário da seguinte maneira:
+ Permite que a Alice obtenha e coloque objetos na pasta `Development`.
+ Permite que o Bob obtenha e coloque objetos na pasta `Finance`.

Para permissões específicas do usuário, anexe uma política ao usuário específico, não ao grupo. Na próxima seção, conceda permissão para a Alice trabalhar na pasta `Development`. Você pode repetir as etapas para conceder a Bob permissão semelhante para trabalhar na pasta `Finance`.

## Etapa 5: conceder permissões específicas do usuário do IAM Alice
<a name="walkthrough-grant-user1-permissions"></a>

Agora você concede permissões adicionais a Alice para que ela possa ver o conteúdo da pasta `Development` e obter e colocar objetos nela.

### Etapa 5.1: conceder permissão do usuário do IAM Alice para listar o conteúdo da pasta Development
<a name="walkthrough-grant-user1-permissions-listbucket"></a>

Para que Alice possa listar o conteúdo da pasta `Development`, você deve aplicar uma política à usuária Alice concedendo permissão para a ação `s3:ListBucket` no bucket `companybucket`, contanto que a solicitação inclua o prefixo `Development/`. Você quer que essa política seja aplicada somente ao usuário Alice, então, usa uma política em linha. Para obter mais informações sobre políticas em linha, consulte [Políticas gerenciadas e em linha](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html) no *Guia do usuário do IAM*.

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

   Use as credenciais da sua Conta da AWS, e não as credenciais de um usuário do IAM, para fazer login no console.

1. Crie uma política em linha para conceder ao usuário Alice permissão para listar o conteúdo da pasta `Development`.

   1. No painel de navegação à esquerda, escolha **Uses (Usuários)**.

   1. Selecione o nome de usuário **Alice**.

   1. Na página de detalhes do usuário, selecione a guia **Permissions (Permissões)** e escolha **Add inline policy (Adicionar política em linha)**.

   1. Selecione a guia **JSON**.

   1. Copie a política a seguir e cole-a no campo de texto da política.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	   
          "Statement": [
          {
            "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",
            "Action": ["s3:ListBucket"],
            "Effect": "Allow",
            "Resource": ["arn:aws:s3:::companybucket"],
            "Condition": { "StringLike": {"s3:prefix": ["Development/*"] }
             }
          }
        ]
      }
      ```

------

   1. Escolha **Review Policy** (Revisar política). Na próxima página, insira um nome no campo **Name (Nome)** e escolha **Create policy (Criar política)**.

1. Teste a alteração nas permissões de Alice:

   1. Usando o link de login de usuário do IAM (consulte [Para fornecer um link de login para usuários do IAM](#walkthrough-sign-in-user-credentials)), acesse o Console de gerenciamento da AWS. 

   1. Abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

   1. No console do Amazon S3, verifique se Alice pode visualizar a lista de objetos na pasta `Development/` no bucket. 

      Quando o usuário escolhe a pasta `/Development` para visualizar a lista de objetos nela, o console do Amazon S3 envia a solicitação `ListObjects` ao Amazon S3 com o prefixo `/Development`. Como o usuário recebe permissão para visualizar a lista de objetos com o prefixo `Development` e o delimitador `/`, o Amazon S3 retorna a lista de objetos com o prefixo de chave `Development/`, e o console exibe a lista.

### Etapa 5.2: conceder permissões do usuário do IAM Alice para obter e colocar objetos na pasta Development
<a name="walkthrough-grant-user1-permissions-get-put-object"></a>

Para que a Alice possa obter e colocar objetos na pasta `Development`, ela precisa de permissão para chamar as ações `s3:GetObject` e `s3:PutObject`. As declarações de política a seguir concedem essas permissões, contanto que a solicitação inclua o parâmetro `prefix` com um valor de `Development/`.

```
{
    "Sid":"AllowUserToReadWriteObjectData",
    "Action":["s3:GetObject", "s3:PutObject"],
    "Effect":"Allow",
    "Resource":["arn:aws:s3:::companybucket/Development/*"]
 }
```



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/).

   Use as credenciais da sua Conta da AWS, e não as credenciais de um usuário do IAM, para fazer login no console.

1. Edite a política em linha que você criou na etapa anterior. 

   1. No painel de navegação à esquerda, escolha **Uses (Usuários)**.

   1. Selecione o nome de usuário Alice.

   1. Na página de detalhes do usuário, selecione a guia **Permissions (Permissões)** e depois expanda a seção **Inline Policies (Políticas em linha)**.

   1. Escolha **Edit Policy (Editar política)** ao lado do nome da política que você criou na etapa anterior.

   1. Copie a política a seguir e cole no campo do texto de política para substituir a política existente:

------
#### [ JSON ]

****  

      ```
      {
           "Version":"2012-10-17",		 	 	 
           "Statement":[
            {
               "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest",
               "Action":["s3:ListBucket"],
               "Effect":"Allow",
               "Resource":["arn:aws:s3:::companybucket"],
               "Condition":{
                  "StringLike":{"s3:prefix":["Development/*"]
                  }
               }
            },
            {
              "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", 
              "Action":["s3:GetObject", "s3:PutObject"],
              "Effect":"Allow",
              "Resource":["arn:aws:s3:::companybucket/Development/*"]
            }
         ]
      }
      ```

------

1. Teste a política atualizada:

   1. Usando o link de login de usuário do IAM (consulte [Para fornecer um link de login para usuários do IAM](#walkthrough-sign-in-user-credentials)), acesse o Console de gerenciamento da AWS. 

   1. Abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

   1. No console do Amazon S3, verifique se Alice agora pode adicionar um objeto e fazer download de um objeto na pasta `Development`. 

### Etapa 5.3: negar explicitamente permissões do usuário do IAM Alice a todas as outras pastas no bucket
<a name="walkthrough-grant-user1-explicit-deny-other-access"></a>

O usuário Alice agora pode listar o conteúdo do nível raiz no bucket `companybucket`. Ela também pode obter e colocar objetos na pasta `Development`. Se você quiser realmente limitar as permissões de acesso, poderá negar explicitamente o acesso de Alice a todas as outras pastas no bucket. Se houver alguma outra política (política de bucket ou ACL) que concede a Alice acesso a outras pastas no bucket, essa negação explícita cancelará essas permissões. 

É possível adicionar a seguinte declaração à política de usuário Alice que exige que todas as solicitações que Alice envia ao Amazon S3 incluam o parâmetro `prefix`, cujo valor pode ser `Development/*` ou uma string vazia. 



```
{
   "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
   "Action": ["s3:ListBucket"],
   "Effect": "Deny",
   "Resource": ["arn:aws:s3:::companybucket"],
   "Condition":{  "StringNotLike": {"s3:prefix":["Development/*",""] },
                  "Null"         : {"s3:prefix":false }
    }
}
```

Há duas expressões condicionais no bloco `Condition`. O resultado dessas expressões condicionais é combinado usando o operador lógico `AND`. Se ambas as condições forem verdadeiras, o resultado da condição combinada será verdadeiro. Como o `Effect` nessa política é `Deny`, quando `Condition` é classificado como verdadeiro, os usuários não podem executar a `Action` especificada.
+ A expressão condicional `Null` garante que as solicitações de Alice incluam o parâmetro `prefix`. 

  O parâmetro `prefix` requer acesso de pasta. Se você enviar uma solicitação sem o parâmetro `prefix`, o Amazon S3 retornará todas as chaves de objeto. 

  Se a solicitação incluir o parâmetro `prefix` com um valor nulo, a expressão será classificada como verdadeiro e, portanto, a `Condition` inteira será classificada como verdadeira. Você deve permitir uma string vazia como o valor do parâmetro `prefix`. Com a discussão anterior, lembre-se que a string nula permite que Alice recupere itens de bucket no nível raiz como o console faz na discussão anterior. Para obter mais informações, consulte [Etapa 4.2: Permitir que os usuários listem o conteúdo do nível raiz de um bucket](#walkthrough1-grant-permissions-step2). 
+ A expressão condicional `StringNotLike` garante que, se o valor do parâmetro `prefix` for especificado e não for `Development/*`, a solicitação falhará. 

Siga as etapas na seção anterior e atualize novamente a política em linha que você criou para o usuário Alice.

Copie a política a seguir e cole no campo do texto de política para substituir a política existente:

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest",
         "Action":["s3:ListBucket"],
         "Effect":"Allow",
         "Resource":["arn:aws:s3:::companybucket"],
         "Condition":{
            "StringLike":{"s3:prefix":["Development/*"]
            }
         }
      },
      {
        "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", 
        "Action":["s3:GetObject", "s3:PutObject"],
        "Effect":"Allow",
        "Resource":["arn:aws:s3:::companybucket/Development/*"]
      },
      {
         "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
         "Action": ["s3:ListBucket"],
         "Effect": "Deny",
         "Resource": ["arn:aws:s3:::companybucket"],
         "Condition":{  "StringNotLike": {"s3:prefix":["Development/*",""] },
                        "Null"         : {"s3:prefix":false }
          }
      }
   ]
}
```

------

## Etapa 6: conceder permissões específicas do usuário do IAM Bob
<a name="walkthrough1-grant-permissions-step5"></a>

Agora você quer conceder ao Bob permissão para a pasta `Finance`. Siga as etapas que você usou anteriormente para conceder permissões a Alice, mas substitua a pasta `Development` pela pasta `Finance`. Para obter instruções detalhadas, consulte [Etapa 5: conceder permissões específicas do usuário do IAM Alice](#walkthrough-grant-user1-permissions). 

## Etapa 7: Proteger a pasta Private
<a name="walkthrough-secure-private-folder-explicit-deny"></a>

Neste exemplo, você tem apenas dois usuários. Você concedeu todas as permissões mínimas necessárias no nível do grupo e concedeu permissões no nível do usuário somente quando realmente precisou de permissões no nível do usuário individual. Essa abordagem ajuda a minimizar o esforço de gerenciamento de permissões. Conforme o número de usuários aumenta, gerenciar permissões pode ser um problema. Por exemplo, você não quer que nenhum dos usuários neste exemplo acesse o conteúdo da pasta `Private`. Como garantir que você não vai conceder acidentalmente uma permissão ao usuário para a pasta `Private`? Adicione uma política que negue explicitamente acesso à pasta. Uma negação explícita substitui todas as outras permissões. 

Para garantir que a pasta `Private` permaneça privada, você pode adicionar as duas declarações de negação a seguir à política de grupo:
+ Adicione a seguinte declaração para negar explicitamente qualquer ação em recursos na pasta `Private` (`companybucket/Private/*`).

  ```
  {
    "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup",
    "Action": ["s3:*"],
    "Effect": "Deny",
    "Resource":["arn:aws:s3:::companybucket/Private/*"]
  }
  ```
+ Você também nega permissão para a ação de listar objetos quando a solicitação especifica o prefixo `Private/`. No console, se Bob ou Alice abrir a pasta `Private`, essa política fará o Amazon S3 retornar uma resposta de erro.

  ```
  {
    "Sid": "DenyListBucketOnPrivateFolder",
    "Action": ["s3:ListBucket"],
    "Effect": "Deny",
    "Resource": ["arn:aws:s3:::*"],
    "Condition":{
        "StringLike":{"s3:prefix":["Private/"]}
     }
  }
  ```

Substitua a política do grupo `Consultants` por uma política atualizada que inclua as declarações de negação anteriores. Após a política atualizada ser aplicada, nenhum usuário no grupo poderá acessar a pasta `Private` no seu 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/).

   Use as credenciais da sua Conta da AWS, e não as credenciais de um usuário do IAM, para fazer login no console.

1. Substitua a política gerenciada `AllowGroupToSeeBucketListInTheConsole` existente que está anexada ao grupo `Consultants` pela política a seguir. Lembre-se de substituir *`companybucket`* na política pelo nome do bucket. 

   Consulte instruções em [Edição de políticas gerenciadas pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html#edit-managed-policy-console) no *Guia do usuário do IAM*. Ao seguir as instruções, não se esqueça de seguir as orientações para aplicar alterações em todas as entidades principais às quais a política está anexada. 

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket",
         "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::*"]
       },
       {
         "Sid": "AllowRootLevelListingOfCompanyBucket",
         "Action": ["s3:ListBucket"],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::companybucket"],
         "Condition":{
             "StringEquals":{"s3:prefix":[""]}
          }
       },
       {
         "Sid": "RequireFolderStyleList",
         "Action": ["s3:ListBucket"],
         "Effect": "Deny",
         "Resource": ["arn:aws:s3:::*"],
         "Condition":{
             "StringNotEquals":{"s3:delimiter":"/"}
          }
        },
       {
         "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup",
         "Action": ["s3:*"],
         "Effect": "Deny",
         "Resource":["arn:aws:s3:::companybucket/Private/*"]
       },
       {
         "Sid": "DenyListBucketOnPrivateFolder",
         "Action": ["s3:ListBucket"],
         "Effect": "Deny",
         "Resource": ["arn:aws:s3:::*"],
         "Condition":{
             "StringLike":{"s3:prefix":["Private/"]}
          }
       }
     ]
   }
   ```

------



## Etapa 8: Limpar
<a name="walkthrough-cleanup"></a>

Para limpar, abra o [console do IAM](https://console.aws.amazon.com/iam/) e remova os usuários Alice e Bob. Consulte instruções detalhadas em [Exclusão de um usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting) no *Guia do usuário do IAM*.

Para garantir que você não seja mais cobrado pelo armazenamento, exclua também os objetos e o bucket que criou neste exercício.

## Recursos relacionados
<a name="RelatedResources-walkthrough1"></a>
+ [Como gerenciar políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html) no *Guia do usuário do IAM*