web-dev-qa-db-fra.com

Comment gérer les mises à jour de sécurité dans les conteneurs Docker?

Lors du déploiement d'applications sur des serveurs, il y a généralement une séparation entre ce que l'application regroupe avec elle-même et ce qu'elle attend de la plate-forme (système d'exploitation et packages installés). Un point de cela est que la plate-forme peut être mise à jour indépendamment de l'application. Cela est utile, par exemple, lorsque des mises à jour de sécurité doivent être appliquées de toute urgence aux packages fournis par la plate-forme sans avoir à reconstruire l'intégralité de l'application.

Traditionnellement, les mises à jour de sécurité ont été appliquées simplement en exécutant une commande de gestionnaire de packages pour installer les versions mises à jour des packages sur le système d'exploitation (par exemple, "yum update" sur RHEL). Mais avec l'avènement d'une technologie de conteneur telle que Docker où les images de conteneur regroupent essentiellement à la fois l'application et la plate-forme, quelle est la manière canonique de maintenir à jour un système avec des conteneurs? L'hôte et les conteneurs ont leurs propres ensembles de packages indépendants qui doivent être mis à jour et mis à jour sur l'hôte ne mettront à jour aucun package à l'intérieur des conteneurs. Avec la sortie de RHEL 7, où les conteneurs Docker sont particulièrement présentés, il serait intéressant d'entendre quelle est la méthode recommandée par Redhat pour gérer les mises à jour de sécurité des conteneurs.

Réflexions sur quelques-unes des options:

  • Laisser le gestionnaire de packages mettre à jour les packages sur l'hôte ne mettra pas à jour les packages à l'intérieur des conteneurs.
  • Le fait de devoir régénérer toutes les images de conteneur pour appliquer les mises à jour semble rompre la séparation entre l'application et la plate-forme (la mise à jour de la plate-forme nécessite un accès au processus de création d'application qui génère les images Docker).
  • L'exécution de commandes manuelles à l'intérieur de chacun des conteneurs en cours d'exécution semble lourde et les modifications risquent d'être écrasées la prochaine fois que les conteneurs seront mis à jour à partir des artefacts de version de l'application.

Aucune de ces approches ne semble donc satisfaisante.

123
Markus Hallmann

Une application et une "plateforme" de bundles d'images Docker, c'est exact. Mais généralement, l'image est composée d'une image de base et de l'application réelle.

La manière canonique de gérer les mises à jour de sécurité consiste donc à mettre à jour l'image de base, puis à reconstruire l'image de votre application.

51

Les conteneurs sont censés être légers et interchangeables. Si votre conteneur a un problème de sécurité, vous reconstruisez une version du conteneur qui est corrigée et déployez le nouveau conteneur. (de nombreux conteneurs utilisent une image de base standard qui utilise des outils de gestion de packages standard comme apt-get pour installer leurs dépendances, la reconstruction tirera les mises à jour des référentiels)

Bien que vous puissiez patcher à l'intérieur des conteneurs, cela ne va pas bien évoluer.

7
Paul R

Ceci est géré automatiquement dans SUSE Enterprise Linux à l'aide de zypper-docker (1)

SUSE/zypper-docker

Démarrage rapide Docker

3
pwl

Tout d'abord, bon nombre de vos mises à jour que vous exécutiez traditionnellement dans le passé ne seront tout simplement pas à l'intérieur du conteneur lui-même. Le conteneur doit être un sous-ensemble assez léger et petit du système de fichiers complet que vous avez l'habitude de voir dans le passé. Les packages que vous devez mettre à jour sont ceux qui font partie de votre DockerFile, et puisque vous avez le DockerFile, vous devriez pouvoir garder une trace des packages et des ID de conteneur qui nécessitent des mises à jour. L'interface utilisateur de Cloudstein qui sera bientôt publiée conserve une trace de ces ingrédients DockerFile pour vous afin que l'on puisse créer le schéma de mise à jour qui convient le mieux à leurs conteneurs. J'espère que cela t'aides

0
Ben Grissinger

c'est généralement encore pire que les trois choix que vous avez fournis. La plupart des images de docker ne sont pas construites avec des gestionnaires de packages, vous ne pouvez donc pas simplement utiliser Shell dans l'image de docker et émettre une mise à jour. Vous devrez soit reconstruire, soit récupérer l'image docker.

Le fait que vous ayez besoin de reconstruire ou que vous en voyez d'autres pour les correctifs de sécurité semble déraisonnable dans la plupart des cas.

J'envisageais de déployer sonarr et radarr dans des conteneurs docker, mais le fait de savoir qu'ils ne recevront pas les mises à jour de sécurité régulières de mon conteneur est une rupture. La gestion des mises à jour de sécurité pour mon conteneur est assez compliquée sans avoir à faire en sorte d'avoir à appliquer manuellement les mises à jour de sécurité à chaque image Docker individuellement.

0
Lee Burch