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
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
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.
Atualize no CriptEnv
Use o CLI para atualizar a variável com o novo valor:
# Atualizar uma variável específica
criptenv set DATABASE_URL "nova-url-do-banco" --project meu-app
# Atualizar interativamente
criptenv set --interactive --project meu-appSincronize com as integrações
Se você tem integrações configuradas (Vercel, Railway, etc.), a sincronização automática propagará a mudança. Caso contrário, sincronize manualmente:
# Sincronizar todas as integrações
criptenv sync --project meu-app
# Sincronizar uma integração específica
criptenv sync --provider vercel --project meu-appVerifique 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 ou seu sistema de CI/CD preferido.
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: |
npm install -g @criptenv/cli
criptenv set API_KEY "${{ steps.generate.outputs.secret }}" \
--project meu-app \
--environment production
- name: Sincronizar com Vercel
run: |
criptenv sync --provider vercel --project meu-app
- name: Notificar equipe
uses: slackapi/slack-github-action@v1
with:
payload: |
{"text": "✅ API Key rotacionada com sucesso no projeto meu-app"}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}Políticas de Rotação
Defina políticas de rotação por tipo de secret:
| Tipo de Secret | Frequência Recomendada | Prioridade |
|---|---|---|
| API Keys | A cada 30 dias | Alta |
| Database credentials | A cada 90 dias | Alta |
| JWT secrets | A cada 30 dias | Alta |
| Third-party tokens | A cada 90 dias | Média |
| Encryption keys | A cada 180 dias | Crítica |
Rotação via SDK
import { CriptEnv } from '@criptenv/sdk';
import crypto from 'crypto';
const criptenv = new CriptEnv({
token: process.env.CRIPTENV_TOKEN!,
projectId: 'seu-project-id',
});
async function rotateSecret(keyName: string) {
// Gera um novo valor
const newValue = crypto.randomBytes(32).toString('hex');
// Atualiza no CriptEnv
await criptenv.set(keyName, newValue);
console.log(`Secret ${keyName} rotacionado com sucesso`);
return newValue;
}
// Rotacionar múltiplos secrets
async function rotateAll() {
const keys = ['API_KEY', 'JWT_SECRET', 'ENCRYPTION_KEY'];
for (const key of keys) {
await rotateSecret(key);
}
// Sincroniza com integrações
await criptenv.sync();
}
rotateAll();Info
