Chaves a partir de variáveis de ambiente e arquivos
Além de armazenar um segredo no banco de dados, uma entrada do Armazenamento de Chaves pode ler seu valor no momento da tarefa a partir de um arquivo no servidor Semaphore ou de uma variável de ambiente do processo do servidor Semaphore. Isso é útil quando a credencial já é provisionada fora do Semaphore, por exemplo:
- uma chave SSH montada no contêiner do Semaphore como um secret do Docker ou do Kubernetes;
- um token gravado em disco por um agente (HashiCorp Vault Agent, cert-manager etc.) e rotacionado regularmente;
- uma senha injetada no ambiente do contêiner pelo seu orquestrador.
O Semaphore não copia o valor para o seu banco de dados. Sempre que uma tarefa precisa da chave, o servidor lê o arquivo ou a variável novamente, de modo que rotacionar a credencial no disco tem efeito na próxima tarefa.
O arquivo ou a variável é lido pelo servidor Semaphore, não por um runner. Quando você usa runners remotos, monte o arquivo no host do servidor; o servidor resolve o segredo e o entrega ao runner.
Escolhendo a origem
Ao criar ou editar uma chave (Armazenamento de Chaves → Nova Chave), a parte superior do formulário tem abas de origem:
| Aba | De onde vem o valor | O que informar |
|---|---|---|
| Local | Banco de dados do Semaphore (criptografado) | O login, a senha ou a chave privada no formulário |
| Storage Pro | Armazenamento de segredos externo, como o HashiCorp Vault | O armazenamento e o caminho do segredo |
| Env | Uma variável de ambiente do processo do servidor Semaphore | O nome da variável, por exemplo PROD_SSH_KEY |
| File | Um arquivo no servidor Semaphore | O caminho absoluto do arquivo, por exemplo /var/lib/semaphore/secrets/prod.json |
Com Env ou File selecionado, os campos de login, senha e chave privada desaparecem. A credencial completa, incluindo o login para chaves SSH e Login com Senha, deve estar no arquivo ou na variável.
1. Permitir o diretório
Por segurança, o Semaphore só lê arquivos de chave que estejam dentro do seu diretório de segredos. Qualquer outro caminho é rejeitado quando uma tarefa é iniciada:
Failed to install inventory: file path must be inside secrets path