Gerenciamento de credenciais em ambiente de desenvolvimento
1. Fundamentos do Gerenciamento de Credenciais em Desenvolvimento
Credenciais em ambiente de desenvolvimento incluem chaves de API, tokens de autenticação, senhas de banco de dados, certificados e quaisquer segredos necessários para que aplicações funcionem localmente. A importância de gerenciá-las adequadamente reside no fato de que vazamentos podem comprometer sistemas inteiros antes mesmo de chegarem à produção.
Os riscos mais comuns são:
- Hardcoding: inserir credenciais diretamente no código-fonte
- Vazamento em repositórios: commits acidentais de arquivos com segredos
- Logs acidentais: impressão de credenciais em console ou arquivos de log
- Compartilhamento inseguro: envio por mensagens, e-mails ou documentos não criptografados
A diferença entre ambientes é crucial: desenvolvimento deve usar credenciais de baixo privilégio e escopo limitado, staging pode simular produção com dados fictícios, e produção exige o mais alto nível de segurança.
2. Práticas Seguras para Armazenamento Local
Variáveis de Ambiente com .env
O método mais básico e eficaz é usar arquivos .env que nunca são versionados. Exemplo de formatação:
# .env
DB_PASSWORD=minha_senha_segura_123
API_KEY=sk-proj-abc123def456
JWT_SECRET=meu_segredo_jwt_super_seguro
Configuração do .gitignore
Garanta que o .gitignore contenha:
# .gitignore
.env
.env.*
*.local
secrets/
Ferramentas Locais
- dotenv: carrega variáveis do
.envautomaticamente na aplicação - direnv: carrega/descarrega variáveis ao entrar/sair de diretórios
- Hashicorp Vault em modo dev: para testes locais de cofre de segredos
3. Integração com Gerenciadores de Senhas e Cofres
Gerenciadores de Senhas
Bitwarden e 1Password possuem extensões CLI que permitem injetar credenciais diretamente no terminal:
# Usando Bitwarden CLI
bw login
bw get password "Banco de Dados Dev" > .env
Cofres de Segredos
HashiCorp Vault pode ser executado localmente para desenvolvimento:
# Iniciar Vault em modo dev
vault server -dev
# Configurar segredo
vault kv put secret/dev/database password=minha_senha
Sincronização entre Equipe
Ferramentas como Doppler ou AWS Secrets Manager permitem que times compartilhem credenciais de forma segura, sem expô-las em repositórios:
# Doppler CLI
doppler setup
doppler run -- npm start
4. Prevenção de Vazamentos em Controle de Versão
Hooks Git Pre-commit
Instale hooks que escaneiam credenciais antes de cada commit:
# .git/hooks/pre-commit
#!/bin/bash
gitleaks detect --source . --verbose
if [ $? -ne 0 ]; then
echo "⚠️ Credenciais detectadas! Commit bloqueado."
exit 1
fi
Ferramentas de Detecção
- git-secrets: verifica padrões de credenciais no histórico
- truffleHog: escaneia commits em busca de segredos
- Gitleaks: ferramenta moderna com regras pré-definidas
Remediação
Caso uma credencial vaze:
1. Rotacione imediatamente a credencial comprometida
2. Remova do histórico com git filter-branch ou BFG Repo-Cleaner
3. Force push apenas se todos os colaboradores estiverem cientes
# Removendo arquivo do histórico
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch .env" \
--prune-empty --tag-name-filter cat -- --all
5. Credenciais em Containers e Ambientes Virtualizados
Docker Secrets
Em Docker Swarm, use segredos nativos:
# docker-compose.yml (Swarm mode)
secrets:
db_password:
file: ./secrets/db_password.txt
services:
app:
secrets:
- db_password
Docker Compose com Variáveis
Para desenvolvimento local com Docker Compose:
# docker-compose.yml
version: '3.8'
services:
app:
image: minha-app
env_file:
- .env
environment:
- DB_PASSWORD=${DB_PASSWORD}
Kubernetes Secrets
Em clusters locais como Minikube ou Kind:
# Criando secret
kubectl create secret generic db-credentials \
--from-literal=password='minha_senha'
# Usando no pod
apiVersion: v1
kind: Pod
spec:
containers:
- name: app
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-credentials
key: password
6. Autenticação e Tokens em APIs de Desenvolvimento
Tokens JWT em Ambiente Local
Gere tokens de curta duração para testes:
# Gerando JWT com expiração de 1 hora
jwt_token=$(python3 -c "
import jwt, time
payload = {'sub': 'dev_user', 'exp': int(time.time()) + 3600}
print(jwt.encode(payload, 'dev_secret', algorithm='HS256'))
")
OAuth e Provedores Externos
Configure redirect URIs locais (ex: http://localhost:3000/callback) nos provedores e use credenciais de desenvolvimento separadas.
Rotação Automática
Implemente scripts que renovam tokens periodicamente:
#!/bin/bash
# rotate_token.sh
source .env
NEW_TOKEN=$(curl -s -X POST https://auth.exemplo.com/token \
-d "grant_type=client_credentials&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET" \
| jq -r '.access_token')
echo "ACCESS_TOKEN=$NEW_TOKEN" > .env
7. Auditoria e Monitoramento de Credenciais
Logs Seguros
Configure seu logger para mascarar credenciais:
# Exemplo com Python logging
import logging
class CredentialFilter(logging.Filter):
def filter(self, record):
record.msg = record.msg.replace(os.getenv('DB_PASSWORD'), '****')
return True
logger = logging.getLogger()
logger.addFilter(CredentialFilter())
Ferramentas de Auditoria
- Vault Audit Logs: registra todo acesso a segredos
- AWS CloudTrail: monitora acesso ao Secrets Manager
- GitLeaks CI: integração com pipelines para auditoria contínua
Políticas de Rotação
Estabeleça cronogramas:
- Senhas de banco de dados: a cada 30 dias
- Tokens de API: a cada 7 dias
- Chaves SSH: a cada 90 dias
8. Cultura e Treinamento da Equipe
Documentação de Políticas
Crie um SECURITY.md no repositório:
# SECURITY.md
## Política de Credenciais
- Nunca commitar .env ou arquivos com senhas
- Usar variáveis de ambiente em todos os projetos
- Rotacionar credenciais a cada 30 dias
- Reportar vazamentos imediatamente para security@empresa.com
Treinamento Prático
Realize workshops com:
- Demonstração de ferramentas de detecção
- Simulação de vazamento e remediação
- Exercícios de configuração de hooks Git
Revisão de Código
Checklist para code review:
- [ ] Nenhuma credencial hardcoded
- [ ] Variáveis de ambiente sendo usadas
- [ ] Arquivos .env no .gitignore
- [ ] Logs não expõem segredos
Referências
- Documentação oficial do Git-Secrets — Ferramenta da AWS para prevenir commits de credenciais em repositórios Git
- Gitleaks - Detecção de segredos em repositórios — Scanner open-source para encontrar credenciais vazadas em código-fonte
- HashiCorp Vault - Getting Started — Tutorial oficial para iniciar com gerenciamento de segredos usando Vault
- Docker Secrets Documentation — Guia oficial sobre gerenciamento de segredos em ambientes Docker Swarm
- OWASP - Credential Stuffing Prevention — Boas práticas de segurança para prevenção de vazamento e reuso de credenciais
- Bitwarden CLI Guide — Documentação para uso da interface de linha de comando do Bitwarden em automações
- Kubernetes Secrets - Official Docs — Documentação completa sobre gerenciamento de segredos no Kubernetes