Skip to content

Runbook: Secrets da AI API (D0.0)

MVP sem AWS Secrets Manager. Secrets versionados encriptados no repo via SOPS + age, ou injetados como secrets do Hetzner/CI.

Chaves sensíveis

ANTHROPIC_API_KEY, OPENAI_API_KEY, COHERE_API_KEY, JWT_SECRET (compartilhado com Product API/gateway), DATABASE_URL, SENTRY_DSN.

Setup (uma vez)

  1. Instale sops e age.

  2. Gere a chave: age-keygen -o ~/.config/sops/age/keys.txt e guarde a chave pública.

  3. Crie .sops.yaml na raiz do contrasync-ai-api:

    yaml
    creation_rules:
      - path_regex: \.enc\.env$
        age: <AGE_PUBLIC_KEY>
  4. cp .env.example .env, preencha, e encripte: sops -e .env > .env.enc.env (commit só o .enc.env; .env no .gitignore).

Operação

  • Editar secret: sops .env.enc.env (abre decriptado, salva re-encriptado).
  • Deploy: SOPS_AGE_KEY_FILE=... sops -d .env.enc.env > .env antes de subir o container, ou montar via secret do Hetzner/CI (não commitar .env).
  • Rotação JWT_SECRET: rotacione junto com Product API e gateway (mesmo segredo HS256): desalinhar derruba auth da IA.

Verificação

git grep -nE 'sk-|api[_-]?key' -- ':!*.enc.env' ':!*.md' não deve retornar segredo em texto plano. CI roda o mesmo check.

Incidente (vazamento)

  1. Revogue a chave no provider (Anthropic/OpenAI/Cohere).
  2. Gere nova, sops re-encripta, redeploy.
  3. Se JWT_SECRET vazou: rotacione nos 3 serviços e invalide sessões ativas.