Mozilla SOPS
Mise à jour :
Dans cette documentation, je vais vous guider à travers l’utilisation de sops, un outil puissant pour la gestion sécurisée des secrets DevOps. Les secrets, tels que les clés d’API, les mots de passe et les certificats, sont essentiels pour de nombreuses applications, mais les stocker et les gérer de manière sécurisée peut être un défi. Sops simplifie ce processus en permettant le chiffrement de vos secrets tout en les intégrant facilement dans vos flux de travail DevOps.
Comment stocker vos secrets ?
La première solution est d’utiliser un utilitaire qui va se charger de chiffrer
et de déchiffrer ces données sensibles. Pour le code Ansible, nous avons à notre
disposition ansible-vault. Mais ses fonctionnalités sont très
limitées. Ansible-vault
n’utilise qu’une seule clé pour chiffrer un fichier
Alors comment gérer finement les droits d’accès ?
La seconde solution est de recourir à une application tierce spécialisée pour gérer vos secrets, comme HashiCorp Vault. Mais cela demande pas mal de ressources pour sa mise en place et sa maintenance. Et parfois, nous aimerions tout de même conserver nos fichiers de configuration dans le code source. Mais alors comment les protéger ?
C’est pour répondre à ces problématiques que les ingénieurs de Mozilla ont conçues SOPS.
Qu’est-ce que SOPS
SOPS pour Secrets OPerationS, est une CLI qui permet de chiffrer des fichiers textes ou binaires. Il permet d’éditer directement les fichiers de configuration aux formats : YAML, JSON, ENV et INI. SOPS automatise en fait le déchiffrage à l’ouverture et le chiffrage à la sauvegarde de ces fichiers. Autre particularité, pour ces fichiers textes SOPS ne chiffre que les valeurs et non les clés, ce qui permet d’en garder la structure, bien utile pour les manipuler sans les déchiffrer. Pour chiffrer les données, SOPS peut utiliser des clés PGP, AGE, HashiCorp Vault, AWS KMS, GCP KMS et Azure Key Vault.
Installations de Mozilla SOPS
SOPS fonctionne sur les principaux systèmes d’exploitation que sont Linux, Windows et MacOS. Toutes les exécutables sont disponibles dans les releases du dépot officiel ↗.
Installation de SOPS sur MacOS
Rien de plus simple :
Installation de SOPS sur un poste Windows
Télécharger le binaire sops-vx.x.x.exe
. Renommer le fichier en sops.exe et
déplacer le dans un répertoire défini dans la variable PATH
ou plus
simplement dans le répertoire C:\Windows\System32
.
Installation de SOPS sur une distribution Linux
Vous avez deux solutions pour installer SOPS sur Linux :
- En récupérant le package dans les releases Github du projet ↗. Par exemple pour les distributions basées sur une Debian :
- En utilisant asdf
Utilisation de SOPS
Maintenant que SOPS est installé voyons comment l’utiliser pour sécuriser vos secrets dans vos dépôts de code source.
Chiffrer des fichiers avec SOPS
Chiffrer des fichiers avec une clé AGE
Si vous n’utilisez pas de cloud Public, vous pouvez utiliser des clés PGP ou Age pour chiffrer vos secrets. Si vous voulez partager vos secrets à plusieurs personnes, la solution la plus simple est de les stocker dans un gestionnaire de mots de passe comme bitwarden, LastPass, …
Nous ne verrons donc que l’utilisation d’AGE pour chiffrer vos secrets. Commençons par l’installer sur notre poste de travail Ubuntu, pour les autres systèmes d’exploitation, c’est par là ↗.
Ensuite créons notre première clé PGP :
Pour notre exemple, nous allons utiliser le fichier test.yaml avec ce contenu
A présent chiffrons notre fichier avec la CLI sops
.
Voici le contenu du fichier généré :
Nous voyons que la structure du fichier est bien conservée et que seules les valeurs sont chiffrées.
Chiffrer des fichiers avec AWS KMS
La CLI AWS doit être installé en premier. Ensuite, il suffit de créer la clé KMS :
Ensuite, nous pouvons chiffrer le fichier :
Utiliser plusieurs clés dans SOPS
Dans certains cas, vous aimeriez définir une clé par utilisateur pour définir plus finement les accès aux secrets. Commençons par créer une seconde clé :
Pour chiffrer le fichier ainsi, il suffit de lancer la même commande que précédemment en séparant les clés par une virgule.
Le contenu du fichier :
On retrouve bien les deux clés.
Vous pouvez aussi utiliser deux systèmes de chiffrement :
Déchiffrer des fichiers avec SOPS
Il suffit d’utiliser la commande --decrypt
ou -d
:
Si on lance la commande directement sans indiquer le chemin des clés privées, nous obtenons bien un échec. Pour indiquer le chemin avec la variable suivante :
Configuration de SOPS
Plutôt que de lancer les commandes avec toutes les options, il est possible de
définir la configuration SOPS, dans un fichier. Le nom du fichier par défaut
est : .sops.yaml
.
Intégration avec les outils DevOps
L’intégration de sops dans vos flux de travail DevOps est essentielle pour garantir la sécurité et la gestion efficace de vos secrets.
Intégration avec Git
Git est un outil central dans le développement logiciel, mais il est essentiel de gérer les secrets de manière sécurisée lors de l’utilisation de Git. Voici comment intégrer sops avec Git :
- Assurez-vous que votre projet Git est configuré pour utiliser sops pour le chiffrement des secrets.
- Ajoutez un fichier
.sops.yaml
à la racine de votre projet Git pour spécifier les options de chiffrement et de stockage. - Lorsque vous ajoutez ou modifiez des fichiers secrets dans votre dépôt Git, assurez-vous de les chiffrer avec sops avant de les ajouter et de les pousser vers le dépôt.
- Les membres de l’équipe qui travaillent sur le projet Git auront besoin de la clé de chiffrement PGP pour décrypter les secrets au besoin.
Intégration avec CI/CD
Dans un pipeline CI/CD (Continuous Integration/Continuous Deployment), il est indispensable de gérer les secrets de manière automatisée et sécurisée. Voici comment intégrer sops avec votre pipeline CI/CD :
- Assurez-vous que votre environnement CI/CD dispose de sops installé et configuré avec la clé de chiffrement nécessaire.
- Dans votre pipeline, utilisez sops pour décrypter les secrets au moment de leur utilisation. Vous pouvez intégrer cette étape dans vos scripts de déploiement ou de construction.
- Assurez-vous que la clé de chiffrement PGP nécessaire est accessible dans votre environnement CI/CD de manière sécurisée, par exemple, en utilisant des variables d’environnement protégées.
SOPS et Ansible
L’intégration de sops avec Ansible, un outil puissant pour l’automatisation de la gestion de configuration et du déploiement, permet une gestion sécurisée des secrets dans vos playbooks. Pour déchiffrer les fichiers produits avec SOPS dans les playbooks Ansible, il suffit d’installer la collection suivante :
Et de faire appel à son lookup :
On lance le playbook :
Intégration avec Kubernetes
Kubernetes est largement utilisé pour l’orchestration de conteneurs et la gestion des secrets dans Kubernetes est essentielle. Il existe un opérateur qui se charge de déchiffrer les secrets (source ↗)
Conclusion
Comme vous avez pu le voir SOPS est un outil qui peut parfaitement d’intégrer dans un pipeline CI/CD. Couplé avec un gestionnaire de mots de passe ou de clés, il offre un bon moyen de stocker dans un dépôt git des données sensibles et cela, en toute sécurité. Donc fini les multiples secrets stockés dans les configurations de Github et GitLab.