Como lidar com as credenciais da AWS

Oct 29 2020

Nosso aplicativo da web oferece muito upload de mídia. Estamos usando buckets AWS S3 para armazenamento de mídia. De acordo com a implementação atual, sempre que uma nova API de upload de arquivo é chamada, enviamos as credenciais da AWS para o front end e o front end usará essas credenciais para iniciar o upload do arquivo.

Mas uma auditoria de segurança recente relatou que é uma abordagem ruim, pois as credenciais da AWS podem ser capturadas por qualquer pessoa no front-end e os buckets são legíveis / graváveis.

Eu entendo que posso armazenar as credenciais da AWS apenas no back-end. Então, o servidor pode primeiro receber o arquivo quando o usuário faz o upload e o servidor pode carregá-lo no S3 usando esses credentails. Mas, como mencionei antes, usamos muito upload de mídia e esse processo torna-o uma sobrecarga adicional.

Quais seriam as outras maneiras possíveis de resolver a ameaça à segurança? O acesso restrito aos buckets S3 apenas para o nosso domínio pode resolver o problema?

Respostas

3 tim Oct 29 2020 at 16:03

Existem pelo menos duas maneiras de conseguir isso:

  • usando URLs predefinidos (veja também aqui )
  • gerar uma política temporária assinada que permite ações no intervalo

Em ambos os casos, você precisa garantir apenas o acesso que deseja. Algumas armadilhas possíveis:

  • permitindo que um usuário leia um arquivo que não possui
  • permitindo que um usuário (sobre) escreva um arquivo que não possui
  • permitindo que um usuário execute outras ações que não deveria fazer (listar diretórios, acls, etc)
  • permitindo que arquivos maliciosos sejam carregados (por exemplo, HTML para XSS)

Há muito espaço para erros, portanto, certifique-se de que a equipe de segurança analise a implementação final.