Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub

di Matteo Tumiati, in DevOps,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi