Docker trust

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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_TRUST est 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.