Os desenvolvedores ainda codificam tokens de API, palavras-passe e credenciais diretamente no código ou em ficheiros .env e fazem push para o Git. Acontece em projetos pequenos e em produção.
A razão é simples: sem uma forma adequada de passar segredos para a automação e para os fluxos de implementação, o Git parece a única opção fiável. «Arrumamos mais tarde.» Mas no Git nada desaparece de verdade.
Porque o Git é perigoso para segredos
O Git é um sistema de controlo de versões. Tudo o que é commitado faz parte do histórico. Pode remover um token do último commit — os commits anteriores já o contêm. E o histórico replica-se por todo o lado: repositórios locais, agentes de automação, espelhos, forks. No momento em que um segredo entra num commit, fica exposto.
O acesso ao repositório tende a ser mais amplo do que devia. Contratados externos, contribuidores temporários, forks de teste — todos podem ver credenciais que não deviam.
O GitHub e o GitLab procuram ativamente credenciais. Se a plataforma assinalar um token, trate-o como comprometido e revogue-o de imediato.
O que deve substituir o Git
Um segredo não é um ficheiro estático. É uma credencial de acesso que deve viver fora da base de código, com permissões controladas, rotação e isolamento por ambiente.
Pode usar Vault ou OpenBao — mas isso implica infraestrutura, manutenção e trabalho de operações.
O Semaphore tem um Key Store integrado diretamente nos fluxos de automação. Os segredos podem ficar num de dois sítios:
- base de dados encriptada do Semaphore (predefinição)
- armazém externo como HashiCorp Vault, Devolutions ou OpenBao (funcionalidade PRO)
Escolha a opção integrada simples ou ligue o sistema corporativo de segredos. Funciona sem configuração pesada.
O que o Key Store guarda
- tokens de API
- chaves SSH
- palavras-passe
- variáveis de ambiente
- JSON e outros ficheiros de configuração
Os segredos nunca tocam na base de código. São injetados apenas em tempo de execução do job. Pode definir credenciais separadas para desenvolvimento, staging e produção e restringir o acesso a utilizadores, equipas ou fluxos específicos.
Como funciona na prática
Cria um Key Store, adiciona um segredo e referencia-o na configuração do workflow. O Semaphore injeta o valor em tempo de execução.
Numa implementação na AWS, por exemplo, as chaves de acesso existem apenas enquanto esse job corre, apenas no agente que o executa. Os programadores não veem o segredo. Nunca passa pelo Git.
Exemplo
Crie um segredo na interface: Secrets → New Secret e adicione as variáveis:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
Referencie o segredo pelo nome no workflow — o Semaphore injeta os valores como variáveis de ambiente em tempo de execução:
blocks:
- name: Deploy
task:
secrets:
- name: aws-credentials
jobs:
- name: deploy
commands:
- aws s3 sync ./dist s3://my-bucket
Para SSH, crie um segredo com o ficheiro da chave privada. O Semaphore coloca-o automaticamente em ~/.ssh/:
blocks:
- name: Deploy via SSH
task:
secrets:
- name: production-ssh-key
jobs:
- name: deploy
commands:
- ssh deploy@production-server "cd /app && git pull"
Key Store face a outras abordagens
| Método | Seguro | Visibilidade | Revogável |
|---|---|---|---|
.env no Git |
Não | Toda a equipa | Não |
| GitHub Actions Secrets | Parcial | Depende | Sim |
| Semaphore Key Store | Sim | Restrita | Sim |
Além disso: rodar tokens sem alterar código, controlar acesso por função ou equipa, segredos diferentes por ambiente.
Conclusão
Qualquer token commitado no Git deve ser tratado como comprometido. O histórico propaga-se por colaboradores, forks, espelhos e agentes — cada cópia é mais um ponto de exposição.
O Key Store mantém segredos fora dos repositórios, injeta-os apenas em tempo de execução e dá controlo sobre rotação e acesso. Para equipas com Ansible, Terraform, OpenTofu ou automação em PowerShell não é infraestrutura opcional: é a base.
Opção 1
Segredos no Git = segredos expostos. Para sempre.
O histórico do Git replica-se por forks, espelhos e agentes de CI. Um token num commit é um token comprometido por tempo indefinido.
Explicámos porque isto continua a acontecer — e como o Semaphore Key Store resolve.
Opção 2
Como o Semaphore Key Store trata os segredos:
→ Guardar tokens, chaves SSH e variáveis de ambiente fora do repositório
→ Referenciar com {{ your_secret }} na configuração do job
→ Injetar em tempo de execução, no agente, só para esse job
Os programadores não veem. Nunca toca no Git.
Análise completa → [ligação]
Acabámos de publicar uma análise de como o Semaphore Key Store funciona — e porque existe.
Em resumo: segredos não pertencem ao Git. Nunca. Mas sem uma alternativa séria, as equipas continuam a colocá-los lá.
O Key Store integra-se diretamente nos fluxos de automação do Semaphore. O fluxo real:
- Criar um Key Store na interface
- Adicionar segredos — tokens API, chaves SSH, variáveis de ambiente, ficheiros de configuração
- Referenciá-los na configuração do job com
{{ your_secret }} - O Semaphore injeta-os em tempo de execução, no agente, só para esse job
O programador não vê o segredo. Não toca no repositório. Quando o job termina, desaparece do ambiente de execução.
Pode restringir o acesso por utilizador, equipa ou ambiente. Rodar um token sem alterar uma linha de código. Credenciais separadas para dev, staging e prod.
Para equipas com Ansible, Terraform ou OpenTofu — é a peça em falta entre «funciona» e «é realmente seguro».
Análise completa →
