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. 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.
Tópicos
- Elementos básicos de buckets e pastas
- Resumo da demonstração
- Preparar para a demonstração
- Etapa 1: Criar um bucket
- Etapa 2: criar usuários do IAM e um grupo
- Etapa 3: verificar se os usuários do IAM não têm nenhuma permissão
- Etapa 4: Conceder permissões no nível do grupo
- Etapa 5: conceder permissões específicas do usuário do IAM Alice
- Etapa 6: conceder permissões específicas do usuário do IAM Bob
- Etapa 7: Proteger a pasta Private
- Etapa 8: Limpar
- Recursos relacionados
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 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 chaveDevelopment/
. Observe delimitador (/
) no final. -
Quando você faz upload de um objeto chamado
Projects1.xls
na pastaDevelopment
, o console sobe o objeto e concede a ele a chaveDevelopment/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 pastaDevelopment
, o console lista os objetos nela. No exemplo a seguir, a pastaDevelopment
contém um objeto.Quando o console lista a pasta
Development
no bucketcompanybucket
, ele envia uma solicitação para o Amazon S3 na qual especifica o prefixoDevelopment
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 bucketcompanybucket
tem um objeto com a chaveDevelopment/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
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
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 AWS Management Console 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/
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
-
Faça login no AWS Management Console e abra o console do IAM em https://console.aws.amazon.com/iam/
. -
No painel Navigation (Navegação), escolha IAM Dashboard (Painel do IAM).
-
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 a ele e carrega uma ou duas amostras de documentos em cada pasta.
Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/
. -
Crie um bucket.
Para obter instruções detalhadas, consulte Criação de um bucket.
-
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 paras3-dg.pdf
. -
Adicione três pastas nomeadas
Private
,Finance
eDevelopment
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.
-
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
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.
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 no Guia do usuário do IAM. Ao criar usuários seguindo este passo a passo, selecione Acesso ao AWS Management Console e desmarque 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.
-
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.
-
Abra o console do Amazon S3 em 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
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çãos3:ListBucket
no bucketcompanybucket
.
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.
-
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.
-
Crie a política gerenciada.
-
No painel de navegação à esquerda, escolha Policies (Políticas) e Create Policy (Criar política).
-
Selecione a guia JSON.
-
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. AAction
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 elementoEffect
determina se a permissão específica é permitida ou negada. -
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.
-
-
Anexe a política gerenciada
AllowGroupToSeeBucketListInTheConsole
que você criou para o grupoConsultants
.Consulte instruções detalhadas de como anexar uma política gerenciada em 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.
-
Teste a permissão.
-
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.
-
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.
-
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.
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 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) ao Amazon S3 com os parâmetros prefix
e delimiter
definidos como os seguintes valores:
-
O parâmetro
prefix
com valorDevelopment/
. -
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 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
-
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.
-
Substitua a política gerenciada existente
AllowGroupToSeeBucketListInTheConsole
que está anexada ao grupoConsultants
pela política a seguir, que também permite a açãos3:ListBucket
. Lembre-se de substituir
na políticacompanybucket
Resource
pelo nome do bucket.Consulte instruções detalhadas em Edição de 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":["/"] } } } ] } -
Teste as permissões atualizadas.
-
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/
. -
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
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 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 no Guia do usuário do IAM.
-
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.
-
Crie uma política em linha para conceder ao usuário Alice permissão para listar o conteúdo da pasta
Development
.-
No painel de navegação à esquerda, escolha Uses (Usuários).
-
Selecione o nome de usuário Alice.
-
Na página de detalhes do usuário, selecione a guia Permissions (Permissões) e escolha Add inline policy (Adicionar política em linha).
-
Selecione a guia JSON.
-
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/*"] } } } ] } -
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).
-
-
Teste a alteração nas permissões de Alice:
-
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/
. -
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çãoListObjects
ao Amazon S3 com o prefixo/Development
. Como o usuário recebe permissão para visualizar a lista de objetos com o prefixoDevelopment
e o delimitador/
, o Amazon S3 retorna a lista de objetos com o prefixo de chaveDevelopment/
, 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
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/*"] }
-
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.
-
Edite a política em linha que você criou na etapa anterior.
No painel de navegação à esquerda, escolha Uses (Usuários).
Selecione o nome de usuário Alice.
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).
Escolha Edit Policy (Editar política) ao lado do nome da política que você criou na etapa anterior.
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/*"] } ] }
-
Teste a política atualizada:
-
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/
. -
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âmetroprefix
.O parâmetro
prefix
requer acesso de pasta. Se você enviar uma solicitação sem o parâmetroprefix
, 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, aCondition
inteira será classificada como verdadeira. Você deve permitir uma string vazia como o valor do parâmetroprefix
. 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âmetroprefix
for especificado e não forDevelopment/*
, 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 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 pastaPrivate
, 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.
-
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.
-
Substitua a política gerenciada
AllowGroupToSeeBucketListInTheConsole
existente que está anexada ao grupoConsultants
pela política a seguir. Lembre-se de substituir
na política pelo nome do bucket.companybucket
Consulte instruções em Edição de 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
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
Como gerenciar políticas do IAM no Guia do usuário do IAM