Menggunakan kunci api rahasia di travis-ci

92

Saya ingin menggunakan travis-ci untuk salah satu proyek saya .

Proyek ini adalah pembungkus API, sehingga banyak pengujian mengandalkan penggunaan kunci API rahasia. Untuk menguji secara lokal, saya hanya menyimpannya sebagai variabel lingkungan. Apa cara yang aman untuk menggunakan kunci tersebut di Travis?

pengguna94154
sumber

Jawaban:

99

Travis memiliki fitur untuk mengenkripsi variabel lingkungan ( "Mengenkripsi variabel lingkungan" ). Ini dapat digunakan untuk melindungi kunci API rahasia Anda. Saya telah berhasil menggunakan ini untuk kunci API Heroku saya.

Yang harus Anda lakukan adalah menginstal travis gem, mengenkripsi string yang Anda inginkan dan menambahkan string terenkripsi di file .travis.yml. Enkripsi hanya berlaku untuk satu repositori. The travisperintah mendapat kunci publik Anda untuk repo Anda dan kemudian dapat mendekripsi string selama membangun.

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

Ini memberi Anda output berikut:

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

  secure: "OrEeqU0z6GJdC6Sx/XI7AMiQ8NM9GwPpZkVDq6cBHcD6OlSppkSwm6JvopTR\newLDTdtbk/dxKurUzwTeRbplIEe9DiyVDCzEiJGfgfq7woh+GRo+q6+UIWLE\n3nowpI9AzXt7iBhoKhV9lJ1MROrnn4DnlKxAEUlHTDi4Wk8Ei/g="
Odi
sumber
12
Jangan lupa untuk mendokumentasikan variabel apa yang Anda gunakan, dan mengapa, karena setelah mengenkripsi mereka hanya seseorang dengan kunci asli yang dapat memulihkannya.
jerseyboy
2
Sepertinya versi baru dari permata Travis lebih suka argumen mereka dalam urutan yang berlawanan:, travis encrypt [args..] [options]yaitu Anda pasti ingin melakukannya travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo. Menempatkan opsi terlebih dahulu dan data yang akan dienkripsi terakhir menampilkan peringatan.
Jordan Tayang
3
Dengan opsi --add env.globaluntuk travisperintah, itu akan mengubah .travis.yml Anda secara otomatis.
Thomas
1
@RamIdavalapati: karena rahasianya dienkripsi, ini dianggap aman, ya.
Odi
1
@ Ramesh-X: ya karena enkripsi ini untuk TravisCI. Jika seseorang memiliki kendali atas TravisCI, mereka dapat memperoleh SECRET_ENV
Odi
7

menurut ini dalam dokumentasi travis ci dikatakan bahwa:

Jika Anda menginstal klien baris perintah Heroku dan Travis CI, Anda bisa mendapatkan kunci Anda, mengenkripsinya, dan menambahkannya ke .travis.yml Anda dengan menjalankan perintah berikut dari direktori proyek Anda:

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

lihat tutorial berikut untuk menginstal klien heroku sesuai dengan OS Anda

Espoir Murhabazi
sumber
Saya hanya ingin memverifikasi: kunci yang ditambahkan ke file Anda aman untuk diunggah ke kontrol versi, bukan?
vapurrmaid
5

Anda juga dapat menentukan variabel rahasia dalam pengaturan repositori :

Variabel yang ditentukan dalam setelan repositori sama untuk semua build, dan saat Anda memulai ulang build lama, ini menggunakan nilai terbaru. Variabel ini tidak tersedia secara otomatis untuk garpu.

Tentukan variabel dalam Pengaturan Repositori yang:

  • berbeda per repositori.
  • berisi data sensitif, seperti kredensial pihak ketiga.

Untuk menentukan variabel dalam Pengaturan Repositori, pastikan Anda masuk, navigasi ke repositori yang dimaksud, pilih "Pengaturan" dari menu roda gigi, dan klik "Tambahkan variabel baru" di bagian "Variabel Lingkungan".

pomber
sumber
1
Tidak mengerti cara membuat variabel rahasia . Saat googling itu, hasilnya menjelaskan cara mengenkripsi.
XedinUnknown
@XedinUnknown Ini dapat digunakan untuk variabel rahasia. Dari tautan: "Secara default, nilai variabel lingkungan baru ini disembunyikan dari baris ekspor di log. Ini sesuai dengan perilaku variabel terenkripsi di .travis.yml Anda. Variabel disimpan terenkripsi di sistem kami, dan didekripsi saat skrip build dibuat. "
bmaupin
0

Gunakan sekumpulan kunci API yang berbeda dan lakukan dengan cara yang sama. Kotak travis Anda akan disiapkan untuk proses build Anda dan kemudian dihancurkan lagi setelah build Anda selesai. Anda memiliki akses root ke kotak Anda selama pembuatan, sehingga Anda dapat melakukan apa pun yang Anda inginkan dengannya.

markus
sumber
4
Apa yang Anda maksud dengan "lakukan dengan cara yang sama"? Saya tidak terlalu menyukai gagasan untuk menyimpan kunci API di repo itu sendiri (yaitu dalam file .travis.yml), tetapi tampaknya tidak ada cara lain untuk mengonfigurasi variabel lingkungan di travis.
BM5k
Variabel env akan dienkripsi dengan kunci publik, jadi hanya pemilik kunci rahasia yang dapat mendekripsinya. Anda tidak boleh menggunakan token penting. Dalam kasus saya, saya menggunakan salah satu yang sudah dimiliki travis untuk GitHub. Ini bekerja dengan cukup baik dan dari dalam github saya dapat mencabut token itu setiap kali saya merasa travis berisiko. Memiliki token terenkripsi di repo saya tidak membuat saya tidur nyenyak. github.com/ecki/GCViewer/blob/topic-ciupload/.travis.yml
eckes