GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment signer vos images Docker pour accroître 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 accroître 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 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.

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 la CLI Docker.

Exécutez docker trust key generate your-name pour créer une clé. Vous serez invité à saisir une phrase de passe. 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 Docker Registry privé, un processus de configuration plus complexe est requis.

Le serveur de registre n'offre pas de prise en charge intégrée des signatures. Vous avez besoin d'un service Docker Notary distinct qui gère la vérification des signatures pour les transmissions 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 rendre Notary opérationnel 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 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 encodé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 pour chaque référentiel. Cela vous permet d'isoler les images les unes des autres et active la prise en charge des contributeurs tiers délégués. Vous pouvez ajouter ultérieurement d'autres personnes disposant de droits de publication en leur demandant de 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 commande. Assurez-vous que chaque image est balisée avec l'URL de registre correcte.

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 ensuite. Vous devrez configurer une clé de référentiel et une phrase de passe 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 à Notaire. Définissez 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 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 La variable réapparaît avec une plus grande importance lorsqu'il s'agit de vérifier les images que vous extrayez. 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 la confiance du contenu.

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

Lorsque la variable est définie, toutes les extractions d'images seront vérifiées par rapport au serveur Notary 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 peuvent être arrivés dans tar archives provenant d'une source non sécurisée.

Modifier /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 la modification.

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 registry.example.com/my-image:latest

Si vous avez publié une image que vous ne souhaitez plus signer, utilisez le docker trust revoke commande. 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 d'images. Si vous poussez des images vers Docker Hub, vous avez déjà tout ce dont vous avez besoin pour utiliser la fonctionnalité. Définissez 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 la peine 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 se trouve dans son référentiel GitHub.


Docker
  1. Comment déplacer des images Docker entre les hôtes

  2. Comment rechercher, extraire, répertorier et supprimer des images Docker sous Linux

  3. Comment utiliser les images Docker, les conteneurs et les Dockerfiles en profondeur

  4. Comment partager des images Docker avec d'autres

  5. Comment modifier les images Docker

Comment créer des images Docker dans un pipeline GitLab CI

Comment mettre à jour les images Docker vers la dernière version

Comment copier des fichiers avec Docker cp dans votre conteneur Docker

Gardez vos images Docker gérables avec Docker Image Prune

Comment utiliser Docker Commit pour modifier les images de conteneur

Comment répertorier / rechercher / extraire des images docker sous Linux