Restringir o acesso a pastas de bucket do S3 para usuários específicos do site? (não usando usuários do IAM)

3

Eu tenho um site onde os usuários precisam fazer o login. Eles podem enviar e excluir suas próprias imagens, MAS essas imagens devem ser privadas, para que as imagens não sejam definidas como públicas e que qualquer pessoa possa ver.

Eu sei que podemos usar as políticas do IAM para restringir o acesso a diferentes pastas em um bucket do S3 para diferentes usuários do IAM. No entanto, os usuários do site são apenas usuários registrados normais registrados no banco de dados (provavelmente MySQL), eles não são usuários do IAM.

Qual seria a lógica para configurar isso sem precisar de um usuário do IAM para cada usuário do site? Há algum bom exemplo que você possa sugerir? Ou estou pensando muito que há uma maneira mais fácil de definir esse tipo de restrição?

Agradecemos antecipadamente por qualquer sugestão.

    
por Dora 16.11.2018 / 19:56

2 respostas

2

Outra opção é sair sem papéis e credenciais do IAM e usar S3 Pre URLs assinados . Com URLs pré-assinados, você pode criar links de imagem seguros e limitados no tempo, que permitirão o acesso não autenticado a objetos privados do S3. Em outras palavras:

  • Seus objetos do S3 são todos privados, ninguém mais do que o servidor da Web tem acesso a eles.
  • Quando o usuário faz login, você gera URLs pré-assinados para as imagens dele. Esses URLs dão ao usuário acesso temporário ao conteúdo dele (por exemplo, com validade de 1 hora).
  • Quando o link expira (após, por exemplo, 1 hora), ele não fornece mais acesso à imagem do usuário.

Dessa forma, você pode sair sem nenhum usuário do IAM ou dos papéis do IAM para os usuários do site.

Aqui está uma demonstração simples sobre como implementá-lo: Demonstração de URL pré-assinada do S3

Você também pode usar URLs pré-assinados para upload de imagens , mas isso é um pouco mais complicado. Pode ser mais fácil carregar as imagens para o seu servidor usando os métodos de upload padrão e o servidor faz o upload delas para o S3.

Esta é uma abordagem mais limitada do que usar o Cognito, mas pode ser mais fácil de implementar.

Espero que ajude:)

    
por 18.11.2018 / 10:22
2

Você certamente não precisará de um Usuário do IAM para cada usuário do site, isso não é gerenciável.

A maneira recomendada é usar o AWS Cognito para autenticação do usuário em seu usuário Pool (ou seja, sua lista de usuários em seu banco de dados). O Cognito cuidará do login, logout, redefinição de senha, etc em seu nome e, assim que o usuário for autenticado, será emitido um conjunto de credenciais temporárias da AWS que lhe dará acesso aos recursos definidos, em seu caso para certas pastas no bucket S3 .

Os detalhes estão bem descritos em Permitir o acesso de usuários Cognito a objetos em seu bucket S3 - isso é exatamente o que você precisa.

Como um bônus ao usar o Cognito, é muito fácil ativar o login com contas de mídia social - Facebook, Google, etc. Consulte Adicionando provedores de identidade social a um pool de usuários .

Espero que ajude:)

    
por 17.11.2018 / 22:38