
GitHub App per impostare e applicare policy di sicurezza
[!IMPORTANT] L'app GitHub Allstar ospitata da OpenSSF è stata ritirata. Allstar, il sottoprogetto OpenSSF Scorecard, continua comunque a essere mantenuto — ora devi eseguirlo tu stesso, sia come GitHub Action sia come demone di servizio.
Vedi ossf/allstar#881 per maggiori dettagli.
Se la tua organizzazione faceva affidamento sull'app ospitata, vedi Migrazione dall'app ospitata.
Allstar è una GitHub App che monitora continuamente organizzazioni o repository GitHub per verificare l'aderenza alle best practice di sicurezza. Se Allstar rileva una violazione di una policy di sicurezza, crea un problema per avvisare il proprietario del repository o dell'organizzazione. Per alcune policy di sicurezza, Allstar può anche modificare automaticamente l'impostazione del progetto che ha causato la violazione, ripristinandola allo stato previsto.
L'obiettivo di Allstar è darti un controllo finemente calibrato sui file e sulle impostazioni che influiscono sulla sicurezza dei tuoi progetti. Puoi scegliere quali policy di sicurezza monitorare sia a livello di organizzazione sia a livello di repository, e come gestire le violazioni delle policy. Puoi anche sviluppare o contribuire con nuove policy.
Allstar è sviluppato come parte del progetto OpenSSF Scorecard.
Se Allstar crea problemi indesiderati, segui queste istruzioni per disattivarlo.
Allstar è altamente configurabile. Ci sono tre livelli principali di controlli:
Queste configurazioni vengono effettuate nel repository .allstar dell'organizzazione.
Livello repository: I manutentori dei repository in un'organizzazione che usa
Allstar possono scegliere di includere o escludere il proprio repository dalle
applicazioni a livello di organizzazione. Nota: questi controlli a livello di repository funzionano solo quando
"repo override" è consentito nelle impostazioni a livello di organizzazione. Queste configurazioni vengono
effettuate nella directory .allstar del repository.
Livello policy: Gli amministratori o i manutentori possono scegliere quali policy
sono abilitate su repository specifici e quali azioni Allstar intraprende quando una policy
viene violata. Queste configurazioni vengono effettuate in un file yaml di policy nel
repository .allstar dell'organizzazione (amministratori) o nella directory
.allstar del repository (manutentori).
Prima di installare Allstar a livello di organizzazione, dovresti decidere approssimativamente su quanti repository vuoi che Allstar operi. Questo ti aiuterà a scegliere tra le strategie Opt-In e Opt-Out.
La strategia Opt In ti consente di aggiungere manualmente i repository su cui vuoi che Allstar operi. Se non specifichi alcun repository, Allstar non verrà eseguito nonostante sia installato. Scegli la strategia Opt In se vuoi applicare policy solo su un numero limitato dei tuoi repository totali, o se vuoi provare Allstar su un singolo repository prima di abilitarlo su altri. Dalla release v4.3, sono supportati i glob per aggiungere facilmente più repository con un nome simile.
La strategia Opt Out (consigliata) abilita Allstar su tutti i repository e ti consente di selezionare manualmente i repository da escludere dalle applicazioni di Allstar. Puoi anche scegliere di escludere tutti i repository pubblici, o tutti i repository privati. Scegli questa opzione se vuoi eseguire Allstar su tutti i repository di un'organizzazione, o se vuoi escludere solo un numero limitato di repository o un tipo specifico (ad es., pubblico vs. privato) di repository. Dalla release v4.3, sono supportati i glob per aggiungere facilmente più repository con un nome simile.
Allstar agisce sulla tua organizzazione come una GitHub App: crei l'app e esegui il processo che si autentica come essa. La configurazione è quindi composta da due passaggi comuni a ogni distribuzione — crea l'app e crea il repository di controllo — e poi una scelta su come eseguirla:
L'Action è l'opzione con il minor overhead delle due ed è da lì che la maggior parte delle organizzazioni dovrebbe iniziare; puoi passare a un demone in seguito senza modificare alcuna configurazione di policy.
Un'App è un'identità simile a un utente con un insieme di permessi nella tua organizzazione.
Allstar necessita di accesso in lettura alla maggior parte delle impostazioni e dei contenuti dei file per rilevare
la conformità, e accesso in scrittura a problemi e check per aprire problemi e
supportare l'azione block.
Segui Istruzioni per l'operatore - Crea una GitHub App e registra l'ID App e la chiave privata. Entrambe le modalità di esecuzione ne hanno bisogno.
.allstarAllstar legge la sua configurazione da un repository chiamato .allstar nella tua
organizzazione.
Il modo più rapido per crearne uno è partire dal modello:
.allstarQuesto abilita tutte le attuali policy di Allstar su tutti i repository
usando la strategia Opt Out, con l'azione issue. Puoi modificare tutto in seguito.
Per un controllo granulare fin dall'inizio — scegliendo la strategia Opt In o Opt Out e scrivendo tu stesso i singoli file di policy — segui invece le istruzioni di installazione manuale.
Questa opzione esegue Allstar come job pianificato usando GitHub Actions, quindi non c'è infrastruttura da gestire oltre a GitHub stesso.
Segui le istruzioni di installazione per GitHub
Actions per configurare un'Action ricorrente nel tuo
repository .allstar, rafforzarla e monitorarne i risultati.
Questa opzione esegue Allstar come processo persistente, che rileva e risolve le violazioni in modo continuo anziché secondo una pianificazione.
Vedi Istruzioni per l'operatore per eseguire il processo, gestire i segreti, il dimensionamento e le variabili d'ambiente disponibili.
Se la tua organizzazione usava l'app ospitata da OpenSSF, la tua configurazione viene
trasferita così com'è. Il repository di controllo .allstar, allstar.yaml e ogni
file di policy continuano a funzionare invariati; ciò che sostituisci è solo il processo
che li legge.
Per migrare:
.allstar esistente esattamente com'è.allstar-app dalla tua organizzazione, se appare ancora sotto
Impostazioni -> GitHub Apps.I problemi precedentemente aperti dall'app ospitata rimangono nei tuoi repository. La tua
istanza identifica i suoi problemi tramite la stessa etichetta allstar (o la tua
issueLabel configurata), quindi li adotterà e li chiuderà man mano che le violazioni vengono risolte,
anziché aprire duplicati.
Ogni policy può essere configurata con un'azione che Allstar intraprenderà quando rileva che un repository non è conforme.
log: Questa è l'azione predefinita e in realtà avviene per tutte le
azioni. Tutti i risultati e i dettagli delle esecuzioni delle policy vengono registrati. I log sono attualmente
visibili solo all'operatore dell'app; i piani per esporli sono in discussione.issue: Questa azione crea un problema GitHub. Viene creato un solo problema per
policy e il testo descrive i dettagli della violazione della policy. Se il
problema è già aperto, viene "pingato" con un commento ogni 24 ore senza aggiornamenti
(attualmente non configurabile dall'utente). Se il risultato della policy cambia, un nuovo commento
verrà lasciato sul problema e collegato nel corpo del problema. Una volta che la violazione viene
affrontata, il problema verrà chiuso automaticamente da Allstar entro 5-10 minuti.fix: Questa azione è specifica della policy. La policy apporterà le modifiche alle
impostazioni GitHub per correggere la violazione della policy. Non tutte le policy saranno in grado
di supportarla (vedi sotto).Azioni proposte ma non ancora implementate. Le definizioni verranno aggiunte in futuro.
block: Allstar può impostare un GitHub Status
Check
e bloccare qualsiasi PR nel repository dall'essere unito se il check fallisce.email: Allstar invierebbe un'email agli amministratori del repository.rpc: Allstar invierebbe un rpc a qualche sistema specifico dell'organizzazione.Due impostazioni sono disponibili per configurare l'azione issue:
issueLabel è disponibile a livello di organizzazione e di repository. Impostarla
sovrascriverà l'etichetta allstar predefinita usata da Allstar per identificare i suoi
problemi.
issueRepo è disponibile a livello di organizzazione. Impostarla forzerà la creazione di tutti
i problemi creati nell'organizzazione nel repository specificato.
Analogamente alla configurazione di abilitazione dell'app Allstar, tutte le policy sono abilitate e
configurate con un file yaml nel repository .allstar dell'organizzazione
o nella directory .allstar del repository. Come per l'app, le policy sono opt-in
per impostazione predefinita; inoltre, l'azione log predefinita non produrrà risultati visibili. Un
modo semplice per abilitare tutte le policy è creare un file yaml per ogni policy con il
contenuto:```yaml
optConfig:
optOutStrategy: true
action: issue
I dettagli di come funziona l'azione `fix` per ogni policy sono descritti di seguito. Se omesso di seguito, l'azione `fix` non è applicabile.
### Protezione dei rami
Il file di configurazione di questa policy si chiama `branch_protection.yaml`, e le [definizioni di configurazione sono qui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/branch#OrgConfig).
La policy di protezione dei rami verifica che le [impostazioni di protezione dei rami](https://docs.github.com/en/github/administering-a-repository/defining-the-mergeability-of-pull-requests/about-protected-branches) di GitHub siano configurate correttamente secondo la configurazione specificata. Il testo del problema descriverà quale impostazione non è corretta. Consulta la [documentazione di GitHub](https://docs.github.com/en/github/administering-a-repository/defining-the-mergeability-of-pull-requests/about-protected-branches) per correggere le impostazioni.
L'azione `fix` modificherà le impostazioni di protezione dei rami per renderle conformi alla configurazione della policy specificata.
### Artefatti binari
Il file di configurazione di questa policy si chiama `binary_artifacts.yaml`, e le [definizioni di configurazione sono qui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/binary#OrgConfig).
Questa policy incorpora il [controllo di scorecard](https://github.com/ossf/scorecard/#scorecard-checks). Rimuovi l'artefatto binario dal repository per raggiungere la conformità. Poiché i risultati di scorecard possono essere prolissi, potresti dover eseguire [scorecard stesso](https://github.com/ossf/scorecard) per vedere tutte le informazioni dettagliate.
### CODEOWNERS
Il file di configurazione di questa policy si chiama `codeowners.yaml`, e le [definizioni di configurazione sono qui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/codeowners#OrgConfig).
Questa policy verifica la presenza di un [file `CODEOWNERS`](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) nei tuoi repository.
### Collaboratori esterni
Il file di configurazione di questa policy si chiama `outside.yaml`, e le [definizioni di configurazione sono qui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/outside#OrgConfig).
Questa policy verifica se eventuali [Collaboratori esterni](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/adding-outside-collaborators-to-repositories-in-your-organization) hanno accesso amministratore (predefinito) o push (opzionale) al repository. Solo i membri dell'organizzazione dovrebbero avere questo accesso, altrimenti membri non fidati possono modificare le impostazioni a livello di amministratore e committare codice dannoso.
### SECURITY.md
Il file di configurazione di questa policy si chiama `security.yaml`, e le [definizioni di configurazione sono qui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/security#OrgConfig).
Questa policy verifica che il repository abbia un file di policy di sicurezza in `SECURITY.md` e che non sia vuoto. Il problema creato avrà un collegamento alla [scheda di GitHub](https://docs.github.com/en/code-security/getting-started/adding-a-security-policy-to-your-repository) che ti aiuta a committare una policy di sicurezza nel tuo repository.
### Workflow pericoloso
Il file di configurazione di questa policy si chiama `dangerous_workflow.yaml`, e le [definizioni di configurazione sono qui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/workflow#OrgConfig).
Questa policy verrà eseguita su **tutti** i rami, vedi la motivazione [qui](https://github.com/ossf/allstar/issues/569).
Questa policy controlla i file di configurazione dei workflow di GitHub Actions (`.github/workflows`), per qualsiasi pattern che corrisponda a comportamenti pericolosi noti. Consulta la [documentazione di OpenSSF Scorecard](https://github.com/ossf/scorecard/blob/main/docs/checks.md#dangerous-workflow) per maggiori informazioni su questo controllo.
### Controllo Scorecard generico
Il file di configurazione di questa policy si chiama `scorecard.yaml`, e le [definizioni di configurazione sono qui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/scorecard#OrgConfig).
Questa policy esegue qualsiasi controllo scorecard elencato nella configurazione `checks`. Tutti i controlli eseguiti devono avere un punteggio uguale o superiore all'impostazione `threshold`. Consulta la [documentazione di OpenSSF Scorecard](https://github.com/ossf/scorecard/blob/main/docs/checks.md) per maggiori informazioni su ciascun controllo.
#### Upload SARIF
La policy Scorecard può opzionalmente caricare i risultati come [SARIF](https://sarifweb.azurewebsites.net/) nella scheda **Security > Code Scanning** di ciascun repository. Questo offre agli amministratori dell'organizzazione visibilità sui risultati di Scorecard insieme ad altri strumenti di sicurezza (CodeQL, Dependabot, ecc.) senza richiedere la configurazione di workflow per singolo repository.
Per abilitare l'upload SARIF, aggiungi il campo `upload` al tuo `scorecard.yaml`:```yaml
optConfig:
optOutStrategy: true
action: issue
checks:
- Binary-Artifacts
- Signed-Releases
threshold: 8
upload:
sarif: true
Requisiti:
security_events). Questo
non è tra i permessi che Allstar richiede altrimenti, quindi aggiungilo alla tua app
prima di abilitare il caricamento SARIF.Il caricamento SARIF funziona con entrambi i modi di eseguire Allstar: come daemon di servizio o come GitHub Action.
Il file di configurazione di questa policy si chiama actions.yaml, e le definizioni di configurazione
sono
qui.
Questa policy controlla i file di configurazione dei workflow GitHub Actions
(.github/workflows) (e le esecuzioni dei workflow in alcuni casi) in ogni repo per garantire
che siano in linea con le regole (ad es. richiedi, nega) definite nella
configurazione a livello di organizzazione per la policy.
Il file di configurazione di questa policy si chiama admin.yaml, e le definizioni di configurazione
sono
qui.
Questa policy verifica che, per impostazione predefinita, tutti i repository debbano avere un utente o un gruppo assegnato come Amministratore. Ti consente di configurare opzionalmente se gli utenti possono essere amministratori (invece dei team).
Vedi questo repo come esempio di configurazione Allstar in uso. Come amministratore dell'organizzazione, considera un README.md con alcune informazioni su come Allstar viene utilizzato nella tua organizzazione.
Per impostazione predefinita, i file di configurazione a livello di organizzazione, come il file allstar.yaml
sopra, sono previsti in un repository .allstar. Se questo repository non
esiste, viene utilizzata la directory allstar del repository .github come
posizione secondaria. Per chiarire, per allstar.yaml:
| Precedenza | Repository | Percorso |
|---|---|---|
| Primaria | .allstar | allstar.yaml |
| Secondaria | .github | allstar/allstar.yaml |
Questo vale anche per i file di configurazione a livello di organizzazione delle singole policy, come descritto di seguito.
Allstar cercherà anche le configurazioni delle policy a livello di repository nel
repository .allstar dell'organizzazione, nella directory con lo stesso nome del
repository. Questa configurazione viene utilizzata indipendentemente dal fatto che "repo override"
sia disabilitato.
Ad esempio, Allstar cercherà la configurazione della policy per un dato repo
myapp nel seguente ordine:
Per i file di configurazione Allstar e delle policy a livello di organizzazione, puoi specificare il campo
baseConfig per indicare un altro repository che contiene la configurazione Allstar
di base. Questo si spiega meglio con un esempio.
Supponiamo che tu abbia più organizzazioni GitHub, ma voglia mantenere una singola
configurazione Allstar. La tua organizzazione principale è "acme", e il repository
acme/.allstar contiene 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
Questo utilizzerà tutta la configurazione da acme/.allstar come configurazione di base, ma poi
applicherà le eventuali modifiche presenti nel file corrente sopra la configurazione di base. Il
metodo con cui viene applicato è descritto come una JSON Merge
Patch. Il baseConfig deve essere
un <org>/<repository> di GitHub.
Vedi CONTRIBUTING.md
| Opt Out (Consigliato) optOutStrategy = true | Opt In optOutStrategy = false |
|---|
| Comportamento predefinito | Tutti i repository sono abilitati | Nessun repository è abilitato |
| Aggiunta manuale di repository | Aggiungere manualmente repository disabilita Allstar su quei repository | Aggiungere manualmente repository abilita Allstar su quei repository |
| Configurazioni aggiuntive | optOutRepos: Allstar sarà disabilitato sui repository elencati optOutPrivateRepos: se true, Allstar sarà disabilitato su tutti i repository privati optOutPublicRepos: se true, Allstar sarà disabilitato su tutti i repository pubblici (optInRepos: questa impostazione verrà ignorata) | optInRepos: Allstar sarà abilitato sui repository elencati (optOutRepos: questa impostazione verrà ignorata) |
| Override del repository | Se true: I repository possono escludersi dalle applicazioni Allstar della loro organizzazione
usando le impostazioni nel proprio file di repository. Le impostazioni di inclusione a livello di organizzazione che
si applicano a quel repository vengono ignorate. Se false: i repository non possono escludersi dalle applicazioni Allstar configurate a livello di organizzazione. | Se true: I repository possono includersi nelle applicazioni Allstar della loro organizzazione anche
se non sono configurati per il repository a livello di organizzazione. Le impostazioni di esclusione a livello di organizzazione
che si applicano a quel repository vengono ignorate. Se false: I repository non possono includersi nelle applicazioni Allstar se non sono configurati a livello di organizzazione. |
| GitHub Action | Demone di servizio |
|---|
| Come funziona | Job pianificato nel tuo repository .allstar | Processo persistente che ospiti tu |
| Cosa fornisci | Nient'altro oltre a GitHub | Un server o un orchestratore di container |
| Cadenza | Qualunque cosa imposti nel cron | Continua, con risultati in 5-10 minuti |
| Sforzo di configurazione | Moderato | Alto |
| Ideale quando | Vuoi l'opzione con la minima infrastruttura | Vuoi il massimo controllo, o gestisci già servizi |
| Repository | Percorso | Condizione |
|---|
myapp | .allstar/branch_protection.yaml | Quando "repo override" è consentito. |
.allstar | myapp/branch_protection.yaml | Sempre. |
.allstar | branch_protection.yaml | Sempre. |
.github | allstar/myapp/branch_protection.yaml | Se il repo .allstar non esiste. |
.github | allstar/branch_protection.yaml | Se il repo .allstar non esiste. |