Controlar o acesso a um bucket com políticas de usuário - Amazon Simple Storage Service

Controlar o acesso a um bucket com políticas de usuário

Esta demonstração explica como as permissões de usuário funcionam com o Amazon S3. Nesse exemplo, você cria um bucket com pastas. Em seguida, 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.

Elementos básicos de buckets e pastas

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 exibição dessas pastas e subpastas lógicas em seu bucket, como mostrado na imagem abaixo:


                Captura de tela do console mostrando a hierarquia de buckets, pastas e objetos.

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

     

    
                        Captura de tela do console mostrando a hierarquia de buckets, pastas e objetos.

     

    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; ele 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 como mostrado na imagem abaixo. 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.


                Captura de tela do console na guia do objeto com o objeto s3-dg.pdf na lista.

Resumo da demonstração

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. No passo a passo, 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

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. AWS Management ConsoleUse um navegador para se conectar ao 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 AWS Management Console com as credenciais da sua Conta da AWS, acesse 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 AWS Management Console no Guia do usuário do IAM.

Para fornecer um link de login para usuários do IAM

  1. Faça login no AWS Management Console e abra o console do IAM em https://console.aws.amazon.com/iam/.

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

  3. 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

Nesta etapa, você faz login no console do Amazon S3 com suas credenciais da Conta da AWS, cria um bucket, adiciona pastas (Development, Finance e Private) ao bucket e carrega um ou dois documentos de exemplo em cada pasta.

  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. Crie um bucket.

    Para obter instruções detalhadas, consulte Criação de um bucket.

  3. 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.

  4. 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> no Manual do usuário do Amazon Simple Storage Service.

  5. 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.

Etapa 2: criar usuários do IAM e um grupo

Agora use o console do IAM para adicionar dois usuários do IAM, Alice e Bob, à sua Conta da AWS. Crie também um grupo administrativo chamado Consultants e adicione os dois os usuários a ele.

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.

Para obter instruções passo a passo para criar um novo usuário do IAM, consulte Criação de um usuário do IAM em sua Conta da AWS no Guia do usuário do IAM. Ao criar usuários seguindo este passo a passo, selecione AWS Management Console access (Acesso ao console) e desmarque Programmatic access (Acesso programático).

Para obter instruções passo a passo para criar um grupo administrativo, consulte Criar seu primeiro usuário administrador e grupo do IAM no Guia do usuário do IAM.

Etapa 3: verificar se os usuários do IAM não têm nenhuma permissão

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), entre no AWS Management Console usando qualquer uma das credenciais de usuário do IAM.

  2. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

    Verifique a seguinte mensagem de console que diz que o acesso foi negado.

    
                        Captura de tela do console mostrando uma mensagem de acesso 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

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

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 Conta da AWS pai.

  1. Faça login no AWS Management Console e abra o console do IAM em 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.

  2. Crie a política gerenciada.

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

    2. Selecione a guia JSON.

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

      { "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 serviço do Amazon S3, que retorna uma lista de todos os buckets no remetente autenticado. O valor do elemento Effect determina se a permissão específica é permitida ou negada.

    4. 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.

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

    Para obter instruções passo a passo para anexar uma política gerenciada, consulte Adicionar e remover permissões de identidade do IAM 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.

  4. 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), entre no console usando qualquer uma das credenciais de usuário do IAM.

    2. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

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

      
                                    Captura de tela do console mostrando uma lista de buckets.

Etapa 4.2: Permitir que os usuários listem o conteúdo do nível raiz de um bucket

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.


                    Captura de tela do console mostrando o conteúdo do companybucket.
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, é necessário entendê-la um pouco mais.

Quando você clica no nome de um bucket, o console envia a solicitação GET Bucket 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.


                    Captura de tela do console mostrando o conteúdo do companybucket com três pastas e um arquivo PDF.

Se Bob ou Alice abrirem a pasta Development (Desenvolvimento), o console enviará a solicitação GET Bucket (Listar objetos) 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.


                    Captura de tela do console mostrando a pasta de desenvolvimento com os dois arquivos XLS.

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 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). 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 AWS Management Console e abra o console do IAM em 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.

  2. 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.

    Para obter instruções detalhadas, consulte Editar políticas do IAM 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.

    { "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":["/"] } } } ] }
  3. 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), acesse o AWS Management Console.

      Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

    2. 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.

      
                                    Captura de tela do console mostrando o bucket da empresa com as três pastas.

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

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

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

Para que a Alice possa listar o conteúdo da pasta Development, você deve aplicar uma política ao usuário 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 políticas em linha no Guia do usuário do IAM.

  1. Faça login no AWS Management Console e abra o console do IAM em 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.

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

    2. Clique no nome de usuário Alice.

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

    4. Selecione a guia JSON.

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

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } } ] }
    6. 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).

  3. 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), acesse o AWS Management Console.

    2. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

    3. 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.

      
                                    Captura de tela do console mostrando a pasta de desenvolvimento com os dois arquivos XLS.

Etapa 5.2: conceder permissões do usuário do IAM Alice para obter e colocar objetos na pasta Development

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 AWS Management Console e abra o console do Amazon S3 em 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.

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

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

    2. Clique no nome de usuário Alice.

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

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

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

      { "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/*"] } ] }
  3. 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), acesse o AWS Management Console.

    2. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

    3. 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

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.

  • 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:

{ "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

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.

Etapa 7: Proteger a pasta Private

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? 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 AWS Management Console e abra o console do Amazon S3 em 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.

  2. 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.

    Para obter instruções, consulte Editar políticas gerenciadas pelo cliente 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.

    { "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

Para limpar, abra o console do IAM e remova os usuários Alice e Bob. Para obter instruções passo a passo, consulte Excluir um usuário do IAM 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