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 .env automaticamente 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