Rotação de Secrets

A rotação regular de secrets é uma prática essencial de segurança. Aprenda a configurar e automatizar a rotação de variáveis de ambiente usando o CriptEnv.

Info

A rotação de secrets reduz a janela de exposição caso uma credencial seja comprometida. Recomendamos rodar a cada 30-90 dias, dependendo do nível de sensibilidade.

Por que rotacionar?

  • Reduz o impacto de vazamentos e comprometimentos
  • Atende a requisitos de compliance (SOC2, ISO 27001, LGPD)
  • Remove acessos de funcionários que saíram da empresa
  • Mantém boas práticas de higiene de segurança

Rotação Manual

1

Gere o novo secret

Gere o novo secret no serviço correspondente (banco de dados, API, etc.). Certifique-se de que o novo secret está funcionando antes de atualizar no CriptEnv.

2

Atualize no CriptEnv

Use o CLI para atualizar a variável com o novo valor:

Atualizar variável
# Atualizar uma variável específica
criptenv rotate API_KEY -v "novo-valor-seguro" -p <project-id>

# Rotacionar com valor auto-gerado
criptenv rotate API_KEY -p <project-id>
3

Sincronize com as integrações

Se você tem integrações configuradas (Vercel, Render), sincronize manualmente:

Sincronizar integrações
# Sincronizar com Vercel
criptenv integrations sync vercel -p <project-id>

# Sincronizar com Render
criptenv integrations sync render -p <project-id>
4

Verifique a aplicação

Confirme que a aplicação está funcionando corretamente com o novo secret. Monitore logs e métricas por alguns minutos.

Rotação Automatizada

Configure a rotação automática usando o GitHub Actions:

Rotação automática com GitHub Actions
name: Secret Rotation

on:
  schedule:
    # Executa todo dia 1 do mês às 3h UTC
    - cron: '0 3 1 * *'
  workflow_dispatch:  # Permite execução manual

jobs:
  rotate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Gerar novo secret
        id: generate
        run: |
          NEW_SECRET=$(openssl rand -hex 32)
          echo "secret=$NEW_SECRET" >> $GITHUB_OUTPUT

      - name: Atualizar no CriptEnv
        env:
          CRIPTENV_TOKEN: ${{ secrets.CRIPTENV_TOKEN }}
        run: |
          pip install criptenv
          criptenv ci login --token $CRIPTENV_TOKEN
          criptenv rotate API_KEY -v "${{ steps.generate.outputs.secret }}" -p <project-id>

      - name: Sincronizar com Vercel
        run: |
          criptenv integrations sync vercel -p <project-id>

      - name: Notificar equipe
        uses: slackapi/slack-github-action@v1
        with:
          payload: |
            {"text": "✅ API Key rotacionada com sucesso no projeto"}
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}

Políticas de Rotação

Defina políticas de rotação por tipo de secret:

Tipo de SecretFrequência RecomendadaPrioridade
API KeysA cada 30 diasAlta
Database credentialsA cada 90 diasAlta
JWT secretsA cada 30 diasAlta
Third-party tokensA cada 90 diasMédia
Encryption keysA cada 180 diasCrítica

Expiração e Alertas

Configure expiração automática e alertas para seus secrets:

Configurar expiração e alertas
# Definir expiração de 90 dias com política notify
criptenv secrets expire API_KEY --days 90 --policy notify -p <project-id>

# Configurar alerta 14 dias antes da expiração
criptenv secrets alert API_KEY --days 14 -p <project-id>

# Listar secrets próximos da expiração
criptenv rotation list --days 30 -p <project-id>

Info

Ao rotacionar secrets em produção, certifique-se de que todos os serviços dependentes são atualizados simultaneamente para evitar downtime. Considere usar rotação com período de sobreposição (overlap) onde tanto o secret antigo quanto o novo são válidos por um período.