Lab: O Cofre Colaborativo - Trabalhando com Permissões e Eventos do S3
O Cenário (A "User Story")
Como o administrador da nuvem de uma cafeteria, EU QUERO criar um bucket S3 seguro onde uma agência de mídia externa possa fazer o upload de fotos dos nossos produtos, PARA QUE eu possa receber o conteúdo de forma segura e ser notificado automaticamente sempre que um arquivo for adicionado ou removido.
A Dor que o Lab Resolve
- Compartilhamento Inseguro: Enviar arquivos por e-mail ou usar serviços de compartilhamento de arquivos genéricos não é seguro nem escalável para um fluxo de trabalho profissional.
- Falta de Visibilidade: Como saber quando o fotógrafo enviou as novas fotos? Ficar perguntando por e-mail é ineficiente.
- Permissões Excessivas: Como dar acesso ao fotógrafo apenas à pasta de "imagens", sem que ele possa ver ou mexer em outras partes do nosso bucket?
Este laboratório resolve essas dores construindo uma "caixa de entrada" de arquivos inteligente, segura e que te avisa quando há novidades.
Objetivos de Aprendizado
Ao final deste laboratório, você será capaz de: * [ ] Criar um bucket S3 e um usuário IAM com permissões granulares via AWS CLI. * [ ] Testar e verificar as permissões de um usuário externo. * [ ] Configurar um tópico SNS para receber notificações por e-mail. * [ ] Configurar Notificações de Eventos do S3 para acionar o tópico SNS.
Duração
- Aproximadamente 45-60 minutos (sem contar os 90 minutos do lab original).
O Passo a Passo
Tarefa 1: Preparando o "Posto de Comando"
- Conecte-se ao
Host da CLI (CLI Host)
usando o EC2 Instance Connect. - Configure a AWS CLI com o comando
aws configure
, usando as credenciais (AccessKey
,SecretKey
) e a região (us-west-2
) fornecidas no painel de detalhes do laboratório.
Tarefa 2: Criando o "Cofre" e Colocando as Primeiras Fotos
Analogia: Vamos construir nosso "cofre de fotos" (bucket) e fazer o upload do acervo inicial.
- Crie o Bucket: Execute o comando
s3 mb
(make bucket). Substitua<cafe-SEU-NOME-UNICO>
por um nome único.aws s3 mb s3://<cafe-SEU-NOME-UNICO> --region 'us-west-2'
- Sincronize as Imagens Iniciais: > O "Porquê": O comando
aws s3 sync ~/initial-images/ s3://<cafe-SEU-NOME-UNICO>/images/
sync
é ótimo para fazer o upload de uma pasta inteira. Estamos criando um "prefixo" (uma "pasta") chamadoimages/
dentro do nosso bucket.
Tarefa 3: Criando o "Crachá de Visitante" (Analisando as Permissões)
Analogia: Agora, vamos criar o "crachá de acesso" para nosso fotógrafo externo (mediacouser
), garantindo que ele só possa entrar na "sala de fotos".
- Analise as "Leis" do Crachá: No console do IAM, vá para Grupos de usuários (User groups) e selecione
mediaco
. Na aba Permissões (Permissions), expanda a políticamediaCoPolicy
.- Observe a granularidade: A política permite listar buckets, mas as ações de
GetObject
(ler),PutObject
(escrever) eDeleteObject
(deletar) são permitidas APENAS para o caminhoarn:aws:s3:::*/*/images/*
. Isso garante que ele só possa trabalhar na "pasta" de imagens.
- Observe a granularidade: A política permite listar buckets, mas as ações de
- Gere as Credenciais: Vá para Usuários (Users) >
mediacouser
> aba Credenciais de segurança (Security credentials).- Clique em Criar chave de acesso (Create access key).
- Selecione
Interface de linha de comando (CLI)
. - Confirme e clique em Criar chave de acesso.
- Ação Crítica: Clique em Baixar arquivo .csv (Download .csv file). Guarde este arquivo, pois ele contém as chaves de acesso do nosso "fotógrafo".
Tarefa 4: A Notificação Automática (Configurando Eventos S3 -> SNS)
Analogia: Vamos instalar um "sensor de movimento" na porta do nosso cofre que envia um alerta para o "grupo de e-mail do gerente" sempre que a porta é aberta.
- Crie o "Grupo de E-mail" (Tópico SNS):
- No console do SNS, vá em Tópicos (Topics) e Crie um tópico.
- Tipo:
Padrão (Standard)
. - Nome:
s3NotificationTopic
. - Anote o ARN do tópico criado.
- Adicione a Permissão para o S3: Na aba Política de acesso (Access policy), clique em Editar. Substitua o JSON pelo código fornecido no lab, inserindo o ARN do seu tópico e o nome do seu bucket. > O "Porquê": Esta política é uma Política Baseada em Recurso. Estamos dizendo ao SNS: "Você tem permissão para aceitar mensagens do serviço S3, mas somente se a mensagem vier daquele bucket específico."
- Inscreva-se: Crie uma inscrição (subscription) para o seu e-mail e confirme-a na sua caixa de entrada.
- Instale o "Sensor de Movimento" (Notificação de Eventos do S3):
- No seu terminal do CLI Host, crie um arquivo de configuração chamado
s3EventNotification.json
.vi s3EventNotification.json
- Pressione
i
e cole o JSON fornecido no lab, substituindo pelo ARN do seu tópico SNS. Salve e saia (Esc
>:wq
). > O "Porquê": Este arquivo diz: "Monitore a 'pasta'images/
. Se um objeto for criado (s3:ObjectCreated:*
) ou removido (s3:ObjectRemoved:*
), envie uma mensagem para este tópico SNS." - Ative a Configuração:
aws s3api put-bucket-notification-configuration \ --bucket <SEU_NOME_DE_BUCKET> \ --notification-configuration file://s3EventNotification.json
Você receberá um e-mail de teste do S3 confirmando que o "sensor" está ativo.
- No seu terminal do CLI Host, crie um arquivo de configuração chamado
Tarefa 5: Testando o Fluxo Completo
Analogia: Vamos pedir ao "fotógrafo" para usar seu crachá, entrar na sala de fotos e fazer seu trabalho. E vamos ver se o "gerente" é notificado.
- Configure a CLI como
mediacouser
: No terminal do CLI Host, executeaws configure
novamente, mas desta vez, use as chaves de acesso do arquivo.csv
que você baixou. - Teste o Upload (
PutObject
):aws s3api put-object --bucket <SEU_NOME_DE_BUCKET> --key images/Caramel-Delight.jpg --body ~/new-images/Caramel-Delight.jpg
- Verificação: Verifique seu e-mail. Você deve receber uma notificação do SNS dizendo que um
ObjectCreated:Put
ocorreu!
- Verificação: Verifique seu e-mail. Você deve receber uma notificação do SNS dizendo que um
- Teste a Exclusão (
DeleteObject
):aws s3api delete-object --bucket <SEU_NOME_DE_BUCKET> --key images/Strawberry-Tarts.jpg
- Verificação: Verifique seu e-mail. Você deve receber outra notificação, desta vez para um evento
ObjectRemoved:Delete
!
- Verificação: Verifique seu e-mail. Você deve receber outra notificação, desta vez para um evento
- Teste a Violação de Permissão: Tente alterar as permissões de um objeto.
aws s3api put-object-acl --bucket <SEU_NOME_DE_BUCKET> --key images/Donuts.jpg --acl public-read
- Verificação: O comando falhará com
AccessDenied
. Isso prova que nossa política do IAM está funcionando perfeitamente, e o "fotógrafo" só pode fazer o trabalho para o qual foi contratado.
- Verificação: O comando falhará com
Conclusão
Parabéns! Você construiu uma solução de colaboração de arquivos segura e orientada a eventos. Você aprendeu a usar o IAM para conceder permissões granulares a um usuário externo e a usar as Notificações de Eventos do S3 para criar um fluxo de trabalho automatizado que te mantém informado sobre todas as atividades em seus dados.
Meu Diário de Bordo: Construindo uma Caixa de Entrada Inteligente na Nuvem
No mundo real, nossos sistemas não vivem isolados. Eles precisam interagir com parceiros, clientes e outros sistemas. O desafio de hoje no AWS re/Start foi exatamente sobre isso: como criar uma "caixa de entrada" de arquivos segura para um parceiro externo e, o mais importante, como ser notificado automaticamente sempre que um novo arquivo chegar.
Foi uma aula fantástica sobre segurança granular e automação orientada a eventos.
A Jornada em 3 Atos
Ato 1: O Crachá de Visitante (Permissões Granulares com IAM)
- A Dor: Como dar acesso a um parceiro externo (no lab, uma agência de mídia) à sua conta AWS sem entregar as "chaves do reino"?
- O Que Eu Fiz: Analisei uma política do IAM que foi criada especificamente para o grupo de usuários da agência.
- O "Aha!" Moment: A política era uma obra de arte da segurança.
- Analogia: Foi como criar um "crachá de visitante" super restrito. A regra dizia: "Este visitante pode entrar no prédio (listar os buckets S3), mas a chave do seu crachá só abre a porta da 'sala de marketing' (a 'pasta'
/images
). Ele pode colocar e tirar caixas (Put/DeleteObject
) dessa sala, mas se tentar abrir qualquer outra porta, o alarme toca (AccessDenied
)."
- Analogia: Foi como criar um "crachá de visitante" super restrito. A regra dizia: "Este visitante pode entrar no prédio (listar os buckets S3), mas a chave do seu crachá só abre a porta da 'sala de marketing' (a 'pasta'
- A Lição: Ver o comando para alterar permissões falhar na prática me mostrou o poder do Princípio do Menor Privilégio. Você concede apenas o acesso mínimo necessário, nada mais.
Ato 2: O Sensor de Movimento (Notificações de Eventos do S3)
- A Dor: Como eu sei quando a agência enviou as novas fotos? Ficar atualizando a página do S3 o dia todo é improdutivo.
- O Que Eu Fiz: Configurei as Notificações de Eventos no bucket S3.
- O "Aha!" Moment:
- Analogia: Foi como instalar um "sensor de movimento" na porta da "sala de marketing". Eu configurei o sensor para detectar duas ações: "porta abrindo para colocar algo dentro" (
ObjectCreated
) e "porta abrindo para tirar algo" (ObjectRemoved
).
- Analogia: Foi como instalar um "sensor de movimento" na porta da "sala de marketing". Eu configurei o sensor para detectar duas ações: "porta abrindo para colocar algo dentro" (
- A Lição: O S3 não é um armazenamento passivo. Ele é uma plataforma ativa que pode iniciar fluxos de trabalho com base em eventos.
Ato 3: O Alerta Imediato (Amazon SNS)
- A Dor: Ok, o sensor detectou movimento. Como ele me avisa?
- O Que Eu Fiz: Conectei o "sensor" do S3 a um Tópico do Amazon SNS.
- O "Aha!" Moment:
- Analogia: Eu conectei o "sensor de movimento" a um "sistema de alerta por pager" (o Tópico SNS). E eu "assinei" meu e-mail para receber as mensagens desse pager.
- O Resultado: O fluxo final foi perfeito. O fotógrafo fez o upload de um arquivo, o sensor do S3 detectou, o pager do SNS disparou, e meu celular vibrou com um e-mail em segundos. Tudo automático.
A Grande Lição
Este lab foi uma masterclass em arquitetura orientada a eventos e segurança. Aprendi que a combinação de IAM (para permissões seguras), S3 (para o gatilho) e SNS (para a notificação) cria um sistema desacoplado, seguro e incrivelmente eficiente.
Construir essa solução me fez sentir como um verdadeiro arquiteto. Eu não apenas configurei serviços, eu resolvi um problema de negócio real: como colaborar com um parceiro externo de forma segura e automatizada. Vê-lo funcionando de ponta a ponta foi a prova de que estou realmente começando a "pensar em nuvem".