Birden çok github projesi için aynı dağıtım anahtarını kullanma


94

Github, aynı ssh dağıtım anahtarının birden fazla proje için kullanılmasına izin vermez; bu, bazı durumlarda çok yararlı olabilir (örneğin, özel alt modüllerle projeyle ilgilenen CI sunucusu). Bu sınırlamanın 'güvenlik nedenleriyle' var olduğunu söyleyen çeşitli konular gördüm, ancak henüz tam olarak hangi riski artıracağına dair ikna edici bir açıklama göremedim.

Github'ın Hesap Düzeyi anahtarlarının yeniden kullanılmasına izin vermemesinin mantıklı olduğunu unutmayın (iki kullanıcı anahtarları paylaşmamalıdır). Sorguladığım tek şey Anahtarları Dağıtma konusundaki kısıtlamadır .

Ve açık olmak gerekirse, geçici çözümler (sahte bir kullanıcı oluşturun, birden çok anahtar kullanın, ...) aramıyorum , ancak yalnızca Dağıtım Anahtarları üzerindeki bu sınırlama için makul bir açıklama için.

İlgili konular:


Daha iyi bir yol olmadığından, depolara salt okunur erişim verdiğimiz özel bir dağıtım kullanıcısı oluşturduk. Sonuç aynı.
Datageek

Yanıtlar:


22

Referans verdiğiniz geçici çözümle gösterilen tek neden (tek bir "derleme" kullanıcısı oluşturmak veya id_rsa.REPONAME.pubher depo için aynısını paylaşmak ):

farklı kullanıcı için genel / özel anahtarı paylaşmaktan kaçının

Sizin durumunuzda durum böyle olmasa da (birden fazla proje oluşturun), aynı ssh anahtarının yeniden kullanılmasına izin vermek, iki farklı kullanıcının aynı ssh anahtarını paylaşma olasılığını açar ve bu da kimlik doğrulama amacını ortadan kaldırır .

Kimlik doğrulama,
"belirli bir ssh anahtarının kullanılması, onu kimin kullandığını bilmeniz gerektiği anlamına gelmelidir" anlamına gelir .


GitHub sayfası " Dağıtım anahtarlarını yönetme " ssh kullanan çeşitli hesapların ayrıntılarını verir:

  • SSH aracı yönlendirme : Ajan yönlendirme, sunucunuza SSH girdiğinizde ve git komutlarını çalıştırdığınızda yerel geliştirme makinenizde zaten ayarlanmış olan SSH anahtarlarını kullanır.
    Uzak sunucuların, yerel ssh aracınıza, sunucuda çalışıyormuş gibi erişmesine izin verebilirsiniz.
    Bu nedenle, özel anahtarınızı sunucuda çoğaltmanıza gerek yok.

  • Makine kullanıcıları : (bu, "sahte hesap" stratejisidir) Anahtarı bir kullanıcı hesabına ekleyin. Bu hesap bir insan tarafından kullanılmayacağından, buna makine kullanıcısı denir.
    Bu kullanıcıya bir insan gibi davranırsınız, anahtarı normal bir hesapmış gibi makine kullanıcı hesabına ekleyin.
    Hesap ortak çalışanına veya ekibe, erişmesi gereken depolara erişim verin.
    Yani sunucu başına bir "makine kullanıcısı" ile ilişkilendirilmiş bir özel anahtar.

( DHA işaret yorumlarda bir dağıtma anahtar sınırı numarasına ve aslında yalnızca bir makine kullanıcı hesabı olabilir)

  • Sunucuda depolanan ve GitHub'daki tek bir depoya erişim izni veren anahtarı (GitHub deposu başına bir tane) SSH anahtarını dağıtın.
    Bu anahtar, bir kullanıcı hesabı yerine doğrudan depoya eklenir .
    Hesap ayarlarınıza gitmek yerine, hedef deponun yönetici sayfasına gidin.
    " Deploy Keys" Öğesine gidin ve " " öğesini tıklayın Add deploy key. Genel anahtarı yapıştırın ve gönderin.

Bu sefer, ssh anahtarı bir kullanıcıya değil (bunun için birkaç depoya erişim verebilirsiniz), ancak bir depoya eklenir. Birkaç depo
için ssh erişiminin verilmesi, "makine kullanıcısı" ile eşdeğer olacaktır.

Dönemi içinde kimlik doğrulama :

  • Aynı anahtarın birkaç depo için kullanılması, bir kullanıcı tarafından yapıldığında (hesabıyla ilişkili anahtarın olduğu söylenir) sorun değildir.
  • Birden fazla depo için aynı anahtarı kullanmak, anahtar bir depo tarafından eklendiğinde uygun DEĞİLDİR, çünkü kimin neye eriştiğini bilmiyorsunuz .
    Bu, bir "kullanıcı" nın birçok depo için ortak çalışan olarak bildirildiği "makine kullanıcısı" ndan farklıdır.
    Burada (Deploy anahtarı), "ortak çalışan" yoktur , yalnızca depoya verilen doğrudan bir ssh erişimi vardır.

53
GitHub, hem Hesap Düzeyinde genel anahtarları hem de Proje Düzeyindeki anahtarları (diğer adıyla Dağıtım Anahtarları) destekler. Hesap Düzeyi anahtarlarının yeniden kullanımına izin vermemek mantıklı, ancak Anahtarları Dağıtma için buna izin vermemenin sağlamadığını iddia ediyorum . Tek Hesap Düzeyi anahtarım tüm projelerime erişime izin veriyor, öyleyse neden bazı projelerime erişime izin veren bir Dağıtım Anahtarına sahip olamadım ? Bu sadece daha kısıtlayıcı ve görebildiğim kadarıyla herhangi bir endişe yaratmıyor. İki farklı kullanıcının aynı ssh anahtarını paylaşma olasılığını açma konusundaki endişeniz , bu senaryoda resimde görünmüyor.
David Ebbo

@DavidEbbo Resimde görünmeyebilir, ancak bu endişe (aynı ssh anahtarını paylaşacak iki farklı kullanıcı) bir ssh anahtarının paylaşılmamasının nedeninin merkezinde yer almaktadır.
VonC

21
Korkarım burada sizin gerekçenizi takip etmiyorum. Çok özel bir senaryo hakkında soru soruyorum (birden fazla projede bir Dağıtım Anahtarı kullanın) ve bunun mümkün olmadığına dair argümanınız ilgisiz bir senaryo ortaya çıkarmaktır (ssh anahtarlarını paylaşan iki kullanıcı). Yalnızca Anahtar Dağıtma senaryosuna bağlı kalınca, github'ın buna izin vermesinin olumsuz yönü nedir?
David Ebbo

6
@DavidEbbo help.github.com/articles/managing-deploy-keys'i takiben , üç yöntemden hiçbiri (Hesap, Dağıtım veya Makine hesapları), söz konusu depolara erişmek için özel bir SSH anahtarı paylaşmayı içermez . Yalnızca Deploy Key senaryosuna bağlı kalmak, sunucuda bir anahtar olduğundan, birkaç depoda geçerli olması için bir özel anahtarı birden çok depoda paylaşmak (veya çoğaltmak) anlamına gelir. Bu, kimlik doğrulama yönünü azaltır ve anahtarın güvenliği ihlal edilirse, açığa çıkan depoların sayısını artırır.
VonC

8
teşekkürler, bu sayfada ilginç bilgiler var. Başka hiçbir şey görmezsem cevabınızı bir veya iki gün içinde cevap olarak işaretleyeceğim, ancak dürüst olmak gerekirse, argümana hala ikna olmadım. İki depo üzerinde kullanılan bir dağıtım anahtarına sahip olmak, aynı depo setine erişimi olan bir makine anahtarı kullanmaktan daha zayıf değildir.
David Ebbo

11

Ne yazık ki bu, github'ın bir anahtar çifti ile bir hesap veya proje arasındaki farkı yanlış yorumladığı bir senaryodur.

Bir anahtar çifti kimlik doğrulama ve yetkilendirme için kullanıldığından, etkin bir kimliktir. Github hesapları başka bir kimliktir. Github hesaplarını anahtar çiftlerine bağlamak, github hesabına dayalı kimlikler ve anahtar çifti kimlikleri arasında etkili bir şekilde 1: N eşleme oluşturur.

Tersine, github anahtar çifti tabanlı kimlikler için projelerin 1: N eşlemesini zorlar. Gerçek dünya benzeri, projeye erişim sağlayan ve birçok farklı insan tarafından açılabilen bir kapı olmasıdır. Ancak herhangi biri kapının anahtarını aldığında, başka bir kapı için başka anahtar alamaz, bir daha asla.

Bir anahtarın ele geçirilmesi durumunda, ihlalleri içerme açısından anahtarları sık sık tekrar kullanmamak mantıklıdır. Ama bu sadece iyi bir yönetim politikası . Prensipte bir anahtarın birden fazla kullanılmasını engellemek pek mantıklı değil . Asla tekrar kullanılmayan bazı kapılar için bazı anahtarlar var, yine bu da politikaya bağlı .


Biraz daha karmaşık bir bakış açısı, anahtar çiftleri roller olarak göstermektir . Pek çok anahtar çiftine sahip olabilirsiniz ve bu nedenle birçok role sahip olabilirsiniz. Özel anahtar, rol için kimliğinizi doğrular.

Github'ın projelere anahtar eşlemesi dağıtması, bir rolün asla birden fazla görevi kapsamayacağını belirtir. Bu nadiren gerçekçi.

Elbette ki bunların hiçbiri github'ın izin verdiği şeyleri değiştirmez.


1
Heh. Kabul edilen cevaptan daha doğru olduğunda, bunun olumsuz oylanması biraz komik. Orada gerçekten hiçbir şey önler Birden fazla kullanıcılı bir tuşa paylaşımı olduğunu bunda.
Jens Finkhaeuser

2

Çıkarımları rasyonelleştirmek için çok düşündüm ve bu senaryoyu ürettim.

Birden çok depoya atadığınız bir kullanıcı için tek bir dağıtım anahtarı oluşturduğunuzu hayal edin. Şimdi bu anahtarı iptal etmek istiyorsunuz, ancak birden çok yerde kullanılıyor. Dolayısıyla, tüm erişimi iptal edebilmek yerine, yanlışlıkla yalnızca kısmi erişimi iptal edebilirsiniz.

Bu bir fayda gibi görünebilir, ancak insan faktörünü düşündüğünüzde bu çoka bir ilişki aslında doğası gereği güvensizdir. Bunun nedeni, her depoyu incelemeden tüm erişimi gerçekten iptal edip etmediğinizden emin olamamanız ve gerçekte nereye atadığınızı unuttuğunuz durumda her bir genel anahtarı ayrı ayrı karşılaştırmanızdır.

Bu kadar çok benzersiz anahtarı atamak ve yönetmek kesinlikle sinir bozucu ama GitHub'ın politikalarını nasıl oluşturduğuna dair güvenlik sonuçları açıktır: bir anahtarı iptal ettiğinizde, o anahtar tarafından verilen tüm erişimi iptal etme garantiniz olur çünkü anahtar yalnızca tek bir yerde kullanılır. .


1
Bu açıklamaya ikna olmadım. Bunun, bir kullanıcının birden çok depoya erişmesine izin vermekten temelde farkı nedir? Artık bu kullanıcıya güvenmiyorsanız, onları her depodan kaldırmanız gerekir.
David Ebbo

@David: How is that fundamentally different from allowing one user to access multiple repositories, which is obviously allowedBunu biraz daha açıklayabilir misin? Yalnızca bir Geliştirici hesabım var ve hesap çapında erişim için ssh anahtarları ekleyebileceğinizi (tüm depolar için bir anahtar) veya ayrı dağıtım anahtarları (her depo için bir anahtar) ekleyebileceğinizi görüyorum. Bu, "bir" anahtarının iptal edilmesinin her iki durumda da "tüm" erişimi iptal ettiği bire çok veya bire bir ilişkidir.
Zhro

Daha fazla açıklığa kavuşturmak gerekirse, erişimin iptal edildikten sonra başka bir yerde mevcut olabileceği çoka bir ilişkide yanlışlıkla bir anahtar atama fırsatı (ne söyleyebilirim) yoktur. Bu, GitHub'ın bu kısıtlama için motivasyonu gibi görünüyor, ancak ben sadece tahmin ediyorum.
Zhro

Şeylere bakma şeklim, anahtarları dağıtma biraz tam bir hesabı olmayan ancak yine de bir tür kimliği temsil eden 'anonim kullanıcılar' gibi. Aradaki fark, hesap durumunda, o hesaptaki tüm ssh anahtarlarına dolaylı olarak erişim sağlayan hesaba erişim vermenizdir . Anahtar Dağıtma durumunda, hesap soyutlamasını atlar ve doğrudan ssh anahtarına erişim izni verirsiniz. Ama bunun ötesinde, güvenlik ihtiyaçlarının farklı olduğunu görmüyorum. Hesap VEYA dağıtım anahtarının sahibi kötü olursa, bunları her depodan kaldırmanız gerekir.
David Ebbo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.