Utilizzo di chiavi API segrete su travis-ci


92

Vorrei usare travis-ci per uno dei miei progetti .

Il progetto è un wrapper API, quindi molti dei test si basano sull'uso di chiavi API segrete. Per testarli localmente, li memorizzo come variabili d'ambiente. Qual è un modo sicuro per usare quelle chiavi su Travis?

Risposte:


99

Travis ha una funzione per crittografare le variabili d'ambiente ( "Crittografia delle variabili d'ambiente" ). Questo può essere utilizzato per proteggere le tue chiavi API segrete. L'ho usato con successo per la mia chiave API Heroku.

Tutto quello che devi fare è installare travis gem, crittografare la stringa che desideri e aggiungere la stringa crittografata nel tuo file .travis.yml. La crittografia è valida solo per un repository. Il traviscomando ottiene la tua chiave pubblica per il repository e può quindi decrittografare la stringa durante la compilazione.

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

Questo ti dà il seguente output:

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

  secure: "OrEeqU0z6GJdC6Sx/XI7AMiQ8NM9GwPpZkVDq6cBHcD6OlSppkSwm6JvopTR\newLDTdtbk/dxKurUzwTeRbplIEe9DiyVDCzEiJGfgfq7woh+GRo+q6+UIWLE\n3nowpI9AzXt7iBhoKhV9lJ1MROrnn4DnlKxAEUlHTDi4Wk8Ei/g="

12
Non dimenticare di documentare quali variabili stai utilizzando e perché, perché una volta crittografate solo qualcuno con le chiavi originali può recuperarle.
jerseyboy

2
Sembra che le versioni più recenti della gemma Travis preferiscano avere i loro argomenti nell'ordine opposto:, travis encrypt [args..] [options]cioè ti consigliamo di fare travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo. Mettendo prima le opzioni e gli ultimi dati da crittografare viene visualizzato un avviso.
Jordan in esecuzione

3
Con l'opzione --add env.globalper il traviscomando, modificherà automaticamente il tuo .travis.yml.
Thomas,

1
@RamIdavalapati: poiché i segreti sono crittografati, questo è considerato sicuro, sì.
Odi

1
@ Ramesh-X: sì poiché questa crittografia è per TravisCI. Se qualcuno ha il controllo su TravisCI, potrebbe ottenere SECRET_ENV
Odi

7

secondo questo nella documentazione di travis ci si dice che:

Se hai installato entrambi i client della riga di comando Heroku e Travis CI, puoi ottenere la tua chiave, crittografarla e aggiungerla al tuo .travis.yml eseguendo il seguente comando dalla directory del tuo progetto:

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

fare riferimento al seguente tutorial per installare il client heroku in base al proprio sistema operativo


Voglio solo verificare: la chiave che aggiunge al tuo file è sicura da caricare nel controllo della versione, giusto?
vapurrmaid

5

Puoi anche definire variabili segrete nelle impostazioni del repository :

Le variabili definite nelle impostazioni del repository sono le stesse per tutte le build e quando riavvii una vecchia build, utilizza i valori più recenti. Queste variabili non sono automaticamente disponibili per i fork.

Definisci le variabili nelle Impostazioni del repository che:

  • differiscono per repository.
  • contenere dati sensibili, come credenziali di terze parti.

Per definire le variabili nelle impostazioni del repository, assicurati di aver effettuato l'accesso, vai al repository in questione, scegli "Impostazioni" dal menu a ingranaggio e fai clic su "Aggiungi nuova variabile" nella sezione "Variabili d'ambiente".


1
Non capivo come creare variabili segrete . Quando si cerca su Google, i risultati spiegano come crittografare.
XedinUnknown

@XedinUnknown Questo può essere utilizzato per le variabili segrete. Dal link: "Per impostazione predefinita, il valore di queste nuove variabili di ambiente è nascosto dalla riga di esportazione nei log. Ciò corrisponde al comportamento delle variabili crittografate nel tuo .travis.yml. Le variabili vengono memorizzate crittografate nei nostri sistemi e vengono decrittografati quando viene generato lo script di build. "
bmaupin

0

Usa un diverso set di chiavi API e fallo allo stesso modo. La tua scatola di travis viene configurata per la tua build e poi completamente demolita di nuovo al termine della tua build. Hai accesso root alla tua scatola durante la compilazione, quindi puoi farci quello che vuoi.


4
Cosa intendi con "fai allo stesso modo"? Non mi piace molto l'idea di memorizzare le chiavi API nel repo stesso (cioè nel file .travis.yml), ma non sembra esserci un altro modo per configurare le variabili d'ambiente su travis.
BM5k

La variabile env verrà crittografata con una chiave pubblica, quindi solo il proprietario della chiave segreta può decrittografarla. Non dovresti usare un token importante. Nel mio caso ho usato quello che travis aveva già per GitHub. Ha funzionato abbastanza bene e dall'interno di github posso revocare quel token ogni volta che ritengo che Travis sia un rischio. Avere il token crittografato nel mio repo non mi fa dormire male. github.com/ecki/GCViewer/blob/topic-ciupload/.travis.yml
eckes
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.