Nous traitons tous des informations sensibles lorsque nous travaillons avec des systèmes informatiques. Les administrateurs système déplacent les clés SSH et les développeurs Web doivent se soucier des jetons d'API. Le problème avec les informations sensibles, c'est qu'elles sont sensibles , ce qui signifie qu'il pourrait provoquer un désastre de sécurité s'il tombait d'une manière ou d'une autre entre de mauvaises mains. Les conteneurs ne font pas exception à ce problème :les utilisateurs doivent utiliser les informations sensibles à l'intérieur des conteneurs tout en devant protéger les informations sensibles.
[ Vous aimerez peut-être également lire : Conteneurs sans racine utilisant Podman ]
Pourquoi secrets ?
Que se passe-t-il si quelqu'un doit exécuter une base de données dans un conteneur et que les identifiants de la base de données doivent être injectés dans un conteneur ? Cela peut être fait de plusieurs façons. Vous pouvez simplement créer un fichier lors de l'exécution du conteneur et y stocker les identifiants. Cependant, cela est dangereux. Si le conteneur est exporté dans l'image, les informations d'identification seront également exportées. Toute personne ayant le contrôle de l'image pourra accéder à la base de données. Une autre option consiste à transmettre les informations d'identification à l'aide de la CLI, mais cela nécessite de saisir les données à chaque fois, ce qui peut être fastidieux.
Et s'il existait une méthode de gestion centralisée des informations sensibles ?
La nouvelle commande, podman secret
, est un ensemble de sous-commandes et d'options qui gère les informations sensibles de manière simple et sûre. Il permet aux utilisateurs d'utiliser facilement du contenu sensible à l'intérieur d'un conteneur, mais l'empêche de se retrouver quelque part en dehors du conteneur, comme dans un registre d'images. Nous avons implémenté tout un ensemble de sous-commandes pour podman secret
:create
, rm
, ls
, et inspect
, pour créer et manipuler des secrets, ainsi qu'un --secret
drapeau pour injecter un secret dans un conteneur.
Comment est-il utilisé ?
Lorsque podman secret create
est exécuté, Podman attend un fichier avec les données à stocker.
$ echo "secretdata" > secretfile
$ podman secret create secretname secretfile
e17465c9772b38f336fc4cbac
L'podman secret inspect
La commande n'affichera pas les données stockées mais uniquement les métadonnées sur le secret.
$ podman secret inspect secretname
[
{
"ID": "e17465c9772b38f336fc4cbac",
"CreatedAt": "2021-02-12T09:05:49.661504248-05:00",
"UpdatedAt": "2021-02-12T09:05:49.661504248-05:00",
"Spec": {
"Name": "secretname",
"Driver": {
"Name": "file",
"Options": null
}
}
}
]
Bien sûr, vous pouvez également lister vos secrets et les supprimer.
$ podman secret ls
ID NAME DRIVER CREATED UPDATED
e17465c9772b38f336fc4cbac secretname file 1 second ago 1 second ago
$ podman secret rm secretname
e17465c9772b38f336fc4cbac
Afin d'utiliser le secret et d'accéder aux données secrètes, un conteneur peut être créé ou exécuté avec un --secret
drapeau. À l'intérieur du conteneur, les données secrètes sont accessibles dans un fichier à /run/secrets/secretname
. Vous pouvez utiliser le --secret
marquer plusieurs fois pour ajouter de nombreux secrets au conteneur.
$ podman run --secret secretname --name foo alpine cat /run/secrets/secretname
secretdata
Les secrets ne seront pas validés sur une image ou exportés avec un podman commit
ou un podman export
commande. Cela empêche que des informations sensibles soient accidentellement transmises à un registre public ou transmises à la mauvaise personne.
$ podman commit foo secrimg
Getting image source signatures
Copying blob 1119ff37d4a9 skipped: already exists
Copying blob 3dd965b4468a done
Copying config 263fcafb79 done
Writing manifest to image destination
Storing signatures
263fcafb790dfdf6a7312953d3600ff9d990a664ec341ded7d0a6dfa1e71bb5d
$ podman run secrimg cat /run/secrets/mysecret
cat: can't open '/run/secrets/mysecret': No such file or directory
Comment ça marche ?
Lorsqu'un utilisateur utilise le --secret
flag, Podman récupère les données secrètes et les stocke sur un tmpfs
. Il monte ensuite le fichier dans le conteneur à /run/secrets/secretname
. À partir de là, le secret peut être utilisé à l'intérieur du conteneur comme d'habitude, qu'il s'agisse de clés de base de données ou de certificats TLS.
Les secrets n'existent que sur la machine du créateur du secret ou à l'intérieur d'un conteneur lorsqu'il est prêt à être exécuté. Les secrets sont spécifiquement conçus pour ne pas existent dans les images :un podman commit
ne validera pas le secret dans l'image, et un podman export
. Si quelqu'un devait créer une image à partir d'un conteneur avec un secret, puis exécuter un conteneur à partir de ladite image, le fichier à /run/secret/mysecret
n'existerait pas. Cela empêche que des données secrètes soient accidentellement poussées vers un registre, empêchant ainsi que des informations sensibles et compromettantes n'existent là où elles ne devraient pas se trouver.
Travaux futurs
Pour l'instant, cette solution se charge de gérer les secrets. Cependant, le seul pilote implémenté pour le moment pour stocker les informations sensibles est un pilote de fichier, ce qui signifie que les données seront stockées sur disque dans des fichiers non chiffrés contrôlés par l'hôte du conteneur. Nous prévoyons d'autres améliorations, telles que la mise en œuvre du cryptage ou l'utilisation d'autres pilotes. Nous aimerions également prendre en charge les variables d'environnement secrètes, qui sont des variables d'environnement qui sont définies à l'intérieur du conteneur mais qui ne sont pas enregistrées dans l'image. La participation de la communauté à ces tâches sera acceptée avec gratitude.
[ Vous débutez avec les conteneurs ? Découvrez ce cours gratuit. Déploiement d'applications conteneurisées :présentation technique. ]
Froid. Je le veux.
Les secrets de Podman sont disponibles dans Podman 3.1.0. Si vous souhaitez l'essayer, vous pouvez obtenir Podman en suivant ces instructions d'installation. Si vous avez déjà Podman, vous pouvez obtenir la fonctionnalité de secrets en passant à Podman 3.1.0. N'hésitez pas à contacter l'équipe Podman pour toute question ou commentaire également. Les développeurs de Podman traînent souvent sur le canal freenode #podman. Vous pouvez nous envoyer un e-mail en utilisant la liste de diffusion podman. Nous organisons également des réunions communautaires mensuelles. N'hésitez pas à venir nous dire bonjour également.