AWS S3 us-east-1 (2017): quando um typo derruba a internet
Ouvir estudo
gerado ao ouvirGerado apenas no primeiro play
Com tecnologia Amazon Polly + OmniVoice
Em 28 de fevereiro de 2017, um engenheiro da AWS executou um comando de debug com um parâmetro incorreto e removeu uma quantidade muito maior de servidores do subsistema de indexação do S3 do que o pretendido. O resultado foi quatro horas de degradação severa em us-east-1 que afetou centenas de serviços dependentes — de ferramentas de monitoramento a grandes plataformas SaaS. O incidente expôs fragilidades estruturais em torno de dependências implícitas, ausência de rate limiting em operações destrutivas e a falácia de assumir que uma única região AWS seria suficientemente resiliente.
Um único comando mal parametrizado, executado por um engenheiro experiente durante uma investigação de rotina, foi suficiente para degradar o Amazon S3 em us-east-1 por quase quatro horas — e, com ele, uma fração significativa da infraestrutura de internet que o mundo ocidental usa diariamente. Não foi um ataque. Não foi uma falha de hardware. Foi um erro humano amplificado por ausência de guardrails em operações destrutivas e por décadas de dependências acumuladas em torno de um único serviço em uma única região.
Ficha do Incidente
- Empresa / Serviço
- Amazon Web Services — Amazon S3
- Data
- 28 de fevereiro de 2017
- Duração total da degradação
- ~4 horas (início ~09:37 PST, recuperação total ~13:54 PST)
- Região afetada
- us-east-1 (US Standard)
- Subsistemas do S3 afetados
- Index (metadados/placement) e Placement — ambos com capacidade severamente reduzida
- Causa raiz
- Parâmetro incorreto em comando de debug removeu servidores em excesso do subsistema Index do S3
- Impacto direto
- S3 GET, LIST e DELETE com alta taxa de erros; PUT indisponível em grande parte do período
- Impacto em cascata (exemplos públicos)
- AWS Console, CloudFormation, Lambda, ECS, Elastic Beanstalk, Kinesis, SNS, SQS, RDS, EC2 (imagens/AMIs), Slack, GitHub, Quora, IFTTT, Trello, Medium, Docker Hub e centenas de outros
- Stack técnico relevante
- Amazon S3 (subsistemas internos: Index, Placement, Storage nodes); ferramenta interna de gestão de capacidade
- Ironia notável
- O próprio AWS Service Health Dashboard dependia de S3 para renderizar assets — ficou degradado durante o incidente
O que aconteceu
Na manhã de 28 de fevereiro de 2017, a equipe de engenharia do S3 estava investigando lentidão no subsistema de billing do S3 em us-east-1. Para auxiliar no diagnóstico, um engenheiro executou uma ferramenta interna de gestão de capacidade com o objetivo de remover um pequeno conjunto de servidores do subsistema Index — o componente responsável por manter os metadados de localização dos objetos armazenados e por coordenar operações de placement (onde novos objetos devem ser escritos).
O problema foi simples e devastador: o parâmetro passado ao comando especificava um número muito maior de servidores do que o pretendido. Em vez de remover uma pequena fração da capacidade de Index para fins de diagnóstico, o comando removeu uma porção substancial do subsistema inteiro. A ferramenta, por design, não possuía nenhum mecanismo de rate limiting ou validação de segurança que impedisse a remoção de mais do que um percentual seguro da capacidade em operação.
O subsistema Index do S3 é, por natureza, o ponto de coordenação central de todas as operações do serviço. Sem capacidade suficiente de Index, o S3 não consegue resolver onde os objetos estão armazenados (afetando GET e LIST), nem determinar onde novos objetos devem ser escritos (afetando PUT). O efeito foi imediato: taxas de erro dispararam em todas as operações do S3 em us-east-1.
A recuperação foi mais lenta do que o esperado por uma razão técnica importante: o subsistema Index, ao ser reiniciado com sua capacidade completa, precisou executar um processo de verificação de consistência e reparo de estado antes de poder aceitar tráfego de produção. Esse processo — necessário para garantir a durabilidade e consistência dos dados — levou significativamente mais tempo do que a AWS havia planejado em seus runbooks de recuperação, porque o subsistema Index não havia sido reiniciado em escala total por um período muito longo. O tempo de restart havia crescido junto com o volume de dados do S3, mas os procedimentos de recuperação não haviam sido revisados com a mesma frequência.
Linha do Tempo
- 1
~09:37 PST — Comando executado
Engenheiro executa ferramenta interna de gestão de capacidade com parâmetro incorreto. Servidores em excesso são removidos do subsistema Index do S3 em us-east-1. O impacto é quase imediato.
- 2
~09:40 PST — Primeiros alertas
Taxas de erro do S3 disparam. Alertas internos da AWS são acionados. Serviços que dependem do S3 começam a reportar falhas — incluindo ferramentas internas de monitoramento da própria AWS.
- 3
~09:45–10:00 PST — Cascata visível externamente
AWS Console, CloudFormation, Lambda, ECS e dezenas de outros serviços AWS começam a falhar parcialmente. Clientes externos começam a reportar falhas em massa. O Service Health Dashboard demora a atualizar — seus próprios assets estão no S3.
- 4
~10:00–11:00 PST — Diagnóstico e decisão de restart
A equipe identifica a causa raiz. A decisão é tomada de restaurar a capacidade completa do subsistema Index. O processo de restart é iniciado, mas requer verificação de consistência de estado antes de aceitar tráfego — processo mais lento do que os runbooks antecipavam.
- 5
~11:00–12:30 PST — Recuperação parcial do Index
O subsistema Index começa a recuperar capacidade gradualmente. Algumas operações do S3 começam a funcionar de forma intermitente. O subsistema Placement, que também foi afetado, inicia seu próprio processo de recuperação.
- 6
~12:30–13:54 PST — Recuperação total
Capacidade total do Index e Placement é restaurada. Taxas de erro retornam ao normal. A AWS declara o incidente resolvido às ~13:54 PST. Duração total: aproximadamente 4 horas e 17 minutos.
Fluxo de Falha: S3 us-east-1
O diagrama reconstrói o fluxo de falha em cascata a partir da remoção indevida de capacidade do subsistema Index do S3, mostrando como a degradação se propagou para serviços internos da AWS e depois para clientes externos.
- Engenheiro AWS · (debug session)
- Capacity Mgmt Tool · (ferramenta interna)
- S3 Index Subsystem · (metadados / placement coord.)
- S3 Placement Subsystem · (onde escrever novos objetos)
- S3 Storage Nodes · (dados em repouso — íntegros)
- S3 API Layer · (GET / PUT / LIST / DELETE)
- AWS Console · (assets em S3)
- CloudFormation · (templates em S3)
- Lambda · (código de funções em S3)
- ECS / Elastic Beanstalk · (imagens / configs em S3)
- Service Health Dashboard · (assets em S3 — irônico)
- Kinesis, SNS, SQS, RDS... · (dependências indiretas)
- Slack, GitHub, Trello · Medium, Quora, IFTTT...
- Usuários Finais · (impacto percebido)
Causa Raiz
Um engenheiro executou uma ferramenta interna de gestão de capacidade com um parâmetro numérico incorreto, removendo uma fração substancial dos servidores do subsistema Index do S3 em us-east-1 de uma só vez. A ferramenta não possuía nenhum mecanismo de proteção contra remoção de capacidade acima de um threshold seguro (ex.: máximo de X% da frota em uma única operação). O subsistema Index, sem capacidade suficiente, tornou-se incapaz de coordenar operações de leitura e escrita do S3. A recuperação foi prolongada porque o processo de restart do subsistema Index — que requer verificação de consistência de estado antes de aceitar tráfego — levou muito mais tempo do que os runbooks previam, pois o tempo de restart havia crescido proporcionalmente ao volume de dados do S3 sem que os procedimentos operacionais fossem atualizados.
A Anatomia da Cascata
O que tornou este incidente particularmente instrutivo não foi a causa raiz em si — um erro humano em uma operação administrativa é banal — mas a amplitude do blast radius e as razões estruturais por trás dele.
Por que tantos serviços AWS falharam? O S3 em us-east-1 havia se tornado, ao longo de anos, uma dependência de infraestrutura de facto para uma quantidade enorme de serviços internos da AWS. Lambda armazenava pacotes de código de funções no S3. CloudFormation armazenava e lia templates do S3. ECS e Elastic Beanstalk dependiam do S3 para configurações e imagens. O próprio AWS Console usava S3 para servir assets estáticos. Muitas dessas dependências haviam sido introduzidas de forma incremental, sem uma análise sistemática de como uma falha do S3 se propagaria pelo ecossistema. O resultado foi um grafo de dependências implícitas que ninguém havia mapeado completamente até que o nó central falhou.
A ironia do Service Health Dashboard merece atenção especial. O mecanismo primário pelo qual a AWS comunica status de serviços aos clientes dependia do próprio serviço que estava falhando para renderizar sua interface. Durante as primeiras horas do incidente, o dashboard estava degradado ou desatualizado — exatamente quando os clientes mais precisavam de informações confiáveis. Isso não é apenas uma ironia operacional; é um anti-pattern arquitetural clássico: o plano de controle não deve depender do plano de dados que está monitorando.
Por que a recuperação demorou tanto? A AWS foi transparente neste ponto em seu post-mortem público: o processo de restart do subsistema Index havia crescido em duração ao longo do tempo, proporcional ao crescimento do volume de dados gerenciado pelo S3. O processo de verificação de consistência — essencial para garantir que nenhum dado fosse corrompido ou perdido — simplesmente levava mais tempo em 2017 do que levava quando os runbooks foram escritos. Ninguém havia testado um restart completo do subsistema em produção recentemente o suficiente para perceber o drift. Este é um exemplo claro de configuration drift em procedimentos operacionais: os sistemas evoluem, mas os procedimentos de recuperação ficam para trás.
Remediação e Ações da AWS
A AWS publicou um post-mortem público detalhado e comprometeu-se com um conjunto de ações corretivas concretas. Vale analisá-las com olhar crítico.
1. Rate limiting e guardrails em ferramentas de gestão de capacidade. A ação mais direta: adicionar validações que impeçam a remoção de mais do que um percentual seguro da capacidade de qualquer subsistema em uma única operação. Esta é a correção óbvia e necessária — mas também levanta a questão de por que essa proteção não existia em um serviço da escala do S3. Ferramentas de operação que podem causar impacto catastrófico devem ter circuit breakers embutidos por design, não adicionados após um incidente.
2. Revisão e atualização dos runbooks de recuperação. A AWS comprometeu-se a revisar os procedimentos de restart de todos os subsistemas críticos, levando em conta o tempo atual de restart — não o tempo histórico. Mais importante: comprometeu-se a testar esses procedimentos regularmente. Isso é Game Day / Chaos Engineering aplicado a procedimentos operacionais: você só sabe quanto tempo leva o restart se você o executa periodicamente em condições controladas.
3. Redução das dependências do Service Health Dashboard no S3. A AWS reconheceu explicitamente o problema do dashboard e comprometeu-se a torná-lo mais resiliente a falhas do S3. O plano de controle precisa de um plano de dados alternativo — ou, idealmente, deve ser arquitetado para operar de forma completamente independente do serviço que monitora.
4. Auditoria de dependências internas no S3. Implícito no post-mortem está o reconhecimento de que o mapeamento de dependências internas era insuficiente. A remediação aqui é mais difícil: requer uma auditoria sistemática de quais serviços dependem do S3 para funções críticas de controle (não apenas de dados), e a introdução de fallbacks ou caches para reduzir o impacto de uma degradação futura.
O que a AWS não disse publicamente — mas que é uma consequência óbvia para arquitetos que leram o incidente — é que o design de um serviço global com um único ponto de coordenação centralizado (o subsistema Index) em uma única região cria um risco sistêmico que nenhum guardrail operacional elimina completamente. A resposta arquitetural de longo prazo é distribuição e isolamento de blast radius por design, não apenas por procedimento.
Lições Técnicas
Trabalhei com sistemas financeiros de missão crítica por mais de 16 anos, e o que me chama atenção neste incidente não é o erro em si — é o que o erro revelou sobre o estado das dependências internas da AWS em 2017. O S3 havia se tornado, silenciosamente, um ponto de falha único para uma fração enorme da infraestrutura de internet. Não por má intenção, mas por acumulação incremental de decisões razoáveis individualmente. Cada equipe que decidiu armazenar seus assets no S3 estava fazendo a escolha certa localmente. O problema é que ninguém estava olhando para o grafo global de dependências e perguntando: 'o que acontece se o S3 ficar indisponível por 4 horas?' Em sistemas financeiros, chamamos isso de concentração de risco. Reguladores exigem que você mapeie, limite e teste sua exposição a pontos únicos de falha — não apenas em hardware, mas em fornecedores, serviços e infraestrutura compartilhada. A indústria de cloud ainda está aprendendo a aplicar esse rigor. Se eu fosse redesenhar a arquitetura de qualquer serviço crítico afetado por este incidente, aplicaria três princípios imediatamente: 1) Blast radius budgets — defina explicitamente qual é o impacto máximo aceitável de uma falha de qualquer dependência externa, e arquitete para não excedê-lo. 2) Control plane isolation — ferramentas de observabilidade, health dashboards e sistemas de comunicação de incidentes devem ser deployados em infraestrutura completamente separada do serviço que monitoram.
Veredicto
O incidente do S3 em fevereiro de 2017 é um caso de estudo quase perfeito sobre como sistemas complexos falham: não por uma única causa catastrófica, mas pela intersecção de um erro humano banal com ausência de guardrails, dependências implícitas acumuladas e procedimentos operacionais que não acompanharam o crescimento do sistema. A lição mais importante não é técnica — é organizacional. A AWS construiu, ao longo de anos, um ecossistema de serviços interdependentes sem um mecanismo sistemático para mapear e limitar a concentração de risco em torno de componentes críticos. Quando o nó central falhou, a amplitude do impacto surpreendeu até a própria AWS. Para arquitetos e engenheiros que leram este documento: a pergunta que você deve fazer sobre sua arquitetura hoje não é 'o que acontece se minha aplicação falhar?', mas 'o que acontece se qualquer uma das minhas dependências externas ficar indisponível por 4 horas?'. Se a resposta for 'minha aplicação também fica indisponível', você tem trabalho a fazer — independentemente de qual provedor de cloud você usa.
Post-mortems, ADRs e deep dives de arquitetura no seu email — do jeito que um arquiteto lê.
Sem spam · cancele quando quiser
Pergunte ao Fernando sobre isto
Receba uma resposta focada sobre este estudo do meu assistente de IA, baseada no meu trabalho.
Participe da conversa
Entre para comentar
Confirme seu e-mail para participar — você também recebe a newsletter. Sem senha.