Utilisation de clés API secrètes sur travis-ci

92

J'aimerais utiliser travis-ci pour l'un de mes projets .

Le projet est un wrapper d'API, donc de nombreux tests reposent sur l'utilisation de clés d'API secrètes. Pour tester localement, je les stocke simplement en tant que variables d'environnement. Quel est le moyen sûr d'utiliser ces clés sur Travis?

user94154
la source

Réponses:

99

Travis a une fonction pour crypter les variables d'environnement ( "Encrypting environment variables" ). Cela peut être utilisé pour protéger vos clés API secrètes. Je l'ai utilisé avec succès pour ma clé API Heroku.

Tout ce que vous avez à faire est d'installer le gem travis, de crypter la chaîne que vous souhaitez et d'ajouter la chaîne cryptée dans votre fichier .travis.yml. Le chiffrement n'est valide que pour un référentiel. La traviscommande obtient votre clé publique pour votre dépôt et peut ensuite déchiffrer la chaîne lors de la génération.

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

Cela vous donne la sortie suivante:

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

  secure: "OrEeqU0z6GJdC6Sx/XI7AMiQ8NM9GwPpZkVDq6cBHcD6OlSppkSwm6JvopTR\newLDTdtbk/dxKurUzwTeRbplIEe9DiyVDCzEiJGfgfq7woh+GRo+q6+UIWLE\n3nowpI9AzXt7iBhoKhV9lJ1MROrnn4DnlKxAEUlHTDi4Wk8Ei/g="
Odi
la source
12
N'oubliez pas de documenter les variables que vous utilisez, et pourquoi, car une fois chiffrées, seule une personne possédant les clés d'origine peut les récupérer.
jerseyboy
2
Il semble que les nouvelles versions du gem Travis préfèrent avoir leurs arguments dans l'ordre inverse: travis encrypt [args..] [options]c'est-à-dire que vous voudrez faire travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo. Mettre les options en premier et les données à chiffrer en dernier affiche un avertissement.
Jordan Running
3
Avec l'option --add env.globalde la traviscommande, il modifiera automatiquement votre .travis.yml.
Thomas
1
@RamIdavalapati: puisque les secrets sont cryptés, cela est considéré comme sûr, oui.
Odi
1
@ Ramesh-X: oui puisque ce cryptage est pour TravisCI. Si quelqu'un a le contrôle de TravisCI, il pourrait obtenir SECRET_ENV
Odi
7

d'après cela dans la documentation de travis ci, il est dit que:

Si les clients de ligne de commande Heroku et Travis CI sont installés, vous pouvez obtenir votre clé, la crypter et l'ajouter à votre .travis.yml en exécutant la commande suivante à partir du répertoire de votre projet:

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

reportez-vous au tutoriel suivant pour installer le client heroku en fonction de votre système d'exploitation

Espoir Murhabazi
la source
Je veux juste vérifier: la clé qu'il ajoute à votre fichier peut être téléchargée en toute sécurité vers le contrôle de version, non?
vapurrmaid
5

Vous pouvez également définir des variables secrètes dans les paramètres du référentiel :

Les variables définies dans les paramètres du référentiel sont les mêmes pour toutes les versions et lorsque vous redémarrez une ancienne version, elle utilise les dernières valeurs. Ces variables ne sont pas automatiquement disponibles pour les fourches.

Définissez des variables dans les paramètres du référentiel qui:

  • diffèrent par référentiel.
  • contiennent des données sensibles, telles que des informations d'identification tierces.

Pour définir des variables dans les paramètres du référentiel, assurez-vous d'être connecté, accédez au référentiel en question, choisissez «Paramètres» dans le menu engrenage, puis cliquez sur «Ajouter une nouvelle variable» dans la section «Variables d'environnement».

pomber
la source
1
Je n'ai pas compris comment créer des variables secrètes . Lorsque vous recherchez cela sur Google, les résultats expliquent comment chiffrer.
XedinUnknown
@XedinUnknown Ceci peut être utilisé pour les variables secrètes. Depuis le lien: "Par défaut, la valeur de ces nouvelles variables d'environnement est masquée de la ligne d'exportation dans les journaux. Cela correspond au comportement des variables chiffrées dans votre .travis.yml. Les variables sont stockées chiffrées dans nos systèmes, et être déchiffré lorsque le script de construction est généré. "
bmaupin
0

Utilisez un autre ensemble de clés API et procédez de la même manière. Votre boîte de travis est configurée pour votre exécution de construction, puis complètement démolie une fois votre construction terminée. Vous avez un accès root à votre boîte pendant la construction, vous pouvez donc en faire ce que vous voulez.

Markus
la source
4
Que voulez-vous dire par "faites-le de la même manière"? Je n'aime pas vraiment l'idée de stocker les clés API dans le référentiel lui-même (c'est-à-dire dans le fichier .travis.yml), mais il ne semble pas y avoir d'autre moyen de configurer les variables d'environnement sur travis.
BM5k du
La variable env sera chiffrée avec une clé publique, de sorte que seul le propriétaire de la clé secrète peut la déchiffrer. Vous ne devez pas utiliser de jeton important. Dans mon cas, j'ai utilisé celui que travis avait déjà pour GitHub. Cela a très bien fonctionné et à partir de github, je peux révoquer ce jeton chaque fois que je pense que le travis est un risque. Avoir le jeton chiffré dans mon repo ne me fait pas mal dormir. github.com/ecki/GCViewer/blob/topic-ciupload/.travis.yml
eckes