
GitHub-App zum Festlegen und Durchsetzen von Sicherheitsrichtlinien
[!IMPORTANT] Die von OpenSSF gehostete Allstar GitHub App wurde eingestellt. Allstar selbst, das Subprojekt von OpenSSF Scorecard, wird weiterhin gepflegt — Sie müssen es nun selbst ausführen, entweder als GitHub Action oder als Dienst-Daemon.
Weitere Details finden Sie unter ossf/allstar#881.
Wenn Ihre Organisation auf die gehostete App angewiesen war, lesen Sie Migration von der gehosteten App.
Allstar ist eine GitHub App, die GitHub-Organisationen oder -Repositories kontinuierlich auf die Einhaltung von Sicherheits-Best Practices überwacht. Wenn Allstar eine Verletzung einer Sicherheitsrichtlinie erkennt, erstellt es ein Issue, um den Repository- oder Organisationsinhaber zu warnen. Für einige Sicherheitsrichtlinien kann Allstar auch automatisch die Projekteinstellung ändern, die die Verletzung verursacht hat, und sie in den erwarteten Zustand zurückversetzen.
Das Ziel von Allstar ist es, Ihnen fein abgestimmte Kontrolle über die Dateien und Einstellungen zu geben, die die Sicherheit Ihrer Projekte beeinflussen. Sie können wählen, welche Sicherheitsrichtlinien sowohl auf Organisationsebene als auch auf Repository-Ebene überwacht werden sollen und wie mit Richtlinienverletzungen umgegangen werden soll. Sie können auch neue Richtlinien entwickeln oder dazu beitragen.
Allstar wird als Teil des OpenSSF Scorecard-Projekts entwickelt.
Wenn Allstar unerwünschte Issues erstellt, folgen Sie diesen Anweisungen, um sich abzumelden.
Allstar ist hochgradig konfigurierbar. Es gibt drei Hauptebenen der Kontrolle:
Diese Konfigurationen werden im .allstar-Repository der Organisation vorgenommen.
Repository-Ebene: Repository-Maintainer in einer Organisation, die
Allstar verwendet, können ihr Repository für Durchsetzungen auf Organisationsebene an- oder abmelden.
Hinweis: Diese Steuerungen auf Repository-Ebene funktionieren nur, wenn "Repo
Override" in den Einstellungen auf Organisationsebene erlaubt ist. Diese Konfigurationen werden
im .allstar-Verzeichnis des Repositories vorgenommen.
Richtlinienebene: Administratoren oder Maintainer können wählen, welche Richtlinien
für bestimmte Repositories aktiviert sind und welche Aktionen Allstar ergreift, wenn eine Richtlinie
verletzt wird. Diese Konfigurationen werden in einer Richtlinien-YAML-Datei entweder im
.allstar-Repository der Organisation (Administratoren) oder im
.allstar-Verzeichnis des Repositories (Maintainer) vorgenommen.
Bevor Sie Allstar auf Organisationsebene installieren, sollten Sie ungefähr entscheiden, auf wie vielen Repositories Allstar ausgeführt werden soll. Dies hilft Ihnen bei der Wahl zwischen den Opt-In- und Opt-Out-Strategien.
Die Opt-In-Strategie ermöglicht es Ihnen, die Repositories manuell hinzuzufügen, auf denen Allstar ausgeführt werden soll. Wenn Sie keine Repositories angeben, wird Allstar trotz Installation nicht ausgeführt. Wählen Sie die Opt-In-Strategie, wenn Sie Richtlinien nur auf einer kleinen Anzahl Ihrer gesamten Repositories durchsetzen möchten oder Allstar auf einem einzelnen Repository ausprobieren möchten, bevor Sie es auf weiteren aktivieren. Seit Version v4.3 werden Globs unterstützt, um einfach mehrere Repositories mit ähnlichem Namen hinzuzufügen.
Die Opt-Out-Strategie (empfohlen) aktiviert Allstar auf allen Repositories und ermöglicht es Ihnen, die Repositories manuell auszuwählen, die von Allstar-Durchsetzungen abgemeldet werden sollen. Sie können auch alle öffentlichen Repos oder alle privaten Repos abmelden. Wählen Sie diese Option, wenn Sie Allstar auf allen Repositories in einer Organisation ausführen möchten oder nur eine kleine Anzahl von Repositories oder einen bestimmten Typ (d. h. öffentlich vs. privat) von Repository abmelden möchten. Seit Version v4.3 werden Globs unterstützt, um einfach mehrere Repositories mit ähnlichem Namen hinzuzufügen.
Allstar agiert in Ihrer Organisation als GitHub App: Sie erstellen die App und führen den Prozess aus, der sich als sie authentifiziert. Die Einrichtung besteht daher aus zwei Schritten, die für jede Bereitstellung gleich sind — App erstellen und Kontroll-Repository erstellen — und dann einer Wahl, wie sie ausgeführt werden soll:
Die Action ist die Option mit geringerem Aufwand und der beste Startpunkt für die meisten Organisationen; Sie können später zu einem Daemon wechseln, ohne die Richtlinienkonfiguration zu ändern.
Eine App ist eine benutzerähnliche Identität mit einem Satz von Berechtigungen in Ihrer Organisation.
Allstar benötigt Lesezugriff auf die meisten Einstellungen und Dateiinhalte, um die
Einhaltung zu erkennen, sowie Schreibzugriff auf Issues und Checks, um Issues zu erstellen und die
block-Aktion zu unterstützen.
Folgen Sie den Operator-Anweisungen - GitHub App erstellen und notieren Sie die App-ID und den privaten Schlüssel. Beide Ausführungsmodi benötigen sie.
.allstar-Kontroll-RepositoryAllstar liest seine Konfiguration aus einem Repository namens .allstar in Ihrer
Organisation.
Der schnellste Weg, eines zu erstellen, ist aus dem Beispiel:
.allstar einDies aktiviert alle aktuellen Allstar-Richtlinien auf allen Repositories
unter Verwendung der Opt-Out-Strategie mit der issue-Aktion. Sie können alles später
ändern.
Für granulare Kontrolle von Anfang an — Wahl der Opt-In- oder Opt-Out-Strategie und eigenständiges Schreiben einzelner Richtliniendateien — folgen Sie stattdessen den manuellen Installationsanweisungen.
Diese Option führt Allstar als geplanten Job mit GitHub Actions aus, sodass keine Infrastruktur über GitHub hinaus betrieben werden muss.
Folgen Sie den Installationsanweisungen für GitHub
Actions, um eine wiederkehrende Action in Ihrem
.allstar-Repository einzurichten, sie zu härten und ihre Ergebnisse zu überwachen.
Diese Option führt Allstar als dauerhaften Prozess aus, der Verstöße kontinuierlich erkennt und behebt, anstatt nach einem Zeitplan.
Siehe Operator-Anweisungen für die Ausführung des Prozesses, die Verwaltung von Geheimnissen, die Dimensionierung und die verfügbaren Umgebungsvariablen.
Wenn Ihre Organisation die von OpenSSF gehostete App verwendet hat, wird Ihre Konfiguration
unverändert übernommen. Das .allstar-Kontroll-Repository, allstar.yaml und jede
Richtliniendatei funktionieren unverändert weiter; was Sie ersetzen, ist nur der Prozess,
der sie liest.
Zur Migration:
.allstar-Repository genau so, wie es ist.allstar-app aus Ihrer Organisation, falls es weiterhin unter
Einstellungen -> GitHub Apps erscheint.Zuvor von der gehosteten App erstellte Issues bleiben in Ihren Repositories. Ihre eigene
Instanz identifiziert ihre Issues über dasselbe allstar-Label (oder Ihr konfiguriertes
issueLabel), sodass sie diese übernimmt und schließt, wenn Verstöße behoben werden,
anstatt Duplikate zu erstellen.
Jede Richtlinie kann mit einer Aktion konfiguriert werden, die Allstar ergreift, wenn es ein Repository als nicht konform erkennt.
log: Dies ist die Standardaktion und findet tatsächlich für alle
Aktionen statt. Alle Ergebnisse und Details der Richtlinienausführung werden protokolliert. Protokolle sind derzeit
nur für den App-Betreiber sichtbar; Pläne, diese zugänglich zu machen, werden diskutiert.issue: Diese Aktion erstellt ein GitHub-Issue. Pro
Richtlinie wird nur ein Issue erstellt, und der Text beschreibt die Details der Richtlinienverletzung. Wenn das
Issue bereits offen ist, wird es alle 24 Stunden ohne Updates mit einem Kommentar angepingt
(derzeit nicht benutzerkonfigurierbar). Wenn sich das Richtlinienergebnis ändert, wird ein neuer Kommentar
im Issue hinterlassen und im Issue-Text verlinkt. Sobald die Verletzung
behoben ist, wird das Issue von Allstar innerhalb von 5-10 Minuten automatisch geschlossen.fix: Diese Aktion ist richtlinienspezifisch. Die Richtlinie nimmt die Änderungen an den
GitHub-Einstellungen vor, um die Richtlinienverletzung zu korrigieren. Nicht alle Richtlinien werden dies
unterstützen können (siehe unten).Vorgeschlagene, aber noch nicht implementierte Aktionen. Definitionen werden in der Zukunft hinzugefügt.
block: Allstar kann einen GitHub-Status-
Check
setzen und jeden PR im Repository daran hindern, zusammengeführt zu werden, wenn der Check fehlschlägt.email: Allstar würde eine E-Mail an den/die Repository-Administrator(en) senden.rpc: Allstar würde einen RPC an ein organisationsspezifisches System senden.Zwei Einstellungen sind verfügbar, um die Issue-Aktion zu konfigurieren:
issueLabel ist auf Organisationsebene und Repository-Ebene verfügbar. Wenn Sie es setzen,
wird das standardmäßige allstar-Label überschrieben, das Allstar zur Identifizierung seiner
Issues verwendet.
issueRepo ist auf Organisationsebene verfügbar. Wenn Sie es setzen, werden alle
in der Organisation erstellten Issues im angegebenen Repository erstellt.
Ähnlich wie bei der Aktivierungskonfiguration der Allstar-App werden alle Richtlinien mit
einer YAML-Datei entweder im .allstar-Repository der Organisation
oder im .allstar-Verzeichnis des Repositories aktiviert und konfiguriert. Wie bei der App sind Richtlinien standardmäßig
Opt-in, auch die Standardaktion log erzeugt keine sichtbaren Ergebnisse. Eine
einfache Möglichkeit, alle Richtlinien zu aktivieren, besteht darin, für jede Richtlinie eine YAML-Datei mit folgendem Inhalt zu erstellen:```yaml
optConfig:
optOutStrategy: true
action: issue
Die Details zur Funktionsweise der `fix`-Aktion für jede Richtlinie sind unten aufgeführt. Wenn sie unten nicht aufgeführt ist, ist die `fix`-Aktion nicht anwendbar.
### Branch Protection
Die Konfigurationsdatei dieser Richtlinie heißt `branch_protection.yaml`, und die [Konfigurationsdefinitionen finden Sie
hier](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/branch#OrgConfig).
Die Branch-Protection-Richtlinie prüft, ob die [Branch-Protection-Einstellungen](https://docs.github.com/en/github/administering-a-repository/defining-the-mergeability-of-pull-requests/about-protected-branches)
von GitHub gemäß der angegebenen Konfiguration korrekt eingerichtet sind. Der Issue-Text
beschreibt, welche Einstellung falsch ist. Siehe [GitHub-Dokumentation](https://docs.github.com/en/github/administering-a-repository/defining-the-mergeability-of-pull-requests/about-protected-branches)
zur Korrektur der Einstellungen.
Die `fix`-Aktion ändert die Branch-Protection-Einstellungen so, dass sie der angegebenen Richtlinienkonfiguration entsprechen.
### Binary Artifacts
Die Konfigurationsdatei dieser Richtlinie heißt `binary_artifacts.yaml`, und die [Konfigurationsdefinitionen finden Sie
hier](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/binary#OrgConfig).
Diese Richtlinie integriert den [Check von
scorecard](https://github.com/ossf/scorecard/#scorecard-checks). Entfernen Sie das
binäre Artefakt aus dem Repository, um die Konformität zu erreichen. Da die Scorecard-Ergebnisse
ausführlich sein können, müssen Sie möglicherweise [scorecard
selbst](https://github.com/ossf/scorecard) ausführen, um alle detaillierten Informationen zu sehen.
### CODEOWNERS
Die Konfigurationsdatei dieser Richtlinie heißt `codeowners.yaml`, und die [Konfigurationsdefinitionen finden Sie
hier](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/codeowners#OrgConfig).
Diese Richtlinie prüft das Vorhandensein einer [`CODEOWNERS`-Datei](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) in Ihren Repositories.
### Outside Collaborators
Die Konfigurationsdatei dieser Richtlinie heißt `outside.yaml`, und die [Konfigurationsdefinitionen finden Sie
hier](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/outside#OrgConfig).
Diese Richtlinie prüft, ob [externe
Mitarbeiter](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/adding-outside-collaborators-to-repositories-in-your-organization)
entweder Administrator- (Standard) oder Push-Zugriff (optional) auf das
Repository haben. Nur Organisationsmitglieder sollten diesen Zugriff haben, da
andernfalls nicht vertrauenswürdige Mitglieder Einstellungen auf Admin-Ebene ändern und bösartigen Code committen können.
### SECURITY.md
Die Konfigurationsdatei dieser Richtlinie heißt `security.yaml`, und die [Konfigurationsdefinitionen finden Sie
hier](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/security#OrgConfig).
Diese Richtlinie prüft, ob das Repository eine Sicherheitsrichtliniendatei in
`SECURITY.md` hat und dass diese nicht leer ist. Der erstellte Issue enthält einen Link zum
[GitHub-Tab](https://docs.github.com/en/code-security/getting-started/adding-a-security-policy-to-your-repository),
der Ihnen hilft, eine Sicherheitsrichtlinie in Ihr Repository zu committen.
### Dangerous Workflow
Die Konfigurationsdatei dieser Richtlinie heißt `dangerous_workflow.yaml`, und die [Konfigurationsdefinitionen finden Sie
hier](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/workflow#OrgConfig).
Diese Richtlinie wird gegen **alle** Branches ausgeführt, siehe Begründung [hier](https://github.com/ossf/allstar/issues/569).
Diese Richtlinie prüft die Konfigurationsdateien der GitHub Actions Workflows
(`.github/workflows`) auf Muster, die bekanntem gefährlichem
Verhalten entsprechen. Siehe die [OpenSSF-Scorecard-Dokumentation](https://github.com/ossf/scorecard/blob/main/docs/checks.md#dangerous-workflow)
für weitere Informationen zu diesem Check.
### Generic Scorecard Check
Die Konfigurationsdatei dieser Richtlinie heißt `scorecard.yaml`, und die [Konfigurationsdefinitionen finden Sie
hier](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/scorecard#OrgConfig).
Diese Richtlinie führt jeden Scorecard-Check aus, der in der `checks`-Konfiguration aufgeführt ist. Alle
ausgeführten Checks müssen eine Punktzahl haben, die gleich oder über der `threshold`-Einstellung liegt. Bitte lesen Sie die
[OpenSSF-Scorecard-Dokumentation](https://github.com/ossf/scorecard/blob/main/docs/checks.md)
für weitere Informationen zu jedem Check.
#### SARIF-Upload
Die Scorecard-Richtlinie kann optional Ergebnisse als
[SARIF](https://sarifweb.azurewebsites.net/) in den Tab **Security > Code Scanning** jedes Repositories
hochladen. Dies gibt Organisationsadministratoren
Einblick in Scorecard-Ergebnisse neben anderen Sicherheitstools (CodeQL,
Dependabot usw.), ohne dass eine Einrichtung pro Repository-Workflow erforderlich ist.
Um den SARIF-Upload zu aktivieren, fügen Sie das Feld `upload` zu Ihrer `scorecard.yaml` hinzu:```yaml
optConfig:
optOutStrategy: true
action: issue
checks:
- Binary-Artifacts
- Signed-Releases
threshold: 8
upload:
sarif: true
Anforderungen:
security_events). Dies gehört nicht zu den Berechtigungen, die Allstar sonst benötigt, also fügen Sie es Ihrer App hinzu, bevor Sie den SARIF-Upload aktivieren.Der SARIF-Upload funktioniert mit beiden Arten, Allstar auszuführen: als Service-Daemon oder als GitHub Action.
Die Konfigurationsdatei dieser Richtlinie heißt actions.yaml, und die Konfigurationsdefinitionen finden Sie hier.
Diese Richtlinie prüft die GitHub-Actions-Workflow-Konfigurationsdateien (.github/workflows) (und in einigen Fällen Workflow-Ausführungen) in jedem Repository, um sicherzustellen, dass sie den Regeln (z. B. erfordern, verbieten) entsprechen, die in der organisationsweiten Konfiguration für die Richtlinie definiert sind.
Die Konfigurationsdatei dieser Richtlinie heißt admin.yaml, und die Konfigurationsdefinitionen finden Sie hier.
Diese Richtlinie prüft, dass standardmäßig alle Repositorys einen Benutzer oder eine Gruppe als Administrator zugewiesen haben müssen. Sie können optional konfigurieren, ob Benutzer Administratoren sein dürfen (im Gegensatz zu Teams).
Siehe dieses Repo als Beispiel für die Verwendung der Allstar-Konfiguration. Als Organisationsadministrator sollten Sie eine README.md mit einigen Informationen darüber in Betracht ziehen, wie Allstar in Ihrer Organisation verwendet wird.
Standardmäßig werden organisationsweite Konfigurationsdateien, wie die oben genannte allstar.yaml, in einem .allstar-Repository erwartet. Wenn dieses Repository nicht existiert, wird das allstar-Verzeichnis des .github-Repositorys als sekundärer Speicherort verwendet. Zur Verdeutlichung für allstar.yaml:
| Priorität | Repository | Pfad |
|---|---|---|
| Primär | .allstar | allstar.yaml |
| Sekundär | .github | allstar/allstar.yaml |
Dies gilt auch für die organisationsweiten Konfigurationsdateien der einzelnen Richtlinien, wie unten beschrieben.
Allstar sucht auch nach Repository-Ebene-Richtlinienkonfigurationen im .allstar-Repository der Organisation, im Verzeichnis mit demselben Namen wie das Repository. Diese Konfiguration wird unabhängig davon verwendet, ob „repo override" deaktiviert ist.
Beispielsweise sucht Allstar die Richtlinienkonfiguration für ein bestimmtes Repository myapp in der folgenden Reihenfolge:
Für organisationsweite Allstar- und Richtlinienkonfigurationsdateien können Sie das Feld baseConfig angeben, um ein anderes Repository zu spezifizieren, das die Basis-Allstar-Konfiguration enthält. Dies lässt sich am besten anhand eines Beispiels erklären.
Angenommen, Sie haben mehrere GitHub-Organisationen, möchten aber eine einzige Allstar-Konfiguration pflegen. Ihre Hauptorganisation ist „acme", und das Repository acme/.allstar enthält allstar.yaml:```yaml
optConfig:
optOutStrategy: true
issueLabel: allstar-acme
issueFooter: Issue created by Acme security team.
You also have a satellite GitHub organization named "acme-sat". You want to
re-use the main config, but apply some changes on top by disabling Allstar on
certain repositories. The repository `acme-sat/.allstar` contains
`allstar.yaml`:```yaml
baseConfig: acme/.allstar
optConfig:
optOutRepos:
- acmesat-one
- acmesat-two
Dies verwendet die gesamte Konfiguration aus acme/.allstar als Basiskonfiguration, wendet dann aber
alle Änderungen in der aktuellen Datei zusätzlich zur Basiskonfiguration an. Die
Methode, mit der dies angewendet wird, wird als JSON Merge
Patch beschrieben. Die baseConfig muss
ein GitHub <org>/<repository> sein.
Siehe CONTRIBUTING.md
| Opt Out (Empfohlen) optOutStrategy = true | Opt In optOutStrategy = false |
|---|
| Standardverhalten | Alle Repos sind aktiviert | Keine Repos sind aktiviert |
| Manuelles Hinzufügen von Repositories | Manuelles Hinzufügen von Repos deaktiviert Allstar auf diesen Repos | Manuelles Hinzufügen von Repos aktiviert Allstar auf diesen Repos |
| Zusätzliche Konfigurationen | optOutRepos: Allstar wird auf den aufgeführten Repos deaktiviert optOutPrivateRepos: wenn true, wird Allstar auf allen privaten Repos deaktiviert optOutPublicRepos: wenn true, wird Allstar auf allen öffentlichen Repos deaktiviert (optInRepos: diese Einstellung wird ignoriert) | optInRepos: Allstar wird auf den aufgeführten Repos aktiviert (optOutRepos: diese Einstellung wird ignoriert) |
| Repo Override | Wenn true: Repos können sich von den Allstar-Durchsetzungen ihrer Organisation abmelden,
indem sie die Einstellungen in ihrer eigenen Repo-Datei verwenden. Opt-in-Einstellungen auf Organisationsebene, die
für dieses Repository gelten, werden ignoriert. Wenn false: Repos können sich nicht von Allstar-Durchsetzungen abmelden, wie sie auf Organisationsebene konfiguriert sind. | Wenn true: Repos können sich für die Allstar-Durchsetzungen ihrer Organisation anmelden, auch
wenn sie nicht auf Organisationsebene für das Repo konfiguriert sind. Opt-out-Einstellungen auf Organisationsebene,
die für dieses Repository gelten, werden ignoriert. Wenn false: Repos können sich nicht für Allstar-Durchsetzungen anmelden, wenn sie nicht auf Organisationsebene konfiguriert sind. |
| GitHub Action | Dienst-Daemon |
|---|
| Wie es läuft | Geplanter Job in Ihrem .allstar-Repo | Dauerhafter Prozess, den Sie hosten |
| Sie stellen bereit | Nichts über GitHub hinaus | Einen Server oder Container-Orchestrator |
| Rhythmus | Was auch immer Sie als cron festlegen | Kontinuierlich, mit Ergebnissen in 5-10 Minuten |
| Einrichtungsaufwand | Mittel | Hoch |
| Am besten geeignet, wenn | Sie die Option mit der geringsten Infrastruktur möchten | Sie maximale Kontrolle möchten oder bereits Dienste betreiben |
| Repository | Pfad | Bedingung |
|---|
myapp | .allstar/branch_protection.yaml | Wenn „repo override" erlaubt ist. |
.allstar | myapp/branch_protection.yaml | Immer. |
.allstar | branch_protection.yaml | Immer. |
.github | allstar/myapp/branch_protection.yaml | Wenn das .allstar-Repo nicht existiert. |
.github | allstar/branch_protection.yaml | Wenn das .allstar-Repo nicht existiert. |