No último tutorial sobre S3, falamos de como enviar muitos arquivos ou diretórios inteiros para o S3 de uma forma muito fácil. Mas apenas guardar seus arquivos no S3 não garante que eles estarão acessíveis pela sua aplicação. É preciso configurar políticas de acesso ao conteúdo do seu bucket. Definir políticas de acesso é muito importante pois são elas que definem quem pode ler, enviar e alterar o conteúdo do seu bucket.
Para quem ouve falar pela primeira vez em definição de políticas de acesso, pode achar que é algo complicado. Mas não é tão complicado assim. O AWS console facilita muito o gerenciamento das políticas de acesso com sua interface gráfica. Mesmo quem não tem familiaridade com comandos bash e programação, pode facilmente decidir quem vai acessar, enviar e apagar conteúdo de um bucket específico.
Para definir nossa política, devemos fazer o login no AWS console e acessar a aba S3.

Depois, devemos escolher o bucket que vai ter sua política definida e clicar no botão Properties no canto superior direito do console:

Na parte inferior do console, você poderá ver as informações sobre o bucket como região, nome, data de criação e na aba Permissions encontraremos a opção “Add bucket policy” ou “Edit bucket policy” se você já tiver uma política definida.

Ao clicar, o editor de políticas se abrirá. Você deve digitar a sua política e clicar em salvar.
Neste tutorial, serão mostrados 3 tipos de políticas. Vamos a elas:
Garantir acesso de leitura para todos
Neste caso, todos terão acesso de leitura para o conteúdo do seu bucket.
{ "Version":"2008-10-17", "Statement":[ { "Sid":"AddPerm", "Effect":"Allow", "Principal": { "AWS": "*" }, "Action":["s3:GetObject"], "Resource":["arn:aws:s3:::bucketname/*" ] } ] }
O que a política acima faz? Ela tem o efeito de permitir(Allow) a leitura do conteúdo(GetObject) do seu bucket(resource). Não esqueça de trocar bucketname pelo nome do seu bucket.
Restringir o acesso de leitura para a sua aplicação
Considero esta política bem importante pois com ela você evita hotlinking. Apenas os sites que você indicar terão acesso de leitura para o conteúdo do seu bucket.
{ "Version":"2008-10-17", "Id":"http referer policy example", "Statement":[ { "Sid":"Allow get requests referred by www.mysite.com and mysite.com", "Effect":"Allow", "Principal":"*", "Action":"s3:GetObject", "Resource":"arn:aws:s3:::bucketname/*", "Condition":{ "StringLike":{ "aws:Referer":[ " http://www.mysite.com/*", " http://mysite.com/*" ] } } } ] }
Aqui o acesso é permitido apenas para os sites indicados. Desta forma, a política permite(Allow) a leitura do conteúdo(GetObject) do seu bucket(resource) para os sites indicados(Referer).
Estabelecer acesso de leitura e escrita
Neste exemplo, vamos estabelecer quais sites poderão ler e alterar o conteúdo do bucket. Esta política é importante quando você sua aplicação aceita download de arquivos como fotos e filmes que serão armazenados no S3.
{ "Version":"2008-10-17", "Id":"http referer policy example", "Statement":[ { "Sid":"Allow get requests referred by www.mysite.com and mysite.com", "Effect":"Allow", "Principal":"*", "Action":"s3:GetObject", "Resource":"arn:aws:s3:::bucketname/*", "Condition":{ "StringLike":{ "aws:Referer":[ " http://www.mysite.com/*", " http://mysite.com/*" ] } } },{ "Sid":"Allow put requests referred by www.mysite.com and mysite.com", "Effect":"Allow", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::bucketname/*", "Condition":{ "StringLike":{ "aws:Referer":[ " http://www.mysite.com/*", " http://mysite.com/*" ] } } } ] }
Além destas políticas, é possível permitir e negar acessos por ip. Mais exemplos podem ser encontrados na documentação do S3 na própria Amazon.
Uma novidade recente que a Amazon disponibilizou para facilitar ainda mais o gerenciamento de políticas foi o AWS Policy Generator. Com ele você pode estabelecer políticas para o S3 e também para os outros serviços da Amazon como o SNS, SQS e IAM. Para usar o AWS Policy Generator é só clicar na opção quando estiver com o Bucket Policy Editor aberto.

No blog oficial, você encontra passo-a-passo de como utilizar o AWS Policy Generator.

Olá Gostaria de saber como liberar apenas um bucket para um usuário especifico.
Exemplo:
usuário joao pudesse ter acesso total apenas ao bucket meu-site.
Como proceder neste caso?
Estou com o mesmo problema conseguiu?
Tambem gostaria de saber como liberar apenas um bucket para um usuário especifico.
Olá, gostei muito do sei artigo. Como eu faço para permitir acesso apenas a uma pasta especifica dentro do bucket?