Pular para o conteúdo

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.

MomentoOndeFerramenta
moravariável de ambiente, cofre do provedor, KMS — nunca o repositórioOS.env, .env no .gitignore
passadentro de um Segredo, que não se imprimeSeguranca.segredo(valor)revelar()
não aparecelog, erro, relatórioredigir(texto), mascarar_no_log no CI
vazacommit, log público, print de telaprocurar_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.