Comment signer vos images Docker pour augmenter la confiance

0
143

La plupart des images Docker sont distribuées sans aucune vérification qu'elles sont ce qu'elles prétendent être. Vous pouvez augmenter la confiance dans vos images en les signant numériquement. Cela prouve aux utilisateurs que vous avez publié l'image, pas un imposteur.

Le système de signature de Docker est connu sous le nom de confiance de contenu. Il est exposé via la commande CLI docker trust. Content Trust utilise des ensembles de clés pour permettre aux registres de vérifier l'identité des éditeurs potentiels. Les utilisateurs d'images signées peuvent être sûrs qu'elles proviennent de la source attendue.

Génération de clés

Vous aurez besoin d'une paire de clés pour commencer à utiliser le contenu Confiance. Les paires de clés peuvent être émises par des autorités de certification ou générées par Docker CLI.

Exécutez docker trust key generate your-name pour créer une clé. Vous serez invité à saisir une phrase secrète. Celui-ci devra être fourni à chaque fois que vous utiliserez la clé pour signer ou vérifier des images. Appuyez sur Entrée à chaque invite pour continuer.

Une fois que vous avez terminé, deux fichiers seront générés dans ~/.docker/trust : la clé privée et sa clé publique correspondante. Comme pour les clés SSH, la clé privée ne doit jamais être partagée et ne doit pas être perdue. Si vous devez vous déplacer entre les machines, vous pouvez importer un fichier de clé privée dans une autre installation Docker à l'aide de docker trust key load my-key.pem.

Ajout de votre clé publique à votre registre

Docker Hub prend en charge toutes les fonctionnalités de docker trust. Si vous utilisez un serveur de registre Docker privé, un processus de configuration plus complexe est requis.

Publicité

Le serveur de registre n'offre pas de prise en charge de signature intégrée. Vous avez besoin d'un service Docker Notary distinct qui gère la vérification de la signature pour les push et pull d'image. Notary a trois composants, le serveur, un service de signature et une base de données MySQL. Il doit être déployé sur la même URL que votre serveur de registre.

Vous pouvez faire fonctionner Notary en utilisant son fichier Docker Compose :

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

Ce déploiement de base s'exécutera avec un certificat TLS auto-signé. Il est destiné à un usage de développement uniquement. Vous devrez faire confiance au fichier d'autorité de certification fixtures/root-ca.crt dans le référentiel avant que les clients puissent se connecter avec succès.

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

Les commandes ci-dessus copieront le fichier de certificat dans l'emplacement de stockage ca-certificates. update-ca-certificates recharge tous les certificats, ajoutant l'autorité notariale à votre système.

Si vous comptez exécuter Notary en production, vous devrez configurer l'authentification afin que seuls les utilisateurs autorisés puissent ajouter de nouvelles clés. La variable d'environnement NOTARY_AUTH doit être définie lors du démarrage du service avec docker-compose. Cela accepte les informations d'identification codées en Base64 au format nom d'utilisateur: mot de passe. Vous serez invité à les fournir lors de l'interaction avec le notaire.

export NOTARY_AUTH=$(echo “nom d'utilisateur” | base64):$(echo “mot de passe” | base64) docker-compose up -d Publicité

Vous êtes maintenant prêt à ajouter votre clé publique à votre serveur de notaire. Les clés sont ajoutées par référentiel. Cela vous permet d'isoler les images les unes des autres et de prendre en charge les contributeurs tiers délégués. Vous pouvez ajouter d'autres personnes avec des droits de publication plus tard en leur faisant répéter la commande avec leur clé privée.

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

Vous&#8217 Vous devrez saisir la phrase secrète de la clé. Elle sera alors disponible sur votre serveur de registre.

Signature d'images

Une fois votre clé dans le registre, vous pouvez commencer à signer des images. Utilisez la commande docker trust sign. Assurez-vous que chaque image est balisée avec l'URL de registre correcte.

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

Cette commande signera l'image avec votre clé, puis la poussera directement vers le enregistrement. Il n'est pas nécessaire d'exécuter manuellement Docker Push par la suite. Vous devrez configurer une clé de référentiel et une phrase secrète pour protéger les données de confiance de l'image individuelle. Suivez chaque invite pour configurer vos clés de signature.

Si vous avez des workflows existants utilisant docker push, vous pouvez opter pour cette commande au lieu de docker trust. Effectuez les étapes précédentes pour créer une clé et l'ajouter à Notary. Définissez la variable d'environnement DOCKER_CONTENT_TRUST pour que les commandes Docker CLI détectent Content Trust et l'appliquent automatiquement.

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

Vous verrez que la sortie du shell correspond à ce que le signe de confiance docker produit. Docker effectue les mêmes actions que la commande plus explicite.

Vérification des images de confiance

La variable DOCKER_CONTENT_TRUST réapparaît avec une plus grande importance lorsqu'il s'agit de vérifier les images tu tires. Docker ne tente pas de vérifier les images par défaut, même si elles contiennent des données de confiance. Vous devez définir la variable d'environnement dans votre shell pour activer la validation de confiance du contenu.

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

Lorsque la variable est définie, toutes les extractions d'images seront vérifiées par rapport au serveur notarial de leur registre. Si le notaire ne peut fournir aucune donnée de confiance, l'image est traitée comme non signée et l'extraction sera annulée. Cela vous protège des images publiées par des acteurs malveillants se faisant passer pour un véritable éditeur.

Les utilisateurs de Docker Enterprise peuvent configurer un paramètre de démon facultatif pour empêcher Docker Engine de fonctionner avec des images non approuvées déjà sur l'hôte. Ceux-ci peuvent être arrivés dans les archives tar à partir d'une source non sécurisée.

Modifiez /etc/docker/daemon.json et ajoutez la clé suivante :

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

Rechargez la configuration du démon Docker avec systemctl reload docker pour appliquer le changement.

Vous pouvez inspecter l'état de confiance d'une image à l'aide de docker trust inspect. Cela affichera les signatures associées à l'image, vous permettant de vérifier si elle a été signée.

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

Si vous avez publié un image que vous ne souhaitez plus signer, utilisez la commande docker trust revoke. Cela supprimera les données de confiance de l'image, ce qui entraînera l'échec de toutes les vérifications ultérieures du client Docker.

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

Résumé< /h2>

Docker Content Trust ajoute des signatures numériques à l'écosystème Docker, augmentant la sécurité lors de l'utilisation des images. Si vous transférez des images vers Docker Hub, vous avez déjà tout ce dont vous avez besoin pour utiliser la fonctionnalité. Définissez la variable d'environnement DOCKER_CONTENT_TRUST et utilisez les commandes Docker comme d'habitude.

Publicité

Pour les utilisateurs de registre auto-hébergés, la configuration est plus compliquée mais vaut toujours l'effort dans un environnement critique pour la confiance. Au moment de la rédaction de cet article, Notary n'a toujours pas de version stable officielle et la documentation réside dans son référentiel GitHub.