Per questioni di compliance e security, molto spesso è necessario garantire che tutte le immagini di Docker che poi finiranno in un cluster di Kubernetes provengano da container registry "fidati". Tra questi ci possono anche essere alcuni endpoint pubblici, che non richiedono autenticazione.
Vediamo in questa prima fase come poter recuperare le informazioni riguardanti i container registry delle immagini già presenti all'interno di un cluster:
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" \ |tr -s '[[:space:]]' '\n' \ |sort \ |uniq -c
Come si può notare dallo script, come prima cosa andiamo a chiedere tramite kubectl di mandarci la lista dei pod disponibili su tutti i namespace, a prescindere dal loro attuale stato di esecuzione. L'output di questa chiamata deve includere tutte le immagini di tutti i container che sono contenuti all'interno di ciascun pod.
Successivamente, mandiamo in pipe l'output per dividere l'output su una riga per immagine e le ordiniamo alfabeticamente, così che sia più semplice leggerne l'output. Poichè diverse immagini (come, ad esempio, potrebbe essere busybox per gli init container) potrebbero essere ripetute, ne facciamo anche un calcolo univoco per raggruppare eventuali valori duplicati.
In questa fase sicuramente non abbiamo protetto il nostro cluster, in alcun modo. Tuttavia, siamo più consapevoli di che cosa ci troviamo all'interno e possiamo prendere decisioni più consapevoli e intraprendere azioni più mirate all'eliminazione di eventuali immagini vulnerabili e provenienti da fonti "non sicure".
In un prossimo script vedremo anche come prevenire il deploy di immagini da container registry non autorizzati.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sostituire la GitHub Action di login su private registry
Eseguire attività basate su eventi con Azure Container Jobs
Eseguire le GitHub Actions offline
Copiare automaticamente le secret tra più repository di GitHub
Utilizzare politiche di resiliency con Azure Container App
Eseguire attività pianificate con Azure Container Jobs
Hosting di componenti WebAssembly in un'applicazione Blazor static
Effettuare il pull di git LFS in un workflow di GitHub
Short-circuiting della Pipeline in ASP.NET Core
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Utilizzare Model as a Service su Microsoft Azure
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati