Compartilhar secrets no GitHub Actions — sem Vault
Por Maxim Novak
Você pode compartilhar secrets no GitHub Actions sem o HashiCorp Vault usando a GitHub Action do Vaulted, que cria links criptografados e autodestrutivos com zero infraestrutura. Ela usa criptografia AES-256-GCM no lado do cliente e funciona como um único passo do fluxo de trabalho — não requer nenhum servidor de gerenciador de secrets nem configuração na nuvem.
Os pipelines de CI precisam de credenciais temporárias o tempo todo. Uma chave de deploy que só deveria viver durante uma execução. Um token passado entre dois repositórios durante uma migração. Uma credencial rotacionada em um fluxo de trabalho e consumida em outro.
O conselho habitual é "use um gerenciador de secrets". Mas subir o HashiCorp Vault ou configurar o AWS Secrets Manager só para entregar uma única credencial entre fluxos de trabalho é como alugar um galpão para enviar uma carta.
Os secrets de repositório do GitHub lidam bem com o caso estático — chaves de API de longa duração, tokens de deploy, credenciais de contas de serviço. Mas ficam aquém para qualquer coisa temporária ou dinâmica.
A lacuna: compartilhar secrets temporários em CI/CD
Os secrets de repositório são projetados para valores que mudam com pouca frequência e são consumidos por um único repositório. Eles não cobrem:
- Entregas únicas durante a rotação de chaves — Você rotaciona uma credencial em um fluxo de trabalho e precisa que outro fluxo de trabalho (ou equipe) pegue o novo valor exatamente uma vez.
- Compartilhamento de credenciais entre repositórios — Dois repositórios precisam trocar um token de curta duração, mas nenhum deles deveria armazená-lo permanentemente.
- Acesso temporário para prestadores de serviço — Um token de CI que deveria expirar depois que a janela de deploy de um prestador de serviço se encerrar.
- Saber quando um secret foi consumido — Os secrets de repositório não oferecem visibilidade sobre se um valor foi lido ou quando.
Esses são problemas temporários que precisam de uma solução temporária.
Uma abordagem mais leve: links criptografados e autodestrutivos
A GitHub Action do Vaulted permite criar e recuperar secrets criptografados e autodestrutivos diretamente dos seus fluxos de trabalho — sem infraestrutura para gerenciar.
Criar um secret:
- name: Share rotated credential
id: share
uses: vaulted-fyi/share-secret@v1
with:
secret: ${{ steps.rotate.outputs.new_token }}
views: 1
expires: 1h
O passo gera uma URL que contém o secret criptografado. A chave de criptografia vive no fragmento da URL, então ela nunca toca os servidores do Vaulted.
Recuperar um secret:
- name: Get shared credential
id: get
uses: vaulted-fyi/share-secret/get@v1
with:
url: ${{ needs.rotate.outputs.secret_url }}
- name: Deploy with rotated credential
run: ./deploy.sh
env:
API_TOKEN: ${{ steps.get.outputs.secret }}
Após a recuperação, o link é consumido e o texto cifrado do lado do servidor é excluído. O secret existe apenas na memória do runner durante a duração daquele job.
Modelo de segurança
Três propriedades tornam isso seguro para uso em CI/CD:
-
Criptografia zero-knowledge. O secret é criptografado com AES-256-GCM dentro do runner do GitHub antes de sair do processo. A chave de criptografia é embutida no fragmento da URL, que nunca é enviado ao servidor. O Vaulted só armazena texto cifrado que não consegue descriptografar. Isso é criptografia no lado do cliente aplicada a CI/CD.
-
Mascaramento automático de logs. A action chama
core.setSecretantes decore.setOutput, registrando cada linha do valor do secret com o mascarador de logs do GitHub. Secrets de várias linhas são mascarados linha por linha, de modo que até correspondências parciais são censuradas nos logs do fluxo de trabalho. -
Links autodestrutivos. Os limites de visualizações e a expiração por tempo são aplicados no lado do servidor. Um secret criado com
views: 1eexpires: 1hé excluído permanentemente após a primeira recuperação ou após uma hora — o que ocorrer primeiro.
Quando usar isto em vez de um gerenciador de secrets
| Cenário | Gerenciador de secrets | Action do Vaulted |
|---|---|---|
| Credenciais de produção de longa duração | Sim | Não |
| Configuração de runtime da app (URLs de BD, chaves de API) | Sim | Não |
| Entrega única de credenciais entre fluxos de trabalho | Exagero | Sim |
| Compartilhamento temporário de tokens entre repositórios | Exagero | Sim |
| Acesso temporário de CI para prestadores de serviço | Exagero | Sim |
| Distribuição de credenciais após uma rotação | Exagero | Sim |
Os gerenciadores de secrets são a ferramenta certa para os secrets que as aplicações consomem em tempo de execução. O Vaulted é para a entrega — o momento em que uma credencial se move de um lugar para outro e não deveria persistir.
Primeiros passos
Adicione a action a qualquer fluxo de trabalho:
- uses: vaulted-fyi/share-secret@v1
with:
secret: ${{ secrets.TEMP_CREDENTIAL }}
views: 1
expires: 1h
Encontre-a no GitHub Marketplace. Os secrets criados pela action são compatíveis com o app web e a CLI — qualquer coisa criada em um pode ser recuperada de outro.
Sem servidor do Vault. Sem políticas de IAM. Sem infraestrutura. Apenas links criptografados que se autodestroem.
Relacionado
- Compartilhe chaves de API com segurança — links criptografados e autodestrutivos para credenciais de API
- Compartilhe arquivos .env com segurança — compartilhe configurações de ambiente sem o Slack
- Criptografia de ponta a ponta explicada — guia visual com uma demonstração de criptografia ao vivo