• Accueil
  • Blog
  • Comment gérer les certificats d'application avec Docker

Comment gérer les certificats d'application avec Docker

Les clients nous demandent souvent comment utiliser notre plateforme de gestion des opérations PKI et des certificats numériques, Keyfactor Commandpour gérer les certificats d'application dans un environnement DevOps. Ils "conteneurisent" leurs applications avec Docker et veulent gérer les certificats dans les conteneurs Docker.

Un peu d'histoire sur la question...

Avec DevOps (ou la fusion dudéveloppement software et des opérations informatiques), le concept consiste à traiter votre infrastructure de la même manière que vous [devriez] traiter votre code d'application - via des spécifications formelles et des processus de construction automatisés.

Avant l'avènement du monde DevOps, les développeurs de software créaient couramment des applications sans tenir compte des détails de l'environnement et de l'infrastructure réels dans lesquels software devrait fonctionner. Même lorsque l'environnement cible était pris en compte, des hypothèses incorrectes étaient souvent émises ou mal communiquées aux responsables des opérations informatiques. Lorsque le moment était venu de mettre l'application en production, les responsables des opérations informatiques avaient du mal à faire fonctionner les applications correctement. Avec DevOps, la création d'une définition formelle de l'infrastructure requise fait partie du processus de développement software et des outils automatisés sont utilisés pour déployer software dans cette infrastructure. La spécification formelle de l'infrastructure est appelée "Infrastructure as Code" ou IaC.

L'avantage de l'IaC est que la définition de l'infrastructure peut être suivie dans le contrôle de la source en même temps que le code source de l'application, ce qui permet de maintenir la synchronisation entre le développement et l'infrastructure. Avec l'IaC, le déploiement de votre infrastructure fait partie du processus de création de l'application. Cela permet d'assurer la cohérence de votre processus de déploiement entre les différents environnements de déploiement (test, QA, staging, production, etc.) et d'inclure l'infrastructure dans l'intégration continue.

Docker est un outil courant dans le cadre d'un scénario DevOps. Docker permet de prendre un élément de software et de le placer dans un "conteneur" qui fait abstraction de l'infrastructure et présente un système d'exploitation en bac à sable à l'application. Les moteurs d'orchestration tels que Kubernetes ou Docker Swarm s'appuient sur l'IaC pour effectuer un déploiement et une mise à l'échelle automatisés des conteneurs. Les référentiels publics tels que Docker Hub facilitent le partage des conteneurs (et de l'adresse software) entre les applications et les organisations.

Tout cela est très bien, mais l'ajout de certificats au mélange crée des défis supplémentaires :

  • Le renouvellement des certificats se fait à un rythme différent de celui des mises à jour des applications. Vous pouvez publier des versions mensuelles ou trimestrielles de votre site software, mais les certificats doivent être renouvelés chaque année. Lorsque le développement d'une application cesse, le renouvellement du certificat doit toujours avoir lieu tant que l'application est utilisée.
  • Les certificats sont gérés par différentes parties. Les certificats peuvent être achetés auprès d'autorités de certification publiques ou être émis à partir d'une infrastructure à clé publique privée interne (PKI) ; dans les deux cas, les personnes responsables de l'acquisition ou de l'émission ne sont généralement pas les développeurs et ne sont pas nécessairement les responsables des opérations informatiques.

Si, du point de vue du développement, vous pouvez créer un conteneur qui contient votre contenu ou votre application web, et que votre processus d'intégration continue de test et de construction peut mettre à jour et redéployer ces conteneurs à chaque révision de software , vous devez toujours vous demander comment mettre à jour et maintenir les certificats que votre système présente au monde extérieur. C'est là le cœur de la question.

Alors, quelle est la réponse...

Comme pour tout dans notre domaine, la réponse est généralement "ça dépend". Il existe plusieurs modèles de gestion des certificats d'application avec Keyfactor Command et Docker. La bonne nouvelle est que dans la plupart des cas, le modèle (et la réponse) est simple.

Si vous ne souhaitez pas écrire de code, le moyen le plus simple est de déployer notre conteneur d'agent d'orchestration de certificats avec vos autres conteneurs d'application. Notre agent gère alors les certificats utilisés par votre application via le stockage partagé disponible nativement dans Docker. En supposant que votre application puisse obtenir son certificat à partir du système de fichiers, cela ne nécessite aucune modification de votre application ou de vos conteneurs et aucun codage ou script n'est requis. Il s'agit d'une solution totalement prête à l'emploi.

Keyfactor Docker 1

L'avantage de ce modèle est que chaque instance du conteneur utilise le même emplacement de stockage partagé, ce qui fait que tous vos conteneurs utilisent le même certificat. Au fur et à mesure que votre processus d'orchestration augmente le nombre de nœuds, vous n'avez pas à vous préoccuper du fait que chaque serveur web derrière votre équilibreur de charge dispose du même certificat. Lorsque le moment est venu de renouveler ou de modifier le certificat, tous les conteneurs ont automatiquement accès au nouveau certificat.

Notez qu'avec ce modèle, vos certificats sont conservés dans un stockage partagé, ce qui signifie que les administrateurs de votre stockage partagé ont accès à la clé privée de votre certificat. Normalement, les administrateurs de votre stockage partagé sont également des administrateurs Docker qui ont déjà accès aux conteneurs (qui contiennent également les clés privées), il ne s'agit donc pas d'un risque supplémentaire. Cependant, si votre modèle administratif sépare les tâches entre les administrateurs Docker et les administrateurs du stockage partagé, cela peut poser un problème. Dans ce cas, les secrets Docker peuvent être utilisés à la place du stockage partagé. Avec les secrets Docker, les clés privées sont chiffrées au repos et en transit et vos administrateurs de stockage n'y ont pas accès.

L'utilisation des secrets Docker implique l'utilisation d'un petit nombre de scripts dans votre système d'orchestration pour récupérer le certificat sur Keyfactor Command et le stocker en tant que secret Docker.

Keyfactor Docker 2

Si votre application n'est pas en mesure de récupérer ses certificats à partir du système de fichiers ou utilise un format de stockage de certificats non standard, un script de démarrage de conteneur peut être utilisé pour récupérer les certificats nécessaires à partir de Keyfactor Command et les injecter dans votre application ou les stocker dans votre format propriétaire à chaque fois que le conteneur est déployé.

Keyfactor Docker 3

Enfin, si vous êtes d'accord pour coupler les processus de renouvellement des certificats et de publication des applications, ou si vous devez déployer des conteneurs dans des environnements qui n'ont pas accès à Keyfactor Command , vous pouvez utiliser Keyfactor Command pour injecter des certificats au cours du processus de construction du conteneur.

Keyfactor Docker 4

En résumé, lors de la gestion des certificats d'application dans un environnement Docker avec Keyfactor Command , il existe plusieurs façons d'accomplir la tâche, en fonction des exigences de votre application et de son environnement d'exécution. La plupart des clients pourront utiliser un simple conteneur pour gérer leurs certificats Docker.