Come firmare le tue immagini Docker per aumentare la fiducia

0
156

La maggior parte delle immagini Docker vengono distribuite senza alcuna verifica che siano affermano di essere. Puoi aumentare la fiducia nelle tue immagini firmandole digitalmente. Ciò dimostra agli utenti che hai pubblicato l'immagine, non un impostore.

Il sistema di firma di Docker è noto come attendibilità dei contenuti. Viene esposto tramite il comando CLI docker trust. Content Trust utilizza set di chiavi per consentire ai registri di verificare l'identità dei potenziali editori. Gli utenti delle immagini firmate possono essere certi che provengano dalla fonte prevista.

Generazione di chiavi

Ti servirà una coppia di chiavi per iniziare a utilizzare i contenuti Fiducia. Le coppie di chiavi possono essere emesse dalle autorità di certificazione o generate dalla Docker CLI.

Esegui docker trust key genera il tuo nome per creare una chiave. Ti verrà chiesto di inserire una passphrase. Questo dovrà essere fornito ogni volta che si utilizza la chiave per firmare o verificare le immagini. Premi invio ad ogni richiesta per continuare.

Una volta terminato, verranno generati due file in ~/.docker/trust: la chiave privata e la sua chiave pubblica corrispondente. Analogamente alle chiavi SSH, la chiave privata non deve mai essere condivisa e non deve essere persa. Se devi spostarti da un computer all'altro, puoi importare un file di chiave privata in un'altra installazione di Docker utilizzando docker trust key load my-key.pem.

Aggiunta della chiave pubblica al registro

Docker Hub supporta tutte le funzionalità di docker trust. Se stai utilizzando un server Docker Registry privato, è necessario un processo di installazione più complesso.

Annuncio

Il server del Registro di sistema non offre il supporto per la firma integrato. È necessario un servizio notarile Docker separato che gestisca la verifica della firma per push e pull di immagini. Notary ha tre componenti, il server, un servizio di firma e un database MySQL. Dovrebbe essere distribuito sullo stesso URL del tuo server di registro.

Puoi far funzionare Notary usando il suo file Docker Compose:

git clone https://github.com/theupdateframework/notary.git docker-compose up -d

Questa distribuzione di base verrà eseguita con un certificato TLS autofirmato. È destinato esclusivamente all'uso in fase di sviluppo. Dovrai fidarti del file dell'autorità di certificazione fixtures/root-ca.crt nel repository prima che i client possano connettersi correttamente.

sudo mkdir -p /usr/share/ca-certificates/extra sudo cp fixtures/root-ca.crt /usr/share/ca-certificates/extra/notary.crt sudo update-ca-certificates

I comandi precedenti copieranno il file del certificato nella posizione di archiviazione di ca-certificates. update-ca-certificates ricarica tutti i certificati, aggiungendo l'autorità notarile al tuo sistema.

Se intendi eseguire Notary in produzione, dovrai configurare l'autenticazione in modo che solo gli utenti autorizzati possano aggiungere nuove chiavi. La variabile d'ambiente NOTARY_AUTH deve essere impostata all'avvio del servizio con docker-compose. Accetta credenziali con codifica Base64 in formato nome utente: password. Ti verrà chiesto di fornirli quando interagisci con il notaio.

export NOTARY_AUTH=$(echo “username” | base64):$(echo “password” | base64) docker-compose up -d Advertisement

Ora sei pronto per aggiungere la tua chiave pubblica al tuo server notarile. Le chiavi vengono aggiunte in base al repository. Ciò consente di isolare le immagini l'una dall'altra e consente il supporto per i contributori di terze parti delegati. Puoi aggiungere altre persone con diritti di pubblicazione in un secondo momento facendo in modo che ripetano il comando con la loro chiave privata.

docker trust signer aggiungi nome-chiave register.example.com/my-image

You&#8217 ;dovrò inserire la passphrase della chiave. Sarà quindi disponibile sul server del registro.

Immagini per la firma

Una volta che la tua chiave è nel registro, puoi iniziare a firmare le immagini. Usa il comando Docker Trust Sign. Assicurati che ogni immagine sia contrassegnata con l'URL di registro corretto.

docker trust sign register.example.com/my-image:latest

Questo comando firmerà l'immagine con la tua chiave e quindi la spingerà direttamente verso registro. Non è necessario eseguire manualmente Docker Push in seguito. Dovrai impostare una chiave del repository e una passphrase per proteggere i dati di attendibilità della singola immagine. Segui ogni richiesta per impostare le tue chiavi di firma.

Se disponi di flussi di lavoro esistenti che utilizzano docker push, puoi optare per quello comando invece di docker trust. Completa i passaggi precedenti per creare una chiave e aggiungerla al notaio. Imposta la variabile di ambiente DOCKER_CONTENT_TRUST in modo che i comandi Docker CLI rilevino Content Trust e lo applichino automaticamente.

export DOCKER_CONTENT_TRUST=1 docker push register.example.com/my-image:latest

Vedrai che l'output della shell corrisponde a ciò che il segno di fiducia della finestra mobile produce. Docker esegue le stesse azioni del comando più esplicito.

Verifica di immagini attendibili

La variabile DOCKER_CONTENT_TRUST riappare con maggiore importanza quando si tratta di verificare le immagini tiri. Docker non tenta di verificare le immagini per impostazione predefinita, anche se contengono dati di attendibilità. Devi impostare la variabile d'ambiente nella tua shell per attivare la convalida dell'attendibilità del contenuto.

export DOCKER_CONTENT_TRUST=1 docker pull register.example.com/my-image:latest Advertisement

Quando la variabile è impostata, tutte le immagini pull verranno verificate rispetto al server notarile del registro. Se il notaio non può fornire dati attendibili, l'immagine viene considerata non firmata e il pull verrà interrotto. Questo ti protegge dalle immagini pubblicate da attori malintenzionati che si spacciano per veri editori.

Gli utenti di Docker Enterprise possono configurare un'impostazione daemon facoltativa per impedire a Docker Engine di funzionare con immagini non attendibili già presenti nell'host. Questi potrebbero essere arrivati ​​negli archivi tar da una fonte non sicura.

Modifica /etc/docker/daemon.json e aggiungi la seguente chiave:

{ “content-trust”: { “mode”: “enforced” } }

Ricarica la configurazione del demone Docker con systemctl reload docker per applicare la modifica.

Puoi controllare lo stato di attendibilità di un'immagine utilizzando docker trust inspect. Questo mostrerà le firme associate all'immagine, permettendoti di controllare se è stata firmata.

docker trust inspect register.example.com/my-image:latest

Se hai pubblicato un'immagine che non vuoi più firmare, usa il comando docker trust revoke. Ciò eliminerà i dati di attendibilità dell'immagine, facendo fallire tutte le successive verifiche del client Docker.

docker trust revoke register.example.com/my-image:latest

Riepilogo< /h2>

Docker Content Trust aggiunge firme digitali all'ecosistema Docker, aumentando la sicurezza durante l'utilizzo delle immagini. Se invii le immagini a Docker Hub, hai già tutto il necessario per utilizzare la funzione. Imposta la variabile d'ambiente DOCKER_CONTENT_TRUST e usa i comandi Docker normalmente.

Annuncio

Per gli utenti del registro self-hosted, l'installazione è più complicata ma vale comunque la pena in un ambiente critico per la fiducia. Al momento in cui scriviamo, Notary non ha ancora una versione stabile ufficiale e la documentazione risiede nel suo repository GitHub.