Docker trust
| Fiche express | |
|---|---|
| Type | Signature cryptographique d'images (Docker Content Trust) |
| Sigle | DCT |
| Variable d'activation | DOCKER_CONTENT_TRUST=1
|
| Commandes clés | docker trust key generate · docker trust signer add · docker trust sign
|
| Voir aussi | Docker DCT · Docker registry |
Docker Content Trust (DCT) permet de signer une image au moment où elle est poussée vers un registre, et de n'autoriser que le retrait ('pull) d'images signées par une clé de confiance. L'objectif est de garantir lintégrité et la provenance d'une image : un attaquant qui compromettrait un registre ou interceptrait un flux ne pourrait pas substituer une image sans invalider sa signature.
À ne pas confondre avec Docker DCT : malgré la proximité de nom, cette page-là documente le Docker Trusted Registry (DTR), un registre d'entreprise avec contrôle d'accès par rôle et scan de vulnérabilités — un produit distinct de la signature d'images traitée ici.
Principe
Activer Content Trust côté client Docker force la vérification de signature à chaque pull et chaque run, et exige une signature à chaque push :
export DOCKER_CONTENT_TRUST=1
Avec cette variable active, toute tentative d'utiliser une image non signée est refusée. La désactiver (DOCKER_CONTENT_TRUST=0) revient à l'ancien comportement, sans vérification.
Mise en place
Connexion au registre
docker login
Génération de la clé de signature
docker trust key generate <utilisateur>
docker trust signer add --key <utilisateur>.pub <utilisateur> <utilisateur>/<depot>
La clé privée générée localement (<utilisateur>.pem ou équivalent) est la pièce sensible : sa perte ou sa compromission remet en cause la confiance accordée à toutes les images signées avec elle. Elle doit être sauvegardée hors ligne et protégée par une phrase secrète.
Exemple : image non signée vs image signée
FROM busybox:latest
CMD echo "It worked!"
# Construction et publication d'une image non signée
docker build -t <utilisateur>/dct-test:unsigned .
docker push <utilisateur>/dct-test:unsigned
# Sans Content Trust, l'image non signée s'exécute normalement
docker run <utilisateur>/dct-test:unsigned
# Avec Content Trust activé, une image non signée est refusée
export DOCKER_CONTENT_TRUST=1
docker run <utilisateur>/dct-test:unsigned
# => erreur : aucune signature de confiance trouvée
# Construction d'une image destinée à être signée
docker build -t <utilisateur>/dct-test:signed .
# Signature explicite au push
docker trust sign <utilisateur>/dct-test:signed
# Une fois signée, l'image peut être retirée et exécutée avec DCT actif
docker image rm <utilisateur>/dct-test:signed
docker run <utilisateur>/dct-test:signed
# Revenir au mode sans vérification (pour comparaison)
export DOCKER_CONTENT_TRUST=0
docker run <utilisateur>/dct-test:unsigned
À retenir
- Content Trust protège l'intégrité et la provenance d'une image, pas son contenu : une image signée peut malgré tout contenir des vulnérabilités connues (voir le scan de vulnérabilités côté registre d'entreprise, Docker DCT).
- La variable
DOCKER_CONTENT_TRUSTest une décision côté client : rien n'empêche un poste sans cette variable de pousser ou tirer des images non signées, sauf si le registre lui-même impose la signature. - À combiner avec un registre correctement sécurisé (voir Docker registry) : la signature protège l'intégrité de l'image, pas la confidentialité ou le contrôle d'accès au registre.