Topik temu duga representatif

Temu Duga Backend: Bagaimanakah anda akan menjamin keselamatan aliran kerja GitHub Actions yang boleh diguna semula?

BackendSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Bagaimanakah anda akan menjamin keselamatan aliran kerja GitHub Actions yang boleh diguna semula?

Prompt dan kes penggunaan

Pasukan anda mengekstrak langkah binaan, ujian dan pelepasan ke dalam aliran kerja boleh diguna semula yang dikongsi merentas repositori. Reka kontrak untuk input, output, rahsia, kebenaran GITHUB_TOKEN dan rujukan versi antara aliran kerja pemanggil dan yang dipanggil. Terangkan cara anda mencegah peningkatan keistimewaan, hanyutan rantaian bekalan dan kekeliruan konteks.

Perkara yang diuji oleh penemu duga

  • Sama ada anda memahami bahawa aliran kerja boleh diguna semula dipanggil pada tahap kerja (job), bukan sebagai langkah biasa.
  • Sama ada anda boleh menerangkan bahawa kebenaran GITHUB_TOKEN pemanggil hanya boleh diturunkan oleh aliran kerja yang dipanggil, bukan ditingkatkan.
  • Sama ada anda meminimumkan pendedahan secrets, pemboleh ubah persekitaran dan konteks github.
  • Sama ada anda mengendalikan had persarangan, had panggilan, penetapan rujukan (pinning) dan dasar organisasi.

Soalan untuk dijelaskan sebelum menjawab

  • Adakah penggunaan semula merentas repositori, merentas organisasi atau dalam satu repositori, dan dasar keterlihatan mana yang terpakai?
  • Adakah aliran kerja yang dipanggil hanya membina artifak, atau adakah ia boleh menggunakan (deploy), melepaskan atau menulis semula ke repositori?
  • Adakah rahsia dihantar secara individu, diwarisi pada skop organisasi atau dilindungi oleh peraturan persekitaran?
  • Patutkah peningkatan menjejaki cawangan, tag pelepasan atau rujukan komit tidak boleh ubah?

Rangka kerja jawapan 30 saat

Saya akan mentakrifkan antara muka yang sempit: workflow_call mengisytiharkan input bertaip, rahsia individu dan output yang diperlukan; kerja pemanggil menetapkan permissions minimum, dan aliran kerja yang dipanggil mengetatkannya semula. Aliran kerja pelepasan dan binaan kekal berasingan, manakala persekitaran yang dilindungi mengawal penggunaan sensitif. Rujukan menggunakan komit yang disemak atau tag terkawal, dan dasar organisasi mengehadkan tindakan serta aliran kerja boleh diguna semula yang dibenarkan. Akhir sekali, log audit, tingkah laku larian semula dan ujian regresi kebenaran mengesahkan kontrak tersebut.

Analisis mendalam langkah demi langkah

1. Sempadan aliran kerja boleh diguna semula

Aliran kerja boleh diguna semula dicetuskan oleh workflow_call, dan pemanggil menggunakan uses pada sesuatu kerja. Kerja memanggil dihadkan kepada kunci yang didokumentasikan seperti with, secrets, permissions, strategy dan needs; ia bukan langkah biasa di mana perintah sewenang-wenangnya boleh disuntik.

2. Input, output dan kekangan jenis

Isytiharkan input yang diperlukan, lalai dan jenis dalam aliran kerja yang dipanggil supaya kontrak pemanggil yang tidak sah gagal semasa penghuraian. Dedahkan hanya ringkasan artifak, versi atau status keputusan yang diperlukan oleh automasi pelepasan; jangan sekali-kali mengembalikan token, log penuh atau laluan dalaman.

3. Hantar rahsia secara individu

Utamakan pemetaan secrets yang jelas yang menghantar hanya kelayakan yang diperlukan untuk satu tindakan penggunaan. secrets: inherit menghantar semua rahsia yang tersedia kepada pemanggil dan boleh memadankan kes organisasi yang sama yang terikat ketat, tetapi ia memperluas permukaan audit dan kebocoran serta harus dielakkan merentasi sempadan kepercayaan.

4. Menurunkan kebenaran GITHUB_TOKEN

Kerja pemanggil harus mengisytiharkan permissions secara eksplisit, seperti akses sumber baca sahaja ditambah penulisan artifak. Dokumen GitHub menyatakan bahawa kebenaran yang diwarisi oleh aliran kerja yang dipanggil boleh kekal sama atau menjadi lebih terhad, tidak sekali-kali menjadi lebih berkuasa. Oleh itu, tindakan berkeistimewaan tinggi memerlukan pemberian eksplisit dalam pemanggil dan rasional semakan yang direkodkan.

5. Pemilikan konteks github

Konteks github di dalam aliran kerja yang dipanggil dikaitkan dengan aliran kerja pemanggil. Jangan anggap cawangan, peristiwa atau kebenaran repositori yang dipanggil menggantikan maklumat pemanggil. Jika repositori sumber, komit atau identiti pelaku diperlukan, hantarkannya secara eksplisit dan redaksinya dalam log di mana sesuai.

