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
Gestire il colore CSS con HWB
Rendere le variabili read-only in una pipeline di Azure DevOps
Filtering sulle colonne in una QuickGrid di Blazor
Creare una custom property in GitHub
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Generare la software bill of material (SBOM) in GitHub
Eseguire i worklow di GitHub su runner potenziati
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Collegare applicazioni server e client con .NET Aspire