Secrets: ciclo de vida, rotação e detecção de vazamento
Objetivos desta aula
- Definir onde cada segredo vive
- Automatizar rotação
- Detectar vazamento no histórico
Todo segredo precisa de resposta para quatro perguntas: onde é armazenado, quem pode ler, com que frequência é rotacionado e como saberíamos que vazou. Sem essas respostas, você tem senha espalhada em variável de ambiente, print de tela e mensagem de chat.
A ordem de preferência é clara: eliminar o segredo (usar identidade federada como OIDC ou role de instância), depois cofre gerenciado com rotação automática, e por último — se inevitável — segredo estático com rotação agendada e escopo mínimo.
Detecção precisa ser automática: scanner de segredos no pre-commit e no CI, incluindo varredura do histórico. E quando um segredo vaza, o procedimento é rotacionar imediatamente, auditar o uso e só depois limpar o histórico. Remover o arquivo não desfaz o vazamento.
1. O ciclo de vida de um segredo
Criar → armazenar em cofre → entregar à aplicação com o menor escopo → rotacionar → revogar. Cada etapa precisa de dono e registro.
2. Prefira credenciais temporárias
OIDC do GitHub para a nuvem, IRSA/Pod Identity no EKS, credenciais dinâmicas do Vault para bancos. O melhor segredo é o que expira sozinho em minutos.
3. Rotação sem queda
Para trocar a senha do banco: crie a nova, faça a app aceitar ambas (ou recarregar), migre, e só então revogue a antiga. Automatize no Secrets Manager.
4. Detecção de vazamento
Camadas: gitleaks no pre-commit, secret scanning com push protection no GitHub, scan no CI e alertas de uso anômalo no CloudTrail.
5. Plano de resposta
1) revogar, 2) avaliar uso indevido nos logs, 3) limpar histórico, 4) postmortem. Tenha isso escrito antes de precisar.
Na prática
Detecção e rotação
bash
# varredura do historico completo
docker run --rm -v "$PWD:/repo" zricethezav/gitleaks:latest detect --source=/repo --redact -v
# hook local para nao commitar segredo
cat > .git/hooks/pre-commit <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
gitleaks protect --staged --redact || { echo "segredo detectado: commit abortado"; exit 1; }
EOF
chmod +x .git/hooks/pre-commit
# rotacao no Secrets Manager
aws secretsmanager rotate-secret --secret-id cloudshop/db --rotation-rules AutomaticallyAfterDays=30
aws secretsmanager describe-secret --secret-id cloudshop/db --query '{Rotacao:RotationEnabled,Ultima:LastRotatedDate}'Nota de segurança: Ao encontrar um segredo no histórico, considere-o comprometido: rotacione antes de qualquer limpeza.
Pre-commit com gitleaks
yaml
# .pre-commit-config.yaml
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.18.4
hooks:
- id: gitleaks
# instalar: pip install pre-commit && pre-commit installPor que isso importa
Credencial vazada é a causa mais frequente de comprometimento em ambientes de nuvem.
Erro comum
Apagar o arquivo do repositório e considerar o problema resolvido.
Dica de produção
Prefira identidade federada: segredo que não existe não pode vazar.
Alerta de segurança
Segredo em variável de ambiente aparece em dump de erro e em ferramenta de APM mal configurada.
Pergunta de entrevista
Qual seu procedimento ao descobrir uma chave de nuvem commitada?
Glossário
- rotação
- Substituição periódica de credencial, idealmente automatizada.
- gitleaks
- Scanner que detecta padrões de segredo em código e histórico.
- Push protection
- Bloqueio do push quando o GitHub detecta um segredo.
- Credencial dinâmica
- Credencial gerada sob demanda com validade curta.
Conexão com o CloudShop
Varrer o histórico dos repositórios do CloudShop e ativar rotação do segredo do banco.
Quiz da aula
1. Ao encontrar uma chave de acesso commitada, a primeira ação é:
2. Qual a forma mais segura de o CI acessar a AWS?
Minhas anotações
Salvo automaticamente neste navegador.