Usando chaves API secretas em travis-ci

92

Eu gostaria de usar travis-ci para um de meus projetos .

O projeto é um wrapper de API, portanto, muitos dos testes dependem do uso de chaves secretas de API. Para testar localmente, eu apenas os armazeno como variáveis ​​de ambiente. Qual é a maneira segura de usar essas chaves no Travis?

user94154
fonte

Respostas:

99

Travis tem um recurso para criptografar variáveis ​​de ambiente ( "Criptografar variáveis ​​de ambiente" ). Isso pode ser usado para proteger suas chaves secretas de API. Usei isso com sucesso para minha chave de API do Heroku.

Tudo que você precisa fazer é instalar a gema travis, criptografar a string desejada e adicionar a string criptografada em seu .travis.yml. A criptografia é válida apenas para um repositório. O traviscomando obtém sua chave pública para seu repo e pode então descriptografar a string durante a construção.

gem install --user travis
travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo

Isso fornece a seguinte saída:

Please add the following to your .travis.yml file:

  secure: "OrEeqU0z6GJdC6Sx/XI7AMiQ8NM9GwPpZkVDq6cBHcD6OlSppkSwm6JvopTR\newLDTdtbk/dxKurUzwTeRbplIEe9DiyVDCzEiJGfgfq7woh+GRo+q6+UIWLE\n3nowpI9AzXt7iBhoKhV9lJ1MROrnn4DnlKxAEUlHTDi4Wk8Ei/g="
Odi
fonte
12
Não se esqueça de documentar quais variáveis ​​você está usando e por quê, porque uma vez criptografadas, apenas alguém com as chaves originais pode recuperá-las.
jerseyboy
2
Parece que as versões mais recentes da gema do Travis preferem ter seus argumentos na ordem oposta:, travis encrypt [args..] [options]ou seja, você deseja fazer travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo. Colocar as opções primeiro e os dados a serem criptografados por último exibe um aviso.
Jordan
3
Com a opção --add env.globaldo traviscomando, ele corrigirá seu .travis.yml automaticamente.
Thomas
1
@RamIdavalapati: já que os segredos são criptografados, isso é considerado seguro, sim.
Odi,
1
@ Ramesh-X: sim, pois esta criptografia é para TravisCI. Se alguém tiver controle sobre o TravisCI, poderá obter SECRET_ENV
Odi
7

de acordo com isso na documentação da travis ci é dito que:

Se você tiver os clientes de linha de comando Heroku e Travis CI instalados, poderá obter sua chave, criptografá-la e adicioná-la ao arquivo .travis.yml executando o seguinte comando no diretório do projeto:

travis encrypt $(heroku auth:token) --add deploy.api_key

consulte o seguinte tutorial para instalar o cliente heroku de acordo com o seu sistema operacional

Espoir Murhabazi
fonte
Eu só quero verificar: a chave que ele adiciona ao seu arquivo é segura para upload para controle de versão, certo?
vapurrmaid,
5

Você também pode definir variáveis secretas nas configurações do repositório :

As variáveis ​​definidas nas configurações do repositório são as mesmas para todos os builds e, quando você reinicia um build antigo, ele usa os valores mais recentes. Essas variáveis ​​não estão automaticamente disponíveis para garfos.

Defina variáveis ​​nas configurações do repositório que:

  • diferem por repositório.
  • contêm dados confidenciais, como credenciais de terceiros.

Para definir as variáveis ​​nas configurações do repositório, certifique-se de estar conectado, navegue até o repositório em questão, escolha “Configurações” no menu da engrenagem e clique em “Adicionar nova variável” na seção “Variáveis ​​de ambiente”.

pomber
fonte
1
Não entendia como criar variáveis secretas . Ao pesquisar isso no Google, os resultados explicam como criptografar.
XedinUnknown
@XedinUnknown Isso pode ser usado para variáveis ​​secretas. Do link: "Por padrão, o valor dessas novas variáveis ​​de ambiente está oculto na linha de exportação nos logs. Isso corresponde ao comportamento das variáveis ​​criptografadas em seu .travis.yml. As variáveis ​​são armazenadas criptografadas em nossos sistemas, e seja descriptografado quando o script de construção for gerado. "
bmaupin
0

Use um conjunto diferente de chaves de API e faça-o da mesma maneira. Sua caixa de travis é configurada para a execução da construção e, em seguida, completamente destruída novamente após a conclusão da construção. Você tem acesso root à sua máquina durante a construção, então pode fazer o que quiser com ela.

Markus
fonte
4
O que você quer dizer com "fazer da mesma maneira"? Eu realmente não gosto da ideia de armazenar chaves de API no próprio repo (ou seja, no arquivo .travis.yml), mas não parece haver outra maneira de configurar variáveis ​​de ambiente no travis.
BM5k
A variável env será criptografada com uma chave pública, portanto, apenas o proprietário da chave secreta pode descriptografá-la. Você não deve usar um token importante. No meu caso, usei aquele que o travis já tinha para o GitHub. Isso funcionou muito bem e, de dentro do github, posso revogar esse token sempre que achar que travis é um risco. Ter o token criptografado em meu repo não me faz dormir mal. github.com/ecki/GCViewer/blob/topic-ciupload/.travis.yml
eckes