L'arrivo dei marketplace sui nostri dispositivi, come per esempio l'App Store per iOS e il Microsoft Store per Windows, ci ha assicurato una questione importante: la provenienza e l'integrità del software che andiamo a scaricare e installare. Infatti, prima dell'introduzione dello store, qualsiasi software per Windows eravamo costretti a cercarlo liberamente sul web, con il rischio di scaricare "exe" contenenti malware o altro, che potevano compromettere l'integrità della macchina.
Lo stesso meccanismo deve essere valido per tutti i tipi di artefatti che scarichiamo da GitHub, perchè vogliamo avere la certezza di come siano stati compilati i binari, da quale repository, organizzazione, commit, ambiente etc... Per questo su GitHub è nato il concetto di artifact attestation, che è anche compliant con il framework SLSA v1.0 Level 2.
Per generare un attestato di provenienza è sufficiente garantire gli adeguati permessi:
permissions: id-token: write contents: read attestations: write
E quindi possiamo andare a firmare l'artefatto:
- name: Generate artifact attestation uses: actions/attest-build-provenance@v1 with: subject-path: 'PATH/TO/ARTIFACT'
Se questo è un container (anche oggetti OCI sono supportati), dobbiamo solo cambiare qualche property:
- name: Generate artifact attestation uses: actions/attest-build-provenance@v1 with: subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} subject-digest: 'sha256:fedcba0...'
Si può verificare poi l'attestato generato con il seguente comando della CLI di GitHub:
gh attestation verify PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
.NET Aspire per applicazioni distribuite
La gestione della riconnessione al server di Blazor in .NET 9
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Escludere alcuni file da GitHub Secret Scanning
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Cancellare una run di un workflow di GitHub
Ottenere un token di accesso per una GitHub App
Disabilitare automaticamente un workflow di GitHub (parte 2)
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Ottimizzazione dei block template in Angular 17
Creare una custom property in GitHub