Nota de arquitectura
Governança de Segurança do Repo
Contexto de arquitectura
Decisão de arquitectura
Aplicado em
O teu repositório privado não é seguro. Está apenas menos exposto.
A maioria dos fundadores e product managers trata o repositório do GitHub como um simples local para guardar código. Mas a partir do momento em que um produto cresce — clientes, pagamentos, contratos, credenciais — o repositório deixa de ser apenas código. Passa a ser dados operacionais.
E há um comportamento do Git que a maioria ignora: apagar um ficheiro não o remove do histórico.
Um IBAN num ficheiro markdown. Uma API key num .env submetida por engano. Dados de clientes num template de email. Apagas, fazes push, e assumes que desapareceu. Não desapareceu — permanece no histórico e pode ser recuperado por qualquer pessoa com acesso ao repositório.
Isto não é um problema de escala. É um problema de governança.
Existem soluções maduras há anos. A encriptação ao nível do repositório permite que determinados ficheiros permaneçam legíveis localmente enquanto ficam encriptados no remoto.
Ferramentas como o git-crypt mantêm o workflow do Git praticamente inalterado após a configuração. Demora menos tempo a configurar do que a lidar com as consequências de uma fuga de dados.
Três princípios que aplico em todos os meus repositórios:
Bloquear à entrada — pre-commit hooks, secret scanning e push protection para reduzir a probabilidade de credenciais entrarem no histórico
O que não deve viver no repositório — credenciais em bruto pertencem a um secret manager ou password vault, nunca ao código
O que tem de viver no repositório — se tiver mesmo de lá estar, tem de estar encriptado. Sem excepções — nem "é só temporário", nem "o repositório é privado"
Basta um colaborador, uma integração de CI/CD, ou uma migração de plataforma para perceber que "privado" não significa "protegido".
Governança não é overhead. É o que separa um side project de um produto em que alguém confia os seus dados.
Fontes
- git-crypt — transparent file encryption in Git: https://github.com/AGWA/git-crypt
- GitHub secret scanning and push protection: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning
- Git history rewriting (git-filter-repo): https://github.com/newren/git-filter-repo