Gestão de segredos
Onde o segredo mora, como ele não aparece em log, como é achado no código — e o que fazer quando vaza.
Um segredo tem quatro momentos: onde ele mora, como ele passa pelo programa, como ele não aparece onde não devia, e o que se faz quando ele vaza. Cada um tem uma ferramenta aqui.
| Momento | Onde | Ferramenta |
|---|---|---|
| mora | variável de ambiente, cofre do provedor, KMS — nunca o repositório | OS.env, .env no .gitignore |
| passa | dentro de um Segredo, que não se imprime | Seguranca.segredo(valor) → revelar() |
| não aparece | log, erro, relatório | redigir(texto), mascarar_no_log no CI |
| vaza | commit, log público, print de tela | procurar_segredos, dataforge seguranca — e rotacionar |
dataforge
adopt Arcane.Seguranca as S
s := S.segredo("sk_live_" + "x" * 24, "stripe")
out s // nao aparece
assert "sk_live" not in str(s)
assert s.revelar().startswith("sk_live") // so onde for preciso — e aparece na revisao
log := "conectando com postgres://app:s3nh4-forte@db:5432/loja"
limpo := S.redigir(log)
out limpo
assert "s3nh4-forte" not in limpo
achados := S.procurar_segredos("chave := \"ghp_" + "R8tK2mQ9vX4pL7nZ3wB6yH1cJ5dF0sG8aE2u" + "\"")
assert len(achados) is 1
out $"achado: {achados[0]['tipo']} na linha {achados[0]['linha']}"Antes do commit: pre-commit. O ciclo da chave: Criptografia e chaves.