6. Rujukan dan hanyutan rantaian bekalan

Aliran kerja boleh merujuk cawangan, tag atau komit. Cawangan bergerak dan tag boleh disasarkan semula; laluan pengeluaran harus menggunakan komit tidak boleh ubah yang disemak atau dasar organisasi yang mengehadkan rujukan yang boleh diterima. Dasar GitHub Actions juga boleh memerlukan SHA komit panjang penuh untuk tindakan dan mengehadkan sumber yang dibenarkan.

7. Persarangan, matriks dan keserentakan

Aliran kerja boleh diguna semula yang bersarang boleh mencapai sepuluh peringkat, dan satu fail aliran kerja boleh menyambungkan paling banyak lima puluh aliran kerja boleh diguna semula yang unik. Matriks boleh memanggil aliran kerja boleh diguna semula, tetapi setiap gabungan memerlukan had sumber, kumpulan keserentakan dan dasar pembatalan untuk mengelakkan pelepasan pendua atau pembatalan bersama.

8. Pengauditan, larian semula dan pengunduran (rollback)

Rekod repositori pemanggil, komit, ringkasan input, pengisytiharan kebenaran dan ringkasan artifak. Menjalankan semula semua kerja boleh menyelesaikan rujukan sekali lagi, manakala menjalankan semula kerja yang gagal boleh menggunakan komit percubaan pertama, jadi rekod audit mesti mengandungi versi yang sebenarnya diselesaikan. Pengunduran beralih kepada rujukan yang disahkan dan membatalkan kebenaran persekitaran yang dilindungi.

Pertukaran (trade-off) dan sempadan

  • inherit mengurangkan konfigurasi tetapi menjadikan sempadan rahsia tersirat; platform merentas organisasi atau berbilang penyewa harus memetakan rahsia secara eksplisit.
  • Menetapkan komit meningkatkan kebolehulangan, tetapi peningkatan memerlukan kemas kini automatik, semakan dan tempoh pengunduran.
  • Membungkus penggunaan ke dalam aliran kerja generik menghapuskan pertindihan tetapi boleh menyembunyikan perlindungan persekitaran; penggunaan pengeluaran harus memastikan sempadan kelulusan kelihatan.
  • Kebenaran token membenarkan API; ia tidak menjadikan fail pelari, rangkaian atau tindakan pihak ketiga boleh dipercayai. Kod yang tidak dipercayai masih memerlukan pengasingan.

Pelan pelaksanaan dan bukti

  1. Tulis kontrak input, output dan rahsia individu workflow_call, dengan menolak medan yang tidak diisytiharkan.
  2. Hasilkan matriks kebenaran bagi setiap kerja pemanggil dan sahkan bahawa aliran kerja yang dipanggil tidak boleh meningkatkan GITHUB_TOKEN.
  3. Tetapkan rujukan pengeluaran kepada komit yang disemak, konfigurasikan senarai izin organisasi dan semak dasar SHA.
  4. Laksanakan latihan permintaan tarik (pull-request), merentas repositori, bersarang dan larian semula dengan rahsia palsu dan repositori terhad.
  5. Semak pelaksanaan terhadap dokumentasi guna-semula-aliran-kerja, sintaks-aliran-kerja dan tetapan-Actions GitHub.

Kesilapan lazim dan soalan susulan

Kesilapan 1: Menganggap aliran kerja boleh diguna semula sebagai langkah tindakan

Ia dipanggil pada tahap kerja dengan set medan dan konteks yang berbeza. Menyalin sintaks langkah secara langsung boleh gagal dalam penghuraian atau mewujudkan andaian kebenaran yang salah.

Kesilapan 2: Menggunakan secrets.inherit secara lalai

Pewarisan memberikan aliran kerja yang dipanggil setiap rahsia yang boleh diakses oleh pemanggil. Melainkan sempadan kepercayaan dan skop organisasi adalah eksplisit, hantar rahsia secara individu.

Kesilapan 3: Menetapkan kebenaran tinggi hanya dalam aliran kerja yang dipanggil

Aliran kerja yang dipanggil tidak boleh meningkatkan token pemanggil. Keistimewaan tinggi mesti diisytiharkan dalam kerja pemanggil dan dijustifikasikan melalui semakan dan audit.

Soalan susulan: Mengapakah rujukan tag masih berisiko?

Tag boleh bergerak, jadi larian semula atau pelaksanaan kemudian mungkin menyelesaikan komit yang berbeza. Pengeluaran harus menetapkan komit yang disemak atau mengehadkan rujukan yang dibenarkan dengan dasar organisasi.

Soalan susulan: Bagaimanakah anda membuktikan rahsia tidak dibocorkan?

Jalankan laluan penuh dengan rahsia palsu dan keistimewaan paling rendah, periksa log, output, artifak dan laluan ralat, serta audit akses baca inherit, pemboleh ubah persekitaran dan tindakan pihak ketiga.

Sumber awam

Soalan berkaitan