Das Abhängigkeitsdiagramm kann die Abhängigkeiten Ihres Projekts mithilfe der folgenden Methoden identifizieren.
| Methode | So funktioniert es |
|---|---|
| Statische Analyse | Analysiert Manifest- und Sperrdateien in Ihrem Repository |
| ** |
Dependabot Diagrammaufträge** | Verwendet einen DependabotGitHub Actions-Workflow zum Generieren von Abhängigkeitssnapshots |
| | | | | Automatische Übermittlung | Führt einen integrierten-GitHub Actions-Workflow aus, um Buildzeitabhängigkeiten aufzulösen | | | Abhängigkeitsübermittlungs-API | Akzeptiert Abhängigkeitsdaten, die Sie programmgesteuert übermitteln |
Sobald sich Abhängigkeiten im Diagramm befinden, können Sie Dependabot alerts und Dependabot security updates für alle bekannten Sicherheitslücken erhalten.
Statische Analyse
Wenn Sie das Abhängigkeitsdiagramm aktivieren, GitHub überprüft Das Repository auf unterstützte Manifestdateien und analysiert den Namen und die Version jedes Pakets. Das Diagramm wird aktualisiert, wenn Sie ein unterstütztes Manifest oder eine Sperrdatei in Ihrer Standardverzweigung ändern oder wenn sich eine Abhängigkeit in ihrem eigenen Repository ändert.
Statische Analysen können Folgendes identifizieren:
- Direkte Abhängigkeiten , die in einer Manifest- oder Sperrdatei explizit definiert sind
- Indirekte Abhängigkeiten – Abhängigkeiten dieser direkten Abhängigkeiten, auch als "transitive Abhängigkeiten" bezeichnet – aber nur, wenn sie in einer Manifest- oder Sperrdatei definiert sind und nicht, wenn sie zur Buildzeit aufgelöst werden
Für das zuverlässigste Diagramm sollten Sie Sperrdateien (oder deren Entsprechung) verwenden, da sie genau definieren, welche Versionen der direkten und indirekten Abhängigkeiten Sie derzeit verwenden. Sperren von Dateien stellen außerdem sicher, dass alle Mitwirkenden am Repository dieselben Versionen verwenden, wodurch das Testen und Debuggen von Code erleichtert wird. Darüber hinaus werden indirekte Abhängigkeiten, die von Manifestdateien anstelle von Sperrdateien abgeleitet werden, von Sicherheitsüberprüfungen ausgeschlossen.
Automatische Abhängigkeitsübermittlung
Manche Ökosysteme lösen indirekte Abhängigkeiten zur Build-Zeit auf, sodass die statische Analyse die vollständige Abhängigkeitsstruktur nicht erfassen kann. Wenn Sie die automatische Abhängigkeitsübermittlung für ein Repository aktivieren, GitHub werden die transitiven Abhängigkeiten im Repository automatisch für unterstützte Ökosysteme identifiziert. Weitere Informationen findest du unter Von Abhängigkeitsdiagrammen unterstützte Paket-Ökosysteme.
Im Hintergrund führt die automatische Abhängigkeitsübermittlung einen GitHub Actions-Workflow aus, der die vollständige Struktur generiert und mithilfe von Abhängigkeitsübermittlungs-API hochlädt. Die automatische Übermittlung von Abhängigkeiten wird standardmäßig auf von GitHub gehosteten Runnern ausgeführt und zählt zu Ihren GitHub Actions-Minuten. Optionalerweise können Sie die Ausführung auf selbst gehosteten Läufern oder größere Runner.
Informationen zum Aktivieren der automatischen Abhängigkeitseinreichung finden Sie unter Konfigurieren der automatischen Abhängigkeitseinreichung für Ihr Repository.
Dependabot Diagrammaufträge
Dependabot Graph-Aufträge verwenden einen speziellen AuftragstypDependabot, um einen Abhängigkeitssnapshot zu erstellen und diesen in die Abhängigkeitsübermittlungs-API hochzuladen.
Dependabot Graph-Aufträge werden derzeit für **Go** - und **Python-Abhängigkeiten** unterstützt.
Für unterstützte Ökosysteme bieten Graph-Aufträge Dependabot Folgendes:
- Vollständige transitive Abhängigkeitsabdeckung, was bedeutet, dass Dependabot Sie auf Sicherheitsrisiken in indirekten Abhängigkeiten aufmerksam machen können, die bei statischer Analyse möglicherweise fehlen.
- Privater Registrierungszugriff über Dependabot geheime Schlüssel, die auf Organisation oder Repositoryebene konfiguriert sind. Weitere Informationen finden Sie unter Konfigurieren des Zugriffs auf private Registrierungen für Dependabot.
- Private Pakete, auf die nicht über konfigurierte Dependabot geheime Schlüssel zugegriffen werden kann, werden aus dem Abhängigkeitsdiagramm problemlos weggelassen, ohne einen Fehler zu verursachen.
Dieser Ansatz ähnelt der automatischen Übermittlung von Abhängigkeiten, aber es fallen keine Gebühren für GitHub Actions Minuten an. Sie kann auch auf unternehmensweite Konfigurationen für private Registries zugreifen, die Sie für Dependabot eingerichtet haben.
Hinweis
Dependabot Graph-Aufträge haben Vorrang vor automatischer Übermittlung von Abhängigkeiten. Wenn Ihr Python-Repository beispielsweise zuvor die automatische Abhängigkeitsübermittlung verwendet hat, werden diese Aufträge nicht mehr ausgeführt, sobald Dependabot Diagrammaufträge aktiv sind. Die einzige Anforderung besteht darin, dass das Abhängigkeitsdiagramm für Ihr Repository aktiviert ist.
Der Abhängigkeitsübermittlungs-API
Sie können das Abhängigkeitsübermittlungs-API in Ihrem eigenen Skript oder Workflow aufrufen. Dies ist nützlich, wenn:
- Sie müssen transitive Abhängigkeiten übermitteln, die nicht aus Sperrdateien erkannt werden können.
- Sie müssen benutzerdefinierte Logik erstellen oder ein externes CI/CD-System verwenden.
Abhängigkeiten werden in Form einer Momentaufnahme an das Abhängigkeitsübermittlungs-API übermittelt. Dies ist eine Liste der Abhängigkeiten, die einem Commit-SHA und anderen Metadaten zugeordnet sind und den aktuellen Status Ihres Repositorys widerspiegeln.
Wenn Sie die API in einem GitHub Actions Workflow aufrufen, können Sie eine vorgefertigte Aktion für Ihr Ökosystem verwenden, die die Abhängigkeiten automatisch erfasst und an die API übermittelt. Andernfalls können Sie ihre eigene Aktion schreiben oder die API von einem externen System aufrufen.
Übermittelte Abhängigkeiten werden in der Abhängigkeitsüberprüfung angezeigt, aber sind nicht in den Abhängigkeitserkenntnissen deiner Organisation verfügbar.
Hinweis
Die API für die Abhängigkeitsüberprüfung und die Abhängigkeitsübermittlungs-API arbeiten zusammen. Dies bedeutet, dass die API zur Abhängigkeitsüberprüfung Abhängigkeiten enthält, die über die Abhängigkeitsübermittlungs-API übermittelt werden.
Weitere Informationen finden Sie unter Verwenden der Abhängigkeitsübermittlungs-API.
Priorisierung
Ein Repository kann mehrere Methoden für die Abhängigkeitsübermittlung verwenden, was dazu führen kann, dass dasselbe Paketmanifest mehrmals gescannt wird, wodurch unterschiedliche Ausgaben bei jedem Scan möglich sind. Das Abhängigkeitsdiagramm verwendet Deduplizierungslogik, um die Ausgaben zu analysieren und die genauesten Informationen für jede Manifestdatei zu priorisieren.
Das Abhängigkeitsdiagramm zeigt nur eine Instanz jeder Manifestdatei mithilfe der folgenden Rangfolgeregeln an.
-
**Benutzerübermittlungen** haben die höchste Priorität, da sie in der Regel während des Erstellens von Artefakten entstehen und die vollständigsten Informationen enthalten.- Wenn mehrere manuelle Momentaufnahmen aus verschiedenen Detektoren vorhanden sind, werden sie alphabetisch nach Korrelator und dem ersten verwendeten sortiert.
- Wenn es zwei Korrelatoren mit demselben Detektor gibt, werden die aufgelösten Abhängigkeiten zusammengeführt. Weitere Informationen zu Korrelatoren und Detektoren finden Sie unter REST-API-Endpunkte für die Abhängigkeitsübermittlung.
-
** Dependabot Diagrammaufträge** haben die zweithöchste Priorität. Für Ökosysteme, in denen Dependabot Graph-Aufträge verfügbar sind (derzeit Go und Python), haben sie Vorrang vor der automatischen Abhängigkeitsübermittlung. -
**Automatische Übermittlungen** haben die nächste Priorität, da sie auch während der Artefaktbuilds erstellt werden, aber nicht von Benutzern übermittelt werden. -
**Statische Analyseergebnisse** werden verwendet, wenn keine anderen Daten verfügbar sind.