HE:labs

Postado por Thiago Belem em 09/05/2013

Protegendo seus buckets do S3 com chaves IAM

image

Você usa buckets do S3 para armazenar os uploads e assets da sua aplicação?

A maioria das pessoas usam os mesmos dados de acesso (access key e secret access key) para acessar o(s) bucket(s), tanto em desenvolvimento quanto em produção.

Isso pode trazer alguns problemas para a aplicação...

Como:

  • Os dados de acesso ao bucket (e provavelmente à conta do AWS) estão presentes nos arquivos de configuração;
  • O bucket acessado (e bombardeado com arquivos de testes) é o mesmo bucket usado em produção;
  • Não há nenhum tipo de restrição, quem estiver trabalhando no desenvolvimento do projeto terá acesso ao bucket com os arquivos de produção.

A solução para todos os problemas acima é restringir o acesso aos buckets, separando os dados de acesso (chaves) de cada um:

Crie dois buckets

Não há nada de misterioso ou novo aqui, apenas crie dois buckets:

  • Um bucket para desenvolvimento: meuprojeto-development
  • Um bucket para production: meuprojeto-produciton

Crie dois usuários IAM

Agora você precisa criar dois usuários (pra facilitar, com o mesmo nome dos buckets):

image

image

Não se esqueça de anotar as chaves de acesso de cada usuário:

image

Defina as regras de acesso

Agora que os usuários estão criados, precisamos definir permissões de acesso.

Marque um usuário. Para isso, vá em Permissions > Attach User Policy > Custom Policy.

Dê um nome pra regra e use o seguinte template:

 1 {
 2   "Statement": [
 3     {
 4       "Sid": "Stmt1368030337093",
 5       "Action": [
 6         "s3:*"
 7       ],
 8       "Effect": "Allow",
 9       "Resource": [
10         "arn:aws:s3:::NOME_DO_BUCKET/*"
11       ]
12     }
13   ]
14 }

Substitua NOME_DO_BUCKET pelo nome do bucket criado anteriormente e crie essa regra para o bucket de cada usuário.

Conclusão

Agora você tem dois buckets com acessos separados, um para desenvolvimento e um para produção.

Espero que tenham gostado, e até a próxima! :)

Comentários
Included file post/disqus_thread.html not found in _includes directory