Appearance
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)
Instale
sopseage.Gere a chave:
age-keygen -o ~/.config/sops/age/keys.txte guarde a chave pública.Crie
.sops.yamlna raiz docontrasync-ai-api:yamlcreation_rules: - path_regex: \.enc\.env$ age: <AGE_PUBLIC_KEY>cp .env.example .env, preencha, e encripte:sops -e .env > .env.enc.env(commit só o.enc.env;.envno.gitignore).
Operação
- Editar secret:
sops .env.enc.env(abre decriptado, salva re-encriptado). - Deploy:
SOPS_AGE_KEY_FILE=... sops -d .env.enc.env > .envantes 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)
- Revogue a chave no provider (Anthropic/OpenAI/Cohere).
- Gere nova,
sopsre-encripta, redeploy. - Se
JWT_SECRETvazou: rotacione nos 3 serviços e invalide sessões ativas.