Abbiamo già avuto modo di vedere in passato cosa siano le artifact attestation, ovvero un meccanismo per certificare la provenienza di determinati artefatti, siano essi degli file di testo, dei file zip, dei pacchetti di NuGet/npm o addirittura immagini da utilizzare in container, prodotti dalle nostre pipeline (https://www.dopsitalia.com/script/121/Garantire-Provenienza-Integrita-Artefatti-Prodotti-GitHub.aspx).
Nell'articolo non avevamo approfondito l'aspetto di verifica e controllo della provenienza, in quanto è banale ed è risolvibile con una sola chiamata tramite CLI per gli artefatti più semplici, ma cosa succede nel momento in cui vogliamo più governance delle immagini Docker per, ad esempio, evitare che queste vengano installate nel nostro cluster Kubernetes nel momento in cui la provenienza non è certificata?
Per farlo ci basta installare nel nostro cluster un policy controller (può essere Sigstore, Kyverno o qualsiasi altro):
helm upgrade policy-controller --install --atomic --create-namespace --namespace artifact-attestations oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.10.0-github9
Questo è solo l'engine che validerà le nostre policy che, ancora una volta, saranno o scritte da noi, oppure "riciclate" da quelle già definite da Sigstore:
helm upgrade trust-policies --install --atomic --namespace artifact-attestations oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2 --set policy. Enabled=true --set policy. Organization=MY-ORGANIZATION
Poiché questa policy di default controlla gli oggetti contenuti in determinati namespace, per capire quali namespace deve monitorare, dobbiamo applicargli una label:
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true
Ogni qualvolta proveremo a far partire un nuovo pod all'interno del cluster, in un namespace monitorato, il policy engine validerà la policy e, se non è presente alcun attestato di provenienza da un workflow di GitHub per l'immagine o l'artefatto OCI, allora verrà rifiutato l'ingresso nel cluster, altrimenti l'installazione proseguirà come al solito.
Eventualmente è anche possibile escludere un determinato set di immagini nel momento in cui installiamo le policy:
helm upgrade trust-policies --install --atomic --namespace artifact-attestations oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2 --set policy. Enabled=true --set policy. Organization=MY-ORGANIZATION --set-json 'policy.exemptImages=["index.docker.io/library/busybox**"]' --set-json 'policy.images=["ghcr.io/MY-ORGANIZATION/**"]'
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire script pre e post esecuzione di un workflow di GitHub
Utilizzare un service principal per accedere a Azure Container Registry
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Usare il colore CSS per migliorare lo stile della pagina
Eseguire le GitHub Actions offline
Utilizzare i primary constructor di C# per inizializzare le proprietà
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Creare una custom property in GitHub
Effettuare il binding di date in Blazor
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
I più letti di oggi
- Screencast 'Primi passi con Windows Workflow Foundation'
- .NET Conference Italia 2021 - Online
- Venite a trovarci a SMAU, dal 2 al 6 ottobre!
- Validazione dell'input in ASP.NET MVC 2
- Ignorare gli errori negli script
- Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
- Inviare un'e-mail con ASP.NET