Aumentare la sicurezza delle nostre applicazioni e dei nostri processi è sempre fondamentale per ridurre al più possibile ogni tipologia di rischio. Nel nostro piccolo, in GitHub, una delle azioni che possiamo intraprendere è la verifica della provenienza dei commit, così da garantire l'integrità del codice, la provenienza e la responsabilità/attribuzione alle giuste persone.
Vediamo un esempio concreto di un workflow, che vuole verificare l'esistenza della firma dei singoli commit fatti all'interno di una PR, prima che il codice venga mergiato nel ramo principale di sviluppo.
name: Verify commit signature on: [pull_request] jobs: signed-commit-verification: name: Fail on unsigned commits runs-on: ubuntu-latest steps: - name: Fail on unsigned commits shell: bash env: GH_TOKEN: ${{ github.token }} run: | gh api /repos/${{ github.repository }}/pulls/${{ github.event.number }}/commits > commits.json jq_check=$(jq '.[] | select(.commit.verification.verified == false) | length > 0' commits.json) if [ "$jq_check" = "true" ]; then echo "At least one commit is not signed." exit 1 else echo "All commits are signed." fi
Durante l'esecuzione del workflow, andiamo a recuperare la lista dei commit che fanno parte della pull request tramite l'uso della CLI di GitHub. Una volta recuperata la lista, andiamo a verificare che tutti i commit siano firmati, tramite la proprietà verification.verified presente nel JSON di risposta. Il filtro tramite JQ ci permette di filtrare tutti i commit e recuperare solo quelli che non hanno la firma e, qualora dovessero essercene alcuni, allora facciamo fallire il workflow, così che, volendo, possiamo bloccare la pull request dal merge. Altrimenti, il workflow sarà stato eseguito con successo e avremo piena tracciabilità e provenienza del codice.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ordinare randomicamente una lista in C#
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Utilizzare gRPC su App Service di Azure
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Estrarre dati randomici da una lista di oggetti in C#
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Triggerare una pipeline su un altro repository di Azure DevOps
Utilizzare Azure AI Studio per testare i modelli AI
Gestione dell'annidamento delle regole dei layer in CSS
Generare la software bill of material (SBOM) in GitHub
Definire stili a livello di libreria in Angular
Evitare (o ridurre) il repo-jacking sulle GitHub Actions