Verwenden von geheimen API-Schlüsseln auf Travis-CI

92

Ich würde gerne Travis-CI verwenden für eines meiner Projekte verwenden .

Das Projekt ist ein API-Wrapper, daher basieren viele Tests auf der Verwendung geheimer API-Schlüssel. Zum lokalen Testen speichere ich sie einfach als Umgebungsvariablen. Was ist ein sicherer Weg, um diese Schlüssel bei Travis zu verwenden?

user94154
quelle

Antworten:

99

Travis verfügt über eine Funktion zum Verschlüsseln von Umgebungsvariablen ( "Verschlüsseln von Umgebungsvariablen") ). Dies kann verwendet werden, um Ihre geheimen API-Schlüssel zu schützen. Ich habe dies erfolgreich für meinen Heroku-API-Schlüssel verwendet.

Alles was Sie tun müssen, ist das Travis Gem zu installieren, die gewünschte Zeichenfolge zu verschlüsseln und die verschlüsselte Zeichenfolge in Ihre zu integrieren .travis.yml. Die Verschlüsselung ist nur für ein Repository gültig. Der travisBefehl ruft Ihren öffentlichen Schlüssel für Ihr Repo ab und kann den String dann während des Builds entschlüsseln.

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

Dies gibt Ihnen die folgende Ausgabe:

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

  secure: "OrEeqU0z6GJdC6Sx/XI7AMiQ8NM9GwPpZkVDq6cBHcD6OlSppkSwm6JvopTR\newLDTdtbk/dxKurUzwTeRbplIEe9DiyVDCzEiJGfgfq7woh+GRo+q6+UIWLE\n3nowpI9AzXt7iBhoKhV9lJ1MROrnn4DnlKxAEUlHTDi4Wk8Ei/g="
Odi
quelle
12
Vergessen Sie nicht zu dokumentieren, welche Variablen Sie verwenden und warum, denn sobald sie verschlüsselt sind, kann sie nur jemand mit den Originalschlüsseln wiederherstellen.
Jerseyboy
2
Es sieht so aus, als ob neuere Versionen des Travis-Edelsteins es vorziehen, ihre Argumente in umgekehrter Reihenfolge zu haben: travis encrypt [args..] [options]dh Sie möchten dies tun travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo. Wenn Sie die Optionen an die erste Stelle und die zuletzt zu verschlüsselnden Daten setzen, wird eine Warnung angezeigt.
Jordan läuft
3
Mit der Option --add env.globalzum travisBefehl wird Ihre .travis.yml automatisch geändert.
Thomas
1
@ RamIdavalapati: Da die Geheimnisse verschlüsselt sind, gilt dies als sicher, ja.
Odi
1
@ Ramesh-X: Ja, da diese Verschlüsselung für TravisCI ist. Wenn jemand die Kontrolle über TravisCI hat, könnte er SECRET_ENV
Odi
7

nach diesem in travis ci Dokumentation ist es, dass:

Wenn Sie sowohl die Heroku- als auch die Travis CI-Befehlszeilenclients installiert haben, können Sie Ihren Schlüssel abrufen, verschlüsseln und zu Ihrer .travis.yml hinzufügen, indem Sie den folgenden Befehl aus Ihrem Projektverzeichnis ausführen:

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

Bezug zu nehmen folgende Tutorial Heroku Client entsprechend Ihrem Betriebssystem zu installieren

Espoir Murhabazi
quelle
Ich möchte nur überprüfen: Der Schlüssel, den er Ihrer Datei hinzufügt, kann sicher in die Versionskontrolle hochgeladen werden, oder?
Vapurrmaid
5

Sie können auch geheime Variablen in den Repository-Einstellungen definieren :

In den Repository-Einstellungen definierte Variablen sind für alle Builds gleich. Wenn Sie einen alten Build neu starten, werden die neuesten Werte verwendet. Diese Variablen stehen Gabeln nicht automatisch zur Verfügung.

Definieren Sie in den Repository-Einstellungen folgende Variablen:

  • unterscheiden sich pro Repository.
  • vertrauliche Daten enthalten, z. B. Anmeldeinformationen von Drittanbietern.

Um Variablen in den Repository-Einstellungen zu definieren, stellen Sie sicher, dass Sie angemeldet sind, navigieren Sie zum betreffenden Repository, wählen Sie "Einstellungen" aus dem Zahnradmenü und klicken Sie im Abschnitt "Umgebungsvariablen" auf "Neue Variable hinzufügen".

pomber
quelle
1
Ich habe nicht verstanden, wie man geheime Variablen erstellt. Wenn Sie das googeln, erklären die Ergebnisse, wie man verschlüsselt.
XedinUnknown
@XedinUnknown Dies kann für geheime Variablen verwendet werden. Über den Link: "Standardmäßig ist der Wert dieser neuen Umgebungsvariablen in den Protokollen in der Exportzeile ausgeblendet. Dies entspricht dem Verhalten verschlüsselter Variablen in Ihrer .travis.yml. Die Variablen werden in unseren Systemen verschlüsselt gespeichert werden entschlüsselt, wenn das Build-Skript generiert wird. "
Bmaupin
0

Verwenden Sie einen anderen Satz von API-Schlüsseln und machen Sie es auf die gleiche Weise. Ihre Travis-Box wird für Ihren Build-Lauf eingerichtet und nach Abschluss Ihres Builds wieder vollständig abgerissen. Sie haben während des Builds Root-Zugriff auf Ihre Box, sodass Sie damit tun können, was Sie wollen.

Markus
quelle
4
Was meinst du mit "mach es genauso"? Ich mag die Idee, API-Schlüssel im Repo selbst (dh in der Datei .travis.yml) zu speichern, nicht wirklich, aber es scheint keine andere Möglichkeit zu geben, Umgebungsvariablen auf Travis zu konfigurieren.
BM5k
Die env-Variable wird mit einem öffentlichen Schlüssel verschlüsselt, sodass nur der Besitzer des geheimen Schlüssels ihn entschlüsseln kann. Sie sollten kein wichtiges Token verwenden. In meinem Fall habe ich die verwendet, die Travis bereits für GitHub hatte. Dies hat ganz gut funktioniert und innerhalb von Github kann ich dieses Token widerrufen, wenn ich der Meinung bin, dass Travis ein Risiko darstellt. Wenn ich das verschlüsselte Token in meinem Repo habe, schlafe ich nicht schlecht.github.com/ecki/GCViewer/blob/topic-ciupload/.travis.yml
eckes