Używanie tajnych kluczy API w travis-ci

92

Chciałbym użyć travis-ci do jednego z moich projektów .

Projekt jest opakowaniem API, więc wiele testów opiera się na użyciu tajnych kluczy API. Aby przetestować lokalnie, po prostu przechowuję je jako zmienne środowiskowe. Jaki jest bezpieczny sposób używania tych kluczy na Travisie?

user94154
źródło

Odpowiedzi:

99

Travis ma funkcję szyfrowania zmiennych środowiskowych ( „Szyfrowanie zmiennych środowiskowych” ). Może to służyć do ochrony twoich tajnych kluczy API. Z powodzeniem użyłem tego dla mojego klucza Heroku API.

Wszystko, co musisz zrobić, to zainstalować klejnot Travis, zaszyfrować żądany ciąg i dodać zaszyfrowany ciąg do pliku .travis.yml. Szyfrowanie jest ważne tylko dla jednego repozytorium. travisKomenda dostanie swój klucz publiczny do repo i może odszyfrować ciąg podczas kompilacji.

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

Daje to następujące wyniki:

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

  secure: "OrEeqU0z6GJdC6Sx/XI7AMiQ8NM9GwPpZkVDq6cBHcD6OlSppkSwm6JvopTR\newLDTdtbk/dxKurUzwTeRbplIEe9DiyVDCzEiJGfgfq7woh+GRo+q6+UIWLE\n3nowpI9AzXt7iBhoKhV9lJ1MROrnn4DnlKxAEUlHTDi4Wk8Ei/g="
Odi
źródło
12
Nie zapomnij udokumentować, jakich zmiennych używasz i dlaczego, ponieważ po zaszyfrowaniu tylko ktoś z oryginalnymi kluczami może je odzyskać.
jerseyboy
2
Wygląda na to, że nowsze wersje perełki Travisa wolą mieć argumenty w odwrotnej kolejności: travis encrypt [args..] [options]tj. Będziesz chciał to zrobić travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo. Ustawienie opcji na pierwszym miejscu, a danych do zaszyfrowania na końcu powoduje wyświetlenie ostrzeżenia.
Jordan Bieganie
3
Z opcją --add env.globaldo travispolecenia, to zmieniają swój .travis.yml automatycznie.
Thomas
1
@RamIdavalapati: ponieważ sekrety są zaszyfrowane, jest to uważane za bezpieczne, tak.
Odi
1
@ Ramesh-X: tak, ponieważ to szyfrowanie jest przeznaczone dla TravisCI. Jeśli ktoś ma kontrolę nad TravisCI, może uzyskać SECRET_ENV
Odi
7

zgodnie z tym w dokumentacji Travis ci jest powiedziane, że:

Jeśli masz zainstalowanych klientów wiersza poleceń Heroku i Travis CI, możesz uzyskać swój klucz, zaszyfrować go i dodać do swojego pliku .travis.yml, uruchamiając następujące polecenie z katalogu projektu:

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

zapoznaj się z poniższym samouczkiem, aby zainstalować klienta heroku zgodnie z Twoim systemem operacyjnym

Espoir Murhabazi
źródło
Chcę tylko sprawdzić: klucz, który dodaje do twojego pliku, można bezpiecznie przesłać do kontroli wersji, prawda?
vapurrmaid
5

Możesz także zdefiniować tajne zmienne w ustawieniach repozytorium :

Zmienne zdefiniowane w ustawieniach repozytorium są takie same dla wszystkich kompilacji, a po ponownym uruchomieniu starej kompilacji używa ona najnowszych wartości. Te zmienne nie są automatycznie dostępne dla wideł.

Zdefiniuj zmienne w ustawieniach repozytorium, które:

  • różnią się w zależności od repozytorium.
  • zawierają poufne dane, takie jak poświadczenia stron trzecich.

Aby zdefiniować zmienne w ustawieniach repozytorium, upewnij się, że jesteś zalogowany, przejdź do odpowiedniego repozytorium, wybierz „Ustawienia” z menu zębatego i kliknij „Dodaj nową zmienną” w sekcji „Zmienne środowiskowe”.

pomber
źródło
1
Nie rozumiem, jak tworzyć tajne zmienne. Wyniki wyszukiwania w Google wyjaśniają, jak szyfrować.
XedinUnknown
@XedinUnknown Można tego użyć dla tajnych zmiennych. Z linku: „Domyślnie wartość tych nowych zmiennych środowiskowych jest ukryta w linii eksportu w dziennikach. Odpowiada to zachowaniu zaszyfrowanych zmiennych w pliku .travis.yml. Zmienne są przechowywane w postaci zaszyfrowanej w naszych systemach i zostaną odszyfrowane podczas generowania skryptu kompilacji. "
bmaupin
0

Użyj innego zestawu kluczy API i zrób to w ten sam sposób. Twoje pudełko Travis zostanie skonfigurowane do uruchomienia kompilacji, a następnie całkowicie zburzone po zakończeniu kompilacji. Masz uprawnienia roota do swojego pudełka podczas kompilacji, więc możesz z nim zrobić, co chcesz.

markus
źródło
4
Co masz na myśli mówiąc „zrób to w ten sam sposób”? Nie podoba mi się pomysł przechowywania kluczy API w samym repozytorium (tj. W pliku .travis.yml), ale wydaje się, że nie ma innego sposobu konfigurowania zmiennych środowiskowych w travisie.
BM5k,
Zmienna env zostanie zaszyfrowana kluczem publicznym, więc tylko właściciel tajnego klucza może ją odszyfrować. Nie powinieneś używać ważnego tokena. W moim przypadku użyłem tego, który Travis już miał dla GitHuba. To zadziałało całkiem nieźle i z poziomu github mogę odwołać ten token, gdy uznam, że Travis jest zagrożeniem. Posiadanie zaszyfrowanego tokena w repozytorium nie sprawia, że ​​śpię źle. github.com/ecki/GCViewer/blob/topic-ciupload/.travis.yml
eckes