Eu tenho um bucket simples que se parece images.mysite.com
no meu S3 e em outros buckets que contêm backups etc.
Desejo permitir que um usuário específico possa acessar o images.mysite.com
bucket para fazer upload de imagens. No entanto, não quero que ele veja nenhum dos outros baldes; nem que eles existam.
Eu não poderia fazer uma política que faça isso; toda vez que tento algo restritivo, ele acaba bloqueando a listagem de todos os baldes.
https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/
. Dessa forma, você os impede de ver a lista inteira e não altera nada na sua política atual.Respostas:
Eu tenho tentado isso por um tempo e finalmente veio com uma solução de trabalho. Você deve usar diferentes "Recursos", dependendo do tipo de ação que está executando. Também incluí algumas ações ausentes na resposta anterior (curtir
DeleteObject
) e restringir mais algumas (curtirPutBucketAcl
).A seguinte política do IAM está funcionando para mim agora:
As ações relacionadas a um bucket e as relacionadas a objetos devem ter um arn diferente.
fonte
ListAllMyBuckets
eGetBucketLocation
para todos os depósitos S3 ("arn:aws:s3:::*"
funcionará em vez"*"
do recurso). Conforme declarado nesta postagem no blog da AWS "como um aparte, atualmente você não pode filtrar seletivamente determinados buckets; portanto, os usuários devem ter permissão para listar todos os buckets para acesso ao console".Nosso caso de uso: Forneça espaço de backup para clientes de nosso aplicativo em nuvem que possa ser acessado diretamente pelos clientes usando ferramentas S3 comuns. Obviamente, nenhum cliente deve ver o que os outros têm.
Como o cloudberryman explicou: "Você pode listar todos os buckets ou nenhum", então temos que apresentar uma solução alternativa. Fundo:
É necessário conceder direitos de ListAllMyBuckets ao usuário para que o console do AWS S3 ou o S3Fox se conectem sem uma mensagem de erro. Mas ListAllMyBuckets lista todos os buckets, considerações dos recursos atribuídos (na verdade, apenas arn: ... ::: * funciona). Isso é um bug sério, se você me perguntar. Btw. negar ListBucket para todos os buckets não impede que eles sejam listados, pois o ListBucket concede direitos para listar o conteúdo do bucket.
Existem três possibilidades que eu considerei como solução alternativa. Eu escolhi o último.
(1) use nomes de buckets enigmáticos, por exemplo, GUIDs
Vantagem: fácil de configurar
Desvantagem: difícil de gerenciar, especialmente para o cliente. (imagine encontrar um GUID específico entre milhares de outros.) Também mostra o número de buckets = número de clientes que usam o serviço de backup.
(2) use um bucket com pastas específicas do cliente
É assim que a Amazon sugere, pelos exemplos do S3 / IAM, que forneça espaço para acesso somente por determinados usuários ou grupos de usuários. Consulte: Exemplo de políticas do IAM da AWS
Vantagem: bastante fácil de configurar, acompanha as idéias da AWS
Desvantagem: força a tornar pública a existência de todos os buckets, para que o cliente possa encontrar seu bucket "doméstico". A contabilidade da AWS fornece estatísticas do uso do bucket, mas não do uso da pasta, o que dificulta o cálculo do custo por cliente.
(3) não conceda acesso certo para ListAllMyBuckets
Vantagem: você consegue o que deseja: os clientes não podem ver os baldes de outros clientes
Desvantagem: o cliente não pode ver seu próprio balde. O S3Browser vem com uma boa mensagem "não posso fazer" e solicita a inserção do nome do bloco. O S3Fox lança uma mensagem de erro ao conectar-se à raiz, mas permite a navegação direta ao bucket do cliente se o nome do bucket for conhecido. O console do Amazon S3 não funciona de jeito nenhum.
Espero que isso tenha ajudado a lidar com o S3 IAM conforme necessário.
fonte
Não é possível fornecer acesso ao console S3 sem conceder a
ListAllMyBuckets
permissão.No meu caso (e talvez o seu também, futuro leitor), uma alternativa aceitável é redirecionar os usuários ao entrar diretamente no bucket que você gostaria que eles vissem.
Para fazer isso, acrescente o seguinte ao seu URL de login do IAM:
/s3/?bucket=bucket-name
URL de login completo (substitua seu alias e nome do bloco ):
https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name
Política do IAM (substitua o nome do bloco ):
Para obter mais informações sobre como criar permissões específicas de bucket para usuários, leia este blog: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /
fonte
Tente esta política. Também levamos em consideração que não há como deixar o usuário listar apenas o intervalo selecionado. Você pode listar todos os buckets ou nenhum.
fonte
s3:*
para fazê-lo funcionar para mim. Eu também tinha"Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"]
, mas isso pode não ser necessário.Estou interpretando esta pergunta como: "Posso permitir o acesso a um depósito em que outros depósitos não serão acessíveis e, portanto, invisíveis". Porque mostrar o nome do bucket ao qual nenhum acesso foi concedido ainda equivale a vazamento de informações.
E a resposta correta é não. A permissão necessária é ListAllMyBuckets, que permitirá ao usuário ver TODOS os buckets. Se você deixar esta permissão, o console não poderá ser usado.
fonte
Existe uma ótima maneira de permitir que os usuários acessem um depósito específico sem compreender o conhecimento de outros depósitos. Uma política de grupo semelhante à abaixo permitirá que os usuários vejam apenas o "bloco a". O único problema é que o usuário só poderá acessar o bucket se ele se conectar ao ponto de extremidade do bucket fornecido. Para o exemplo abaixo, seria bucket-a.s3.amazonaws.com. O intervalo também pode precisar ter "Usuários autenticados" permitidos para que isso ocorra.
Este método foi testado com o Cyberduck no Mac OS / X e usando o pacote s3cmd
fonte
Confuso sobre por que nenhuma resposta foi verificada?
Vamos detalhar cada declaração de política das soluções acima:
Esta declaração de política de aplica-se ao conteúdo do bucket, mas não ao próprio buck. Provavelmente não é isso que a pergunta foi feita, porque você não pode ver o que há no balde.
Essa política de duas instruções derivada fornece acesso somente leitura ao bucket em (
arn:aws:s3:::your_bucket_here/
) somente leitura , mas ainda permite operações CRUD no conteúdo do bucket (arn:aws:s3:::your_bucket_here/*
).No entanto, a política inclui a declaração abaixo, que permite ao usuário ver todos os buckets no nó de extremidade. Provavelmente não é isso que a pergunta foi feita.
No entanto, o acima exposto é muito útil se você usar um cliente que navegue em uma loja S3. Se o seu cliente acessa a loja e não o depósito diretamente, é necessário acessar a lista de depósitos na raiz.
fonte
Provavelmente o caso de uso mais simples:
fonte
This policy contains the following error: The policy must contain a valid version string
(listing included)
significado de como listar apenas o intervalo no qual o usuário pode entrar? Até agora (e de acordo com todas as outras respostas), parece que a AWS não permitirá que você faça isso.Existe uma maneira fácil ou alternativa de fazer isso usando o AWS Organizations. A organização da AWS permite que você tenha várias contas de usuário. Sua conta principal pode ter várias contas da AWS (Sub) e quaisquer serviços (s3 / EC2 / *) adicionados em qualquer conta da AWS, apenas esses recursos estarão visíveis.
Consulte https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/
Organização Na página Minha conta
fonte
Encontrei esta solução:
AWS FLOW:
Política de bucket:
Política do IAM:
aws iam get-user-user-name USER-NAME --profile = ExampleProfile
aws iam get-role --role-name ROLE-NAME --profile = ExampleProfile
Fonte: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/
PS cuidado com a política de bucket, você pode ficar de fora sem permissões
fonte
Como foi bem discutido acima, não é possível listar apenas um depósito no console. Mas se o acesso do bucket do S3 estiver anexado a um IAM, o IAM poderá acessar diretamente o bucket se o URL para o bucket estiver disponível. O URL do bucket S3 será como:
https://s3.console.aws.amazon.com/s3/buckets/BucketName
Onde BucketName é o nome do bucket que o IAM tem acesso
fonte
Consegui fazer o seguinte funcionar. Significava que a listagem de outros intervalos recebeu a mensagem Acesso negado. Mas ainda consegui ver o bloco que eu queria se me conectasse com o nome do bloco definido como caminho.
Eu estava usando o Cyberduck para testar essa conexão.
fonte
Embora não seja possível restringir a
s3:ListAllMyBuckets
ação a intervalos específicos, como solução alternativa, você pode enviar o URL do console para um intervalo específico, por exemplohttps://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/
Origem: lista restrita de buckets S3 do console S3
Para fazer isso, você precisará especificar o seguinte documento de política para determinado usuário ou grupo:
Onde
my-bucket-1
e ondemy-bucket-2
estão seus buckets para fornecer acesso de leitura e gravação.Palavras-chave:
fonte
Tente esta política. O usuário não pode listar nenhum depósito, ele deve usar o link direto para o depósito permitido.
Por exemplo: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview
fonte
Semelhante ao que outros descritos acima:
Aqui está, no entanto, a peça que faltava. Embora não seja possível acessar o balde através de S3-> Home, é possível acessar apenas o balde desejado através de um link direto.
Você pode encontrar mais informações na seguinte postagem:
https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-fficient-bucket/
fonte
A solução abaixo funcionou para mim. Eu queria uma política para conceder acesso a um usuário específico my_iam_user em um bucket específico my-s3-bucket .
Essa política permite ao meu usuário listar, excluir, obter e colocar arquivos em um intervalo s3 específico.
fonte
Acabei de adicionar uma necessidade semelhante, resolvida por isso:
fonte
Eu uso o seguinte para ocultar o conteúdo do bucket de outros usuários. Isso não apenas ajuda a ocultar outros depósitos (não use ListAllMyBuckets), mas também pastas no mesmo depósito, quando você cria um depósito, mas deseja ter subpastas atribuindo permissões apropriadas ao usuário / subpasta IAM.
A política a seguir é aplicada ao grupo IAM e todos os usuários estão nesse grupo. Você precisa pegar
aws:userid
e criar uma subpasta com o mesmo nome no balde.UserID pode ser utilizado:
aws iam get-user --user-name "user_name_for_folder_access":
fonte
Uma solução simples e agradável que encontramos é bloquear o usuário para fazer login no diretório raiz. Portanto, eles devem fazer login com o caminho remoto definido para a pasta desejada.
fonte
Não, atualmente não é possível limitar os usuários a visualizar buckets seletivos na raiz ou em qualquer outro lugar. Você tem apenas essas três opções no momento.
Optei por pedir ao cliente para usar o nome do bucket explicitamente.
fonte
Isso é detalhado pela Amazon em http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket
fonte
Isso funcionou perfeito para mim. O usuário pode fazer upload, baixar e obter a lista de arquivos, mas não poderá ver os arquivos de outro bloco.
fonte
Adicione uma
Deny
cláusula para os buckets que você não deseja acessar. Lembre-se de que eles ainda podem estar listados, mas você não poderá acessar o conteúdo dentro deles.fonte