Como lidar com as credenciais da AWS
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
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.