Docker : Isoler efficacement les applications
Ma définition
Docker est un outil permettant d’isoler une application avec l’intégralité de ces dépendances dans ce que l’on appelle un conteneur. Ce conteneur a de nombreux avantages. Il est immuable, portable et efficient. C’est-à-dire qu’il ne dépend pas d’un système d’exploitation hôte et que peu importe où il sera exécuté, l’application sera identique étant donné que ces dépendances sont isolées avec ce dernier. Il n’y aura donc pas de différence entre un même conteneur exécuté sur deux machines différentes. Globalement, nous décrivons le conteneur une fois dans un fichier de configuration, puis nous pouvons en faire ce que nous voulons, il répond au concept « Build Once, Run Anywhere ». Un point très important de Docker, c’est qu’il est utilisé par toutes les technologies permettant d’avoir des applications hautement disponibles en entreprise. Tous les concepts permettant d’augmenter la fiabilité des applications en entreprise se basent aussi sur cet outil. Ce dernier est omniprésent dans le monde de l’informatique, peu importe le métier pratiqué.
Mes éléments de preuve
Durant ma seconde année d’alternance au Ministère des Armées, j’ai eu pour mission la migration de plusieurs outils internes utilisés par les équipes sur un cluster Kubernetes. Un cluster est un regroupement de plusieurs machines qui servent à mutualiser les ressources et qui permet d’offrir de nouvelles fonctionnalités comme la redondance ou encore la haute disponibilité des applications. La problématique a été que plusieurs de ces outils ont été développés en interne et n’ont pas été conteneurisés. C’est-à-dire qu’ils n’ont pas été compressés et isolés avec leurs dépendances dans ce que l’on appelle un conteneur. Le principal atout d’un conteneur est qu’il peut être instancié sur n’importe quel système d’exploitation ou technologie de cluster. Pour que je puisse déployer ces outils sur un cluster Kubernetes, j’ai dû les mettre dans des conteneurs Docker. Docker est une des technologies qui permet de créer, gérer et détruire des conteneurs. En conteneurisant l’application et ses dépendances, nous avons éliminé une grande partie des bugs liés aux différences entre les environnements de déploiement. J’ai pu les déployer sans incident sur le cluster Kubernetes et nous avons pu les répliquer facilement de manière identique. Les outils étaient déployés manuellement sur des machines virtuelles. Ils n’utilisaient pas toutes les ressources et ils n’étaient fonctionnels que sur ces dernières. Grâce aux conteneurs Docker, nous avons pu passer outre toutes ces problématiques et nous avons pu industrialiser leur déploiement. Dorénavant, il n’y a plus qu’un bouton sur l’outil GitLab à appuyer pour déployer ou non ces outils.
Pendant cette même alternance, j’ai intégré des outils comme Hadolint et Trivy dans le pipeline CI/CD. La problématique est que nous n’avions aucun moyen de savoir si nos conteneurs étaient sécurisés ou non. Ces outils nous ont donc permis d’identifier les mauvaises pratiques que nous avions lors de la définition des conteneurs Docker ainsi que les failles de sécurité durant toutes les phases de développement afin d’éviter d’intégrer des failles de sécurité en production. Grâce à Trivy, nous avons pu identifier rapidement plusieurs failles de sécurité. Le plus important était que nos conteneurs étaient exécutés avec tous les privilèges, c’est-à-dire que si une personne malveillante prend le contrôle d’un applicatif se trouvant dans un conteneur avec tout droit, alors toutes les applications se trouvant sur le cluster sont susceptibles d’être attaquées. Il s’agit d’une faille qui est commune et est très souvent présente dans les conteneurs. Elle est particulièrement dangereuse. Cette expérience a renforcé ma conviction sur l’importance de la sécurité dans les conteneurs et m’a motivé à approfondir mes compétences en DevSecOps.
Mon autocritique
Docker est un passage obligatoire dans le monde de l’informatique. Il s’agit d’une base nécessaire à de nombreuses autres technologies ou concepts massivement utilisés par les entreprises. C’est une technologie demandée par toutes les entreprises qui cherchent à recruter un administrateur SRE. J’ai une maitrise avancée de Docker et je vois peu de possibilités de m’améliorer dans cette technologie. Néanmoins, il y a toujours des possibilités de s’améliorer, nos compétences ne sont jamais parfaites. Pour cela, je compte approfondir la partie sécurité des conteneurs Docker. C’est une partie de Docker où nous devons faire une veille active étant donné que des failles de sécurité apparaissent tous les jours. Des outils existent pour identifier les failles de sécurité dans nos conteneurs. Le plus connu est Trivy. Cependant, nous devons aussi pouvoir les corriger. C’est pour cette raison qu’il faut continuer à suivre activement les nouveautés de Docker, les nouvelles bonnes pratiques ainsi que les nouvelles failles de sécurité. Je conseille très fortement cette compétence même pour un développeur. Il n’est pas possible de passer à côté de cette compétence.
Mon évolution dans cette compétence
Je souhaite continuer à me former malgré mon niveau de maitrise de Docker. Pour cela, je pense que la formation « Pack DevOps » de la société Enix permettrait de me faire passer à un niveau supplémentaire de compréhension du fonctionnement interne de Docker. Cette formation est réalisée par Jérôme Petazzoni qui a participé au développement de Docker. Il a donc une maitrise parfaite du sujet. Ça me permettrait aussi de mieux comprendre les risques de sécurité des conteneurs Docker et comment les éviter. À cette formation, je souhaite m’autoformer plus profondément sur des solutions comme Trivy qui permettent d’analyser nos conteneurs afin d’y trouver ou non les dernières failles de sécurité. Mon objectif est de maitriser Docker pour arriver à les rendre suffisamment robustes à la majorité des failles de sécurité. J’essaie de tendre petit à petit vers la culture DevSecOps qui est une continuité de la culture DevOps avec des notions de sécurité plus approfondies.