Github tidak mengizinkan kunci penerapan ssh yang sama digunakan untuk lebih dari satu proyek, yang akan sangat berguna dalam beberapa kasus (misalnya, server CI yang menangani proyek dengan sub-modul pribadi). Saya telah melihat berbagai utas yang tampaknya mengatakan bahwa batasan ini ada karena 'alasan keamanan', tetapi saya belum melihat penjelasan yang meyakinkan tentang risiko apa yang akan meningkat.
Perhatikan bahwa fakta bahwa Github tidak mengizinkan kunci Tingkat Akun digunakan kembali masuk akal (dua pengguna tidak boleh berbagi kunci). Hanya batasan pada Deploy Keys yang saya pertanyakan.
Dan untuk memperjelas, saya tidak mencari solusi (buat pengguna dummy, gunakan banyak kunci, ...), tetapi hanya untuk penjelasan yang masuk akal untuk batasan pada Deploy Keys ini.
Utas terkait:
- Salah satu menunjukkan solusi
- Seseorang membahas masalah tetapi tidak benar-benar ke mana-mana
Jawaban:
Satu-satunya alasan, yang diilustrasikan oleh solusi yang Anda rujuk (membuat satu pengguna "build", atau berbagi yang sama
id_rsa.REPONAME.pub
per repo) adalah:hindari berbagi kunci publik / pribadi untuk pengguna yang berbeda
Meskipun itu tidak akan terjadi dalam situasi Anda (membangun beberapa proyek), mengizinkan untuk menggunakan kembali kunci ssh yang sama akan membuka kemungkinan bagi dua pengguna yang berbeda untuk berbagi kunci ssh yang sama, yang akan menggagalkan tujuan otentikasi .
Otentikasi berarti:
"menggunakan kunci ssh tertentu harus menyiratkan bahwa Anda seharusnya tahu siapa yang menggunakannya".
Halaman GitHub " Mengelola kunci penerapan " merinci berbagai akun menggunakan ssh:
Penerusan agen SSH : Penerusan agen menggunakan kunci SSH yang sudah disiapkan di mesin pengembangan lokal Anda saat Anda masuk ke server SSH dan menjalankan perintah git.
Anda dapat secara selektif membiarkan server jarak jauh mengakses ssh-agent lokal Anda seolah-olah itu berjalan di server.
Jadi tidak perlu mereplikasi kunci pribadi Anda di server.
Pengguna mesin : (ini adalah strategi "akun dummy") Lampirkan kunci ke akun pengguna. Karena akun ini tidak akan digunakan oleh manusia, ini disebut pengguna mesin.
Anda akan memperlakukan pengguna ini dengan cara yang sama seperti Anda memperlakukan manusia, lampirkan kunci ke akun pengguna mesin seolah-olah itu adalah akun biasa.
Berikan akses tim atau kolaborator akun ke repositori yang diperlukan aksesnya.
Jadi satu kunci pribadi yang terkait dengan satu "pengguna mesin", satu kunci per server.
( DHa menunjukkan di komentar ke nomor batas kunci penerapan, dan fakta Anda hanya dapat memiliki satu akun pengguna mesin)
Kunci ini dilampirkan langsung ke repo, bukan ke akun pengguna .
Alih-alih membuka pengaturan akun Anda, buka halaman admin target repo.
Buka "
Deploy Keys
" dan klik "Add deploy key
". Tempel kunci publik dan kirim.Kali ini, kunci ssh tidak dilampirkan ke pengguna (di mana Anda dapat memberikan akses ke beberapa repo), tetapi ke satu repo.
Memberikan akses ssh untuk beberapa repo sama dengan "pengguna mesin".
Dalam hal otentikasi :
Itu berbeda dari "pengguna mesin" di mana "pengguna" dinyatakan sebagai kolaborator untuk banyak repo.
Di sini (Deploy key), tidak ada "kolaborator" , hanya akses ssh langsung yang diberikan ke repo.
sumber
Sayangnya, ini adalah skenario di mana github salah menafsirkan perbedaan antara pasangan kunci dan akun atau proyek.
Karena pasangan kunci digunakan untuk otentikasi dan otorisasi, ini secara efektif merupakan identitas. Akun Github adalah identitas lain. Menghubungkan akun github ke pasangan kunci secara efektif membuat pemetaan 1: N antara identitas berbasis akun github dan identitas pasangan kunci.
Sebaliknya, github memberlakukan pemetaan proyek 1: N ke identitas berbasis pasangan kunci. Analog dunia nyata adalah bahwa ada pintu yang memberikan akses ke proyek yang dapat dibuka oleh banyak orang yang berbeda. Tapi begitu salah satu dari mereka mendapatkan kunci pintu, mereka tidak bisa mendapatkan kunci lain untuk pintu lain, selamanya.
Masuk akal untuk tidak menggunakan kembali kunci sesering mungkin dari perspektif berisi pelanggaran jika sebuah kunci dikompromikan. Tapi itu hanya kebijakan administrasi yang baik . Tidaklah masuk akal untuk mencegah kunci digunakan lebih dari sekali pada prinsipnya . Bahwa ada beberapa kunci untuk beberapa pintu yang tidak pernah digunakan kembali, sekali lagi itu tergantung kebijakan .
Pandangan yang sedikit lebih kompleks adalah mengilustrasikan pasangan kunci sebagai peran . Anda dapat memiliki banyak pasangan kunci, dan karenanya menjalankan banyak peran. Kunci pribadi mengautentikasi Anda untuk peran tersebut.
Pemetaan kunci penerapan Github ke proyek menyatakan bahwa suatu peran tidak pernah dapat mencakup lebih dari satu tugas. Itu jarang realistis.
Tidak ada yang mengubah apa yang diizinkan oleh github, tentu saja.
sumber
Saya butuh banyak pemikiran untuk merasionalisasi implikasinya dan menghasilkan skenario ini.
Bayangkan Anda membuat satu kunci penerapan untuk pengguna yang telah Anda tetapkan ke beberapa repositori. Sekarang Anda ingin mencabut kunci itu tetapi digunakan di banyak tempat. Jadi, alih-alih dapat mencabut semua akses, Anda mungkin secara tidak sengaja hanya mencabut sebagian akses.
Ini mungkin terdengar seperti keuntungan tetapi hubungan banyak-ke-satu ini sebenarnya secara inheren tidak aman setelah Anda mempertimbangkan faktor manusia. Ini karena Anda tidak dapat mengetahui dengan pasti apakah Anda benar-benar telah mencabut semua akses tanpa memeriksa setiap repositori dan membandingkan setiap kunci publik secara individual jika Anda lupa di mana Anda sebenarnya menetapkannya.
Jelas membuat frustasi untuk menetapkan dan mengelola begitu banyak kunci unik tetapi implikasi keamanannya jelas dengan bagaimana GitHub telah melembagakan kebijakan mereka: ketika Anda mencabut kunci, Anda dijamin akan mencabut semua akses yang diberikan oleh kunci itu karena hanya digunakan di satu tempat .
sumber
How is that fundamentally different from allowing one user to access multiple repositories, which is obviously allowed
Bisakah Anda menjelaskan ini lebih lanjut? Saya hanya memiliki akun Pengembang dan saya melihat bahwa Anda dapat menambahkan kunci ssh untuk akses seluruh akun (satu kunci untuk semua repositori) atau menambahkan kunci penerapan individu (satu kunci untuk setiap repositori). Ini masih merupakan hubungan satu-ke-banyak atau satu-ke-satu di mana mencabut kunci "satu" akan mencabut akses "semua" dalam kedua kasus.