Comment signer vos images Docker pour augmenter la confiance –
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é à travers le docker trust
Commande CLI. 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.
Sommaire
Génération de clés
Vous aurez besoin d’une paire de clés pour commencer à utiliser Content Trust. Les paires de clés peuvent être émises par les autorités de certification ou générées par Docker CLI.
Cours 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 en utilisant 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 Docker Registry privé, un processus de configuration plus complexe est requis.
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 envois et les extractions d’images. 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 mettre en place 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 de l’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 le ca-certificates
emplacement de stockage. update-ca-certificates
recharge tous les certificats, ajoutant l’autorité de notaire à votre système.
Si vous envisagez d’exécuter Notary en production, vous devrez configurer l’authentification afin que seuls les utilisateurs autorisés puissent ajouter de nouvelles clés. le NOTARY_AUTH
La variable d’environnement doit être définie lors du démarrage du service avec docker-compose
. Cela accepte les informations d’identification codées en Base64 dans username:password
format. Vous serez invité à les fournir lors de l’interaction avec le notaire.
export NOTARY_AUTH=$(echo "username" | base64):$(echo "password" | base64)
docker-compose up -d
Vous êtes maintenant prêt à ajouter votre clé publique à votre serveur Notary. 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 ultérieurement en leur faisant répéter la commande avec leur clé privée.
docker trust signer add your-key-name registry.example.com/my-image
Vous devrez entrer la phrase secrète de la clé. Il sera alors disponible sur votre serveur de registre.
Images de signature
Une fois votre clé dans le registre, vous pouvez commencer à signer des images. Utilisez le docker trust sign
commander. Assurez-vous que chaque image est étiquetée avec la bonne URL de registre.
docker trust sign registry.example.com/my-image:latest
Cette commande signera l’image avec votre clé, puis la poussera directement dans le registre. Il n’est pas nécessaire d’exécuter manuellement docker push
après. 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. Met le DOCKER_CONTENT_TRUST
variable d’environnement pour que les commandes Docker CLI détectent Content Trust et l’appliquent automatiquement.
export DOCKER_CONTENT_TRUST=1
docker push registry.example.com/my-image:latest
Vous verrez que la sortie du shell correspond à ce que docker trust sign
produit. Docker effectue les mêmes actions que la commande plus explicite.
Vérification des images de confiance
le DOCKER_CONTENT_TRUST
variable réapparaît avec une plus grande importance lorsqu’il s’agit de vérifier les images que vous tirez. 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 registry.example.com/my-image:latest
Lorsque la variable est définie, toutes les images extraites seront vérifiées par rapport au serveur de notaire 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 abandonné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 sont peut-être arrivés en tar
archives provenant d’une source non sécurisée.
Éditer /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 en utilisant 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 registry.example.com/my-image:latest
Si vous avez publié une image que vous ne souhaitez plus signer, utilisez le docker trust revoke
commander. 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 registry.example.com/my-image:latest
Résumé
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é. Met le DOCKER_CONTENT_TRUST
variable d’environnement et utilisez les commandes Docker comme d’habitude.
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.