Questa pagina è la sorella di Sviluppo di pacchetti Laravel. Si presume una conoscenza di base di GitHub Actions.
Rischi di sicurezza delle GitHub Actions
La pericolosità dei riferimenti basati su tag
Normalmente le GitHub Actions si referenziano tramite tag:- I tag sono mobili — un tag può essere cancellato e ricreato mantenendo lo stesso nome
- Rischio di manomissione — se l’account del proprietario del repository viene compromesso, si può iniettare codice malevolo
- Attacco supply chain — un attacco a un’action da cui dipendi compromette il tuo workflow
Come lo affrontano i progetti ufficiali Laravel
In laravel/laravel e laravel/framework tutte le action sono pinnate a un commit hash (SHA).Strategia di implementazione del pinning
Passo 1: creare il file di configurazione Dependabot
Nel repository del pacchetto crea.github/dependabot.yml. Puoi copiare quello di Laravel così com’è.
- Scansione automatica — cerca nuove versioni delle GitHub Actions
- Creazione automatica di PR — apre PR di aggiornamento quando c’è una novità
- Controllo del metodo di aggiornamento — aggiorna per versione le action non pinnate, per SHA quelle pinnate
Passo 2: pinnare le action esistenti a SHA
Cambia tutti i riferimenti delle action nei workflow esistenti in hash SHA. Puoi automatizzarlo con strumenti come pinact.Automazione con pinact
Modifiche manuali
Se non puoi usarepinact, consulta la pagina Lookup latest version di GitHub per trovare gli SHA di ogni action e sostituiscili a mano.
Passo 3: abilitare la configurazione Dependabot
Committa e pusha.github/dependabot.yml: Dependabot avvierà la scansione automaticamente.
Meccanismo di aggiornamento automatico via Dependabot
Dependabot applica strategie diverse in base alle impostazioni didependabot.yml.
Action non pinnata
Action pinnata
Esempio completo di workflow
Esempio completo quando usi action in più workflow.Gestire le PR di aggiornamento Dependabot
Le PR di aggiornamento create da Dependabot si gestiscono così.PR di aggiornamento di una singola action
- Controlla il risultato dell’esecuzione del workflow
- Verifica che non ci siano breaking change
- Merge e chiudi
PR di aggiornamento di sicurezza
Aggiornamenti raggruppati
Se independabot.yml hai impostato groups, più action vengono aggiornate in un’unica PR.
Vantaggi e svantaggi del pinning
Vantaggi
| Vantaggio | Descrizione |
|---|---|
| Contromisura supply chain | Referenziando uno specifico commit hash, contrasti la manomissione delle action |
| Auditabilità | Puoi tracciare quando ogni action è stata aggiornata e da quale versione |
| Aggiornamenti espliciti | Dependabot propone gli aggiornamenti in PR, quindi passano sempre da una review umana |
| Riproducibilità | Con lo stesso commit hash riottieni esattamente lo stesso ambiente |
Svantaggi
| Svantaggio | Come gestirlo |
|---|---|
| Setup iniziale manuale | Automatizza con lo strumento pinact |
| Maggior carico di gestione degli aggiornamenti | Dependabot crea PR automaticamente, minimizzando il costo di implementazione |
| Meno leggibilità | Aggiungi commenti con la versione per la leggibilità |
Checklist di audit di sicurezza
Checklist per l’avvio di un nuovo progetto pacchetto.Setup iniziale
Setup iniziale
- Creare
.github/dependabot.yml - Pinnare tutte le action esistenti a SHA
- Aver completato la verifica con
pinacto a mano - Verificare che i workflow si eseguano correttamente
Manutenzione periodica
Manutenzione periodica
- Rivedere le PR di aggiornamento Dependabot almeno una volta a settimana
- Merge prioritari degli aggiornamenti di sicurezza
- Referenziare sempre a SHA le action nuove
- Una volta al mese verificare lo stato di tutti i workflow
Audit
Audit
- Verifica che tutti i riferimenti alle action siano su SHA
- Verifica che Dependabot sia abilitato
- Verifica che tutte le PR di Dependabot degli ultimi 6 mesi siano state mergeate
Pagine correlate
Nozioni di sviluppo dei pacchetti
Come sviluppare pacchetti Laravel imperniati sui service provider.
Gestire la compatibilità tra versioni dei pacchetti
Strategie di adattamento dei pacchetti agli upgrade major di Laravel.