Qu’est-ce que les conteneurs ?

La technologie de conteneurs, ou simplement « conteneurs », est un mécanisme d’empaquetage d’applications permettant à celles-ci de s’exécuter de façon isolée par rapport à d’autres processus. Les conteneurs doivent leur nom au secteur du transport maritime. Ces unités logicielles constituées de code et de dépendances permettent aux applications de s’exécuter rapidement, de manière fiable et uniforme, quel que soit l’environnement informatique. 

Dans cet article, nous expliquons brièvement comment fonctionnent les conteneurs et les raisons de leur succès. Nous en présentons les principaux fournisseurs et proposons quelques bonnes pratiques de sécurité à mettre en œuvre lorsque vous adoptez cette approche de la création de logiciels.

Comment fonctionnent les conteneurs et quels sont leurs avantages ?

Les développeurs rencontrent de nombreuses difficultés lorsque les logiciels de prise en charge, la topologie réseau ou les politiques de sécurité qu’ils utilisent dans différents environnements ne sont pas identiques (p. ex. environnement de mise en service isolé et environnement de production ; data centers physiques et clouds privés/publics). Ces incohérences peuvent notamment compliquer l’identification des vulnérabilités et ajouter des obstacles inutiles au déploiement d’une application. 

Souvent comparés aux machines virtuelles, les conteneurs permettent de limiter ce type de problèmes. Comment ? Grâce à un processus de dissociation permettant aux applications de s’exécuter de manière cohérente quel que soit l’environnement choisi par le développeur. Comme les machines virtuelles, les conteneurs permettent aux applications d’être empaquetées avec des bibliothèques et autres dépendances, ce qui crée des environnements isolés où le logiciel s’exécute. Néanmoins, étant donné que les conteneurs sont virtualisés au niveau du système d’exploitation plutôt qu’au niveau de la pile matérielle et qu’ils peuvent être exécutés directement sur le noyau du système d’exploitation, ils sont bien plus légers et donc plus faciles à utiliser. 

 

 

Cette approche permet aux développeurs de se concentrer sur la logique et les dépendances des applications, mais aussi de travailler plus rapidement, de déployer les logiciels plus efficacement et de monter en charge plus facilement. En outre, les équipes chargées des opérations IT peuvent se focaliser sur le déploiement et la gestion des applications sans avoir à s’inquiéter de problèmes de configuration et de version.

Technologies de conteneurs prisées

Des solutions d’entreprise de renom aux plateformes open source gratuites, vous avez le choix entre plusieurs fournisseurs de services de conteneurs au fonctionnement légèrement différent.

  • À l’heure actuelle, pour de nombreux développeurs, Docker constitue la référence pour la création d’applications conteneurisées, à tel point que « Docker » et « conteneurs » sont presque synonymes. La plupart des principaux frameworks open source sans serveur et offres IaaS (Infrastructure-as-a-Service) ont été créés dans le cadre du projet Moby lancé par Docker. 
  • Kubernetes est un système d’orchestration de conteneurs gratuit et open source. Comparé à Docker, qui permet d’utiliser des conteneurs, Kubernetes est une solution capable d’automatiser les processus de déploiement, gestion, mise à jour et mise à l’échelle des conteneurs.
  • Red Hat OpenShift est une plateforme pour les déploiements de conteneurisation sur site, hybrides et cloud. Pour faire simple, il s’agit d’une offre PaaS (Platform-as-a-Service) optimisée par Kubernetes et Docker qui aide les développeurs à déployer des applications.
  • Rancher est une solution open source développée par Rancher Labs. Elle a pour objectif de simplifier le déploiement de Kubernetes et permet la gestion de plusieurs clusters sur différentes infrastructures. 

Avantages de la conteneurisation

En général, la technologie de conteneurs est facile à gérer, ce qui permet aux développeurs de déployer plus facilement des applications à grande échelle.

Efficacité et agilité renforcées 

Comme mentionné précédemment, les conteneurs sont bien plus légers que les machines virtuelles, car ils sont virtualisés au niveau du système d’exploitation, avec plusieurs conteneurs s’exécutant sur un seul noyau. Les applications peuvent ainsi être déployées, corrigées et mises à l’échelle plus rapidement, ce qui aide les équipes DevOps à rester agiles et à accélérer les cycles de production. Qui plus est, les conteneurs sollicitent beaucoup moins la mémoire. 

Environnements plus cohérents

Les conteneurs permettent aux développeurs de créer des environnements cohérents pouvant être plus facilement isolés des autres applications. Et comme les conteneurs peuvent également inclure des dépendances logicielles, p. ex. du code binaire, des runtimes de langage de programmation, des fichiers de configuration et autres bibliothèques, ils garantissent une cohérence quel que soit l’environnement dans lequel une application est déployée.

Un environnement cohérent permet aux développeurs et aux équipes IT de gagner en productivité et de consacrer moins de temps à des tâches telles que le débogage et le diagnostic des problèmes d’environnement afin de pouvoir se concentrer davantage sur le développement des fonctionnalités demandées par les utilisateurs.

Portabilité accrue

Les conteneurs peuvent s’exécuter partout, sur tous les systèmes d’exploitation, y compris Linux, Mac et Windows. Ils peuvent également s’exécuter sur des machines virtuelles, dans des data centers ou dans le cloud public. Cette approche est idéale pour les développeurs, car elle leur offre la flexibilité nécessaire pour exécuter leurs logiciels dans l’environnement de leur choix. 

Défis de la conteneurisation

Comme la plupart des autres logiciels, les conteneurs peuvent présenter des problèmes et des risques au cours du processus de développement.

Faible taux d’adoption 

Tout d’abord, l’implémentation de la technologie de conteneurs à l’échelle de votre entreprise peut s’avérer difficile. L’adoption de conteneurs, et leur utilisation efficace, exigent la modification des processus et de l’infrastructure ; il est donc parfois compliqué d’obtenir l’adhésion des développeurs.

Extension possible des surfaces d’attaque

Les conteneurs sont souvent considérés comme moins sécurisés que les machines virtuelles, car ils créent techniquement une surface d’attaque plus étendue. Par exemple, une vulnérabilité dans le noyau hôte du conteneur pourrait permettre à un cybercriminel d’atteindre d’autres conteneurs qui partagent ce noyau. 

Toutefois, ces dernières années, de nombreuses plateformes de conteneurs ont fait l’effort de développer des logiciels renforçant la sécurité de Docker et des conteneurs. Ces solutions établissent le profil des comportements attendus, des processus, des activités de mise en réseau et des pratiques de stockage des conteneurs, afin de garantir qu’aucune anomalie ni aucun comportement malveillant n’est détecté.

Utilisation inappropriée par les développeurs

Les conteneurs sont agiles, portables et relativement simples à déployer et à utiliser. Cependant, il est toujours possible que les développeurs commettent des erreurs. L’utilisation d’images par couches, par exemple, peut étendre la surface d’attaque d’une entreprise et compliquer sa protection. 

Bonnes pratique de sécurité pour les conteneurs

Les conteneurs sont certes puissants, mais comme de nombreuses autres solutions numériques, ils doivent être déployés et gérés avec précaution afin de limiter les risques. L’implémentation (et l’automatisation) de processus permettra aux entreprises de gagner du temps et les aidera à proposer des logiciels flexibles, agiles et sécurisés.

Pour vous montrer comment les bonnes pratiques ci-dessous permettent de sécuriser les conteneurs, nous allons prendre Docker comme exemple.

N’utilisez que des images de confiance

Les développeurs qui souhaitent créer des conteneurs Docker doivent concevoir leur propre Dockerfile de toutes pièces ou en utiliser un reposant sur une image de base, deux processus susceptibles de provoquer des problèmes liés à l’intégrité, à la provenance et à la vulnérabilité des images. 

Pour protéger vos conteneurs, il est indispensable que vous téléchargiez uniquement des images officielles à partir de référentiels publics, tels que Docker Hub, ainsi que des images signées provenant de développeurs de confiance. Docker Content Trust utilise des clés publiques et privées pour vérifier l’intégrité des images et l’identité des auteurs.

Formez votre équipe de développement

Pour s’assurer de n’utiliser que des images de confiance, les entreprises doivent veiller à ce que leurs équipes de développement aient connaissance de ces bonnes pratiques. L’un des moyens les plus efficaces d’y parvenir consiste à configurer un registre Docker Trusted Registry afin de créer une bibliothèque interne d’images pouvant être publiées et réutilisées.

Utilisez des versions de conteneurs sécurisées

Lorsque de nouvelles versions de la technologie de conteneurs Docker sont mises à disposition, les développeurs peuvent introduire involontairement des failles de sécurité. En outre, les versions récemment corrigées d’images conteneurs légitimes peuvent également déstabiliser une build. 

Pour éviter ce problème, appliquez à vos Dockerfiles une balise (tag) correspondant à la version de conteneur grâce à laquelle ils ont été développés ou à l’image précise utilisée.

Analysez les vulnérabilités

Bien que Docker Hub vérifie le caractère officiel des images, il est important d’analyser toutes les images téléchargées à la recherche de vulnérabilités, d’autant plus que des bogues ont été identifiés dans bon nombre d’entre elles

Les entreprises peuvent détecter les bogues à l’aide d’outils tels que Docker Security Scanning ou OpenSCAP, ainsi qu’intégrer l’analyse des vulnérabilités à leur politique système de gestion des conteneurs.

Observez le trafic réseau

Si des conteneurs sont déployés, la sécurité doit être en tête des priorités. Et cela passe par la surveillance du trafic réseau. Par exemple, dans certains frameworks de conteneurs, le système d’exploitation hôte autorise tout le trafic réseau entre les conteneurs, ce qui peut octroyer un accès non autorisé à un programme tiers ou malveillant. Un cybercriminel pourrait également observer le trafic sensible. 

Pour protéger vos conteneurs, désactivez la communication entre conteneurs à l’aide de l’indicateur --icc=false dans le démon Docker.

Appliquez le principe du moindre privilège

Le démon Docker s’exécute en tant que superutilisateur (« root »). Un utilisateur disposant d’un tel accès au niveau d'un conteneur pourrait donc compromettre le système d’exploitation hôte. Comme les conteneurs partagent tous le noyau du système d’exploitation hôte, il pourrait autoriser l’accès à plusieurs conteneurs de production. 

Si possible, assurez-vous que les conteneurs ne s’exécutent pas en tant que superutilisateur et appliquez le principe de moindre privilège pour limiter les risques.

Automatisez les contrôles de sécurité

Les développeurs peuvent automatiser des contrôles de sécurité pour leurs environnements et la technologie de conteneurs cloud afin d’accélérer les instances Docker utilisées à des fins de développement et de lancer la production de conteneurs Docker de manière plus sécurisée.

Renforcez la sécurité grâce à l’authentification

L’authentification est primordiale pour démarrer un conteneur Docker, d’autant plus que les environnements d’entreprise pourraient en contenir des milliers. Des couches d’authentification telles qu’OAuth2 et OpenID Connect peuvent être utilisées conjointement avec Kubernetes pour émettre un jeton d’identification qui vérifie les identités des utilisateurs et offre un accès sécurisé à des conteneurs spécifiques.

Découvrez les conteneurs

Chez Okta, nous avons beaucoup réfléchi à la technologie de conteneurs, notamment à Docker et à Kubernetes. Consultez les ressources suivantes pour en savoir plus sur l’utilisation de conteneurs :