GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come firmare le tue immagini Docker per aumentare la fiducia

La maggior parte delle immagini Docker vengono distribuite senza alcuna verifica che siano ciò che affermano di essere. Puoi aumentare la fiducia nelle tue immagini firmandole digitalmente. Questo 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 docker trust comando CLI. Content Trust utilizza i set di chiavi per consentire ai registri di verificare l'identità dei potenziali editori. Gli utenti delle immagini firmate possono essere certi che provengono dalla fonte prevista.

Generazione di chiavi

Avrai bisogno di una coppia di chiavi per iniziare a utilizzare Content Trust. Le coppie di chiavi possono essere emesse dalle autorità di certificazione o generate dalla Docker CLI.

Esegui docker trust key generate your-name 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.

Al termine, verranno generati due file in ~/.docker/trust :la chiave privata e la chiave pubblica corrispondente. Analogamente alle chiavi SSH, la chiave privata non deve mai essere condivisa e non deve essere persa. Se devi spostarti tra le macchine, puoi importare un file di chiave privata in un'altra installazione Docker usando docker trust key load my-key.pem .

Aggiunta della tua chiave pubblica al tuo registro

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

Il server del Registro di sistema non offre il supporto per la firma integrato. È necessario un servizio Docker Notary 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 server del registro.

Puoi far funzionare Notary utilizzando 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 considerare attendibile il 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 in ca-certificates posizione di archiviazione. 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. Il NOTARY_AUTH la variabile di ambiente deve essere impostata all'avvio del servizio con docker-compose . Questo accetta credenziali con codifica Base64 in username:password formato. Ti verrà richiesto di fornirli quando interagisci con il Notaio.

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

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

docker trust signer add your-key-name registry.example.com/my-image

Dovrai inserire la passphrase della chiave. Sarà quindi disponibile sul tuo server di registro.

Firma immagini

Una volta che la tua chiave è nel registro, puoi iniziare a firmare le immagini. Usa il docker trust sign comando. Assicurati che ogni immagine sia contrassegnata con l'URL del registro corretto.

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

Questo comando firmerà l'immagine con la tua chiave e poi la spingerà direttamente nel registro. Non è necessario eseguire manualmente docker push dopo. Dovrai configurare una chiave del repository e una passphrase per proteggere i dati di attendibilità della singola immagine. Segui ogni richiesta per configurare le chiavi di firma.

Se hai flussi di lavoro esistenti che utilizzano docker push , puoi optare per quel comando invece di docker trust . Completare i passaggi precedenti per creare una chiave e aggiungerla a Notaio. Imposta il DOCKER_CONTENT_TRUST variabile di ambiente per fare in modo che i comandi Docker CLI rilevino Content Trust e lo applichino automaticamente.

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

Vedrai che l'output della shell corrisponde a ciò che docker trust sign produce. Docker esegue le stesse azioni del comando più esplicito.

Verifica delle immagini attendibili

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

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

Quando la variabile è impostata, tutti i pull di immagini verranno verificati rispetto al server del notaio del registro. Se il notaio non è in grado di fornire alcun dato attendibile, l'immagine viene considerata come non firmata e il pull verrà interrotto. Questo ti protegge dalle immagini pubblicate da attori malintenzionati mascherati da vero editore.

Gli utenti di Docker Enterprise possono configurare un'impostazione daemon facoltativa per impedire a Docker Engine di lavorare con immagini non attendibili già presenti sull'host. Questi potrebbero essere arrivati ​​in tar archivi 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 verificare se è stata firmata.

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

Se hai pubblicato un'immagine che non desideri più firmare, utilizza la docker trust revoke comando. Ciò eliminerà i dati attendibili dell'immagine, causando il fallimento di tutte le successive verifiche del client Docker.

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

Riepilogo

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

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


Docker
  1. Come spostare le immagini Docker tra host

  2. Come cercare, estrarre, elencare ed eliminare immagini Docker su Linux

  3. Come utilizzare le immagini Docker, i contenitori e i file Docker in modo approfondito

  4. Come condividere le immagini Docker con altri

  5. Come modificare le immagini Docker

Come creare immagini Docker in una pipeline CI GitLab

Come aggiornare le immagini Docker all'ultima versione

Come copiare file con Docker cp nel tuo Docker Container

Mantieni gestibili le tue immagini Docker con Docker Image Prune

Come utilizzare Docker Commit per modificare le immagini del contenitore

Come elencare / cercare / estrarre le immagini della finestra mobile su Linux