Github erlaubt nicht, dass derselbe SSH-Bereitstellungsschlüssel für mehr als ein Projekt verwendet wird, was in einigen Fällen sehr nützlich wäre (z. B. CI-Server, der sich mit Projekten mit privaten Submodulen befasst). Ich habe verschiedene Threads gesehen, die zu sagen scheinen, dass diese Einschränkung aus "Sicherheitsgründen" besteht, aber ich muss noch eine überzeugende Erklärung darüber finden, welches Risiko dies genau bedeuten würde.
Beachten Sie, dass die Tatsache , dass Github nicht zulässt , dass Kontoebene Tasten macht Sinn wiederverwendet werden (zwei Benutzer sollten Schlüssel nicht teilen). Es ist nur die Einschränkung für Bereitstellungsschlüssel , die ich in Frage stelle.
Um es klar auszudrücken , suche ich nicht nach Problemumgehungen (Erstellen eines Dummy-Benutzers, Verwenden mehrerer Schlüssel, ...), sondern nur nach einer plausiblen Erklärung für diese Einschränkung bei der Bereitstellung von Schlüsseln.
Verwandte Themen:
- Eine zeigt eine Problemumgehung
- Einer , der das Thema bespricht, aber nicht wirklich irgendwohin geht
Antworten:
Der einzige Grund, der durch die Problemumgehung veranschaulicht wird, auf die Sie verweisen (Erstellen eines einzelnen "Build" -Benutzers oder Freigeben desselben
id_rsa.REPONAME.pub
pro Repo), ist:Vermeiden Sie es, öffentliche / private Schlüssel für andere Benutzer freizugeben
Auch wenn dies in Ihrer Situation nicht der Fall wäre (mehrere Projekte erstellen), würde die Wiederverwendung desselben SSH-Schlüssels die Möglichkeit für zwei verschiedene Benutzer eröffnen, denselben SSH-Schlüssel gemeinsam zu nutzen, wodurch der Authentifizierungszweck zunichte gemacht würde.
Authentifizierung bedeutet:
"Die Verwendung eines bestimmten SSH-Schlüssels sollte bedeuten, dass Sie wissen müssen, wer ihn verwendet."
Auf der GitHub-Seite " Verwalten von Bereitstellungsschlüsseln " werden die verschiedenen Konten mit ssh beschrieben:
SSH-Agentenweiterleitung : Die Agentenweiterleitung verwendet die SSH-Schlüssel, die bereits auf Ihrem lokalen Entwicklungscomputer eingerichtet wurden, wenn Sie SSH auf Ihrem Server durchführen und Git-Befehle ausführen.
Sie können Remoteserver selektiv auf Ihren lokalen SSH-Agenten zugreifen lassen, als ob er auf dem Server ausgeführt würde.
Sie müssen Ihren privaten Schlüssel also nicht auf dem Server replizieren.
Maschinenbenutzer : (Dies ist die Strategie "Dummy-Konto") Hängen Sie den Schlüssel an ein Benutzerkonto an. Da dieses Konto nicht von einem Menschen verwendet wird, wird es als Maschinenbenutzer bezeichnet.
Sie würden diesen Benutzer genauso behandeln wie einen Menschen. Fügen Sie den Schlüssel dem Maschinenbenutzerkonto hinzu, als wäre es ein normales Konto.
Gewähren Sie dem Account-Mitarbeiter oder dem Team Zugriff auf die Repos, auf die er Zugriff benötigt.
Also ein privater Schlüssel, der einem "Maschinenbenutzer" zugeordnet ist, einer pro Server.
( DHa weist in den Kommentaren auf eine Bereitstellungsschlüssel- Limitnummer und die Tatsache hin, dass Sie nur ein Maschinenbenutzerkonto haben können.)
Dieser Schlüssel wird direkt an das Repo anstatt an ein Benutzerkonto angehängt .
Wechseln Sie nicht zu Ihren Kontoeinstellungen, sondern zur Administrationsseite des Ziel-Repos.
Gehen Sie zu "
Deploy Keys
" und klicken Sie auf "Add deploy key
". Fügen Sie den öffentlichen Schlüssel ein und senden Sie ihn ab.Diesmal ist der SSH-Schlüssel nicht an einen Benutzer gebunden (für den Sie Zugriff auf mehrere Repos gewähren können), sondern an ein Repo.
Das Gewähren des SSH-Zugriffs für mehrere Repos wäre das Äquivalent eines "Maschinenbenutzers".
In Bezug auf die Authentifizierung :
Dies unterscheidet sich von dem "Maschinenbenutzer", bei dem ein "Benutzer" für viele Repos als Mitarbeiter deklariert wird.
Hier (Bereitstellungsschlüssel) gibt es keinen "Mitarbeiter" , sondern nur einen direkten SSH-Zugriff, der dem Repo gewährt wird.
quelle
Leider ist dies ein Szenario, in dem Github die Unterscheidung zwischen einem Schlüsselpaar und einem Konto oder Projekt nur falsch interpretiert.
Da ein Schlüsselpaar zur Authentifizierung und Autorisierung verwendet wird, handelt es sich effektiv um eine Identität. Github-Konten sind eine andere Identität. Durch das Verbinden von Github-Konten mit Schlüsselpaaren wird effektiv eine 1: N-Zuordnung zwischen Github-Konto-basierten Identitäten und Schlüsselpaar-Identitäten hergestellt.
Umgekehrt erzwingt Github eine 1: N-Zuordnung von Projekten zu Schlüsselpaar-basierten Identitäten. Das reale Analogon ist, dass es eine Tür gibt, die den Zugang zum Projekt ermöglicht und von vielen verschiedenen Personen geöffnet werden kann. Aber sobald einer von ihnen einen Schlüssel für die Tür bekommt, kann er nie wieder einen anderen Schlüssel für eine andere Tür bekommen.
Es ist sinnvoll, Schlüssel nicht häufig wiederzuverwenden, um Verstöße einzudämmen, wenn ein Schlüssel kompromittiert wird. Aber das ist nur eine gute Verwaltung Politik . Es ist wenig sinnvoll zu verhindern, dass ein Schlüssel grundsätzlich mehrmals verwendet wird . Dass es einige Schlüssel für einige Türen gibt, die nie wiederverwendet werden, liegt wiederum an der Politik .
Eine etwas komplexere Ansicht besteht darin, Schlüsselpaare als Rollen darzustellen . Sie können viele Schlüsselpaare besitzen und daher viele Rollen einnehmen. Der private Schlüssel authentifiziert Sie für die Rolle.
Githubs Deployment Key Mapping für Projekte besagt, dass eine Rolle niemals mehr als eine Aufgabe umfassen kann. Das ist selten realistisch.
Nichts davon ändert natürlich, was Github erlaubt.
quelle
Ich habe viel nachgedacht, um die Auswirkungen zu rationalisieren, und mir dieses Szenario ausgedacht.
Stellen Sie sich vor, Sie erstellen einen einzelnen Bereitstellungsschlüssel für einen Benutzer, den Sie mehreren Repositorys zugewiesen haben. Jetzt möchten Sie diesen Schlüssel widerrufen, aber er wird an mehreren Stellen verwendet. Anstatt den gesamten Zugriff widerrufen zu können, können Sie versehentlich nur den Teilzugriff widerrufen.
Dies mag nach einem Vorteil klingen, aber diese Eins-zu-Eins-Beziehung ist tatsächlich von Natur aus unsicher, wenn man den menschlichen Faktor berücksichtigt. Dies liegt daran, dass Sie nicht sicher wissen können, ob Sie wirklich den gesamten Zugriff widerrufen haben, ohne jedes Repository zu überprüfen und jeden öffentlichen Schlüssel einzeln zu vergleichen, falls Sie vergessen haben, wo Sie ihn tatsächlich zugewiesen haben.
Es ist definitiv frustrierend, so viele eindeutige Schlüssel zuzuweisen und zu verwalten, aber die Auswirkungen auf die Sicherheit sind klar, wie GitHub seine Richtlinien eingeführt hat: Wenn Sie einen Schlüssel widerrufen, widerrufen Sie garantiert den gesamten Zugriff, der von diesem Schlüssel gewährt wird, da er nur an einer Stelle verwendet wird .
quelle
How is that fundamentally different from allowing one user to access multiple repositories, which is obviously allowed
Kannst du das weiter erklären? Ich habe nur ein Entwicklerkonto und sehe, dass Sie SSH-Schlüssel für den kontoweiten Zugriff hinzufügen können (ein Schlüssel für alle Repositorys) oder einzelne Bereitstellungsschlüssel hinzufügen können (ein Schlüssel für jedes Repository). Dies ist immer noch eine Eins-zu-Viele- oder Eins-zu-Eins-Beziehung, bei der das Widerrufen des Schlüssels "Eins" in beiden Fällen den Zugriff "Alle" widerruft.