En relisant mon ancien article sur agenix, j’ai remarqué une chose :
rien n’est vraiment claire.
Il était donc temps de refaire un article.
Pourquoi utiliser agenix sur NixOS ?
Quand on commence à automatiser son infrastructure avec NixOS, une question revient rapidement :
Comment gérer les secrets sans laisser traîner des mots de passe en clair dans le dépôt Git ?
C’est précisément le problème que résout agenix.
agenix permet de :
- chiffrer des secrets avec Age
- utiliser des clés SSH existantes
- stocker les fichiers chiffrés dans Git
- déployer automatiquement les secrets sur NixOS
Dans cet article, nous allons configurer agenix via nix-channel puis
l’utiliser pour gérer le mot de passe administrateur de Grafana.
Qu’est-ce exactement agenix ?
Agenix est un petit service et une bibliothèque Nix/NixOS qui permet de gérer, chiffrer et déchiffrer des secrets (clés SSH, mots de passe, fichiers de configuration sensibles, etc.) en s’appuyant sur le protocole age (Actually Good Encryption).
Installation d’agenix avec nix-channel
Ajout du channel :
|
|
Installation :
|
|
Vérification :
|
|
Génération d’une clé SSH dédiée
Agenix utilise des clés SSH pour chiffrer et déchiffrer les secrets.
Il est donc opportun de lui attribuer une pair de clés, dédiées.
Création de la clé :
|
|
Les fichiers générés :
|
|
La création d’une clé spécifique n’est pas obligatoire, mais une bonne pratique.
Activation d’agenix dans NixOS
Dans /etc/nixos/configuration.nix ajoutez :
|
|
Organisation des secrets
Une bonne pratique consiste à centraliser les secrets dans un répertoire dédié.
Exemple :
|
|
Cette structure reste simple, lisible et facile à maintenir.
Création du fichier secrets.nix
Récupération de la clé publique :
|
|
Exemple :
|
|
Création du fichier secrets.nix :
|
|
Ce fichier indique simplement quelles clés publiques sont autorisées à déchiffrer le secret.
Création du secret Grafana
Positionnement dans le répertoire des secrets :
|
|
Création du fichier chiffré :
|
|
L’éditeur s’ouvre automatiquement.
Exemple de contenu :
|
|
Une fois sauvegardé, le fichier chiffré est créé :
|
|
Déclaration du secret dans configuration.nix
Ajout du secret :
|
|
Ici, le chemin peut parfaitement pointer vers un sous-répertoire.
Le déplacement physique du fichier .age n’impacte pas le contenu du
secrets.nix.
Important : comprendre secrets.nix
Le rôle de secrets.nix est souvent mal compris.
Ce fichier ne sert PAS à indiquer où se trouve le secret sur le disque.
Il sert uniquement à :
- définir le nom logique du secret
- associer les clés publiques autorisées
Par exemple :
|
|
Le chemin réel du fichier est ensuite défini dans :
|
|
Cela permet d’organiser librement ses secrets :
|
|
Configuration de Grafana
Configuration complète :
|
|
Au démarrage du service grafana :
agenixdéchiffre automatiquement le secret- le fichier apparaît dans
/run/agenix Grafanalit directement le contenu du fichier contenant le secret
Reconstruction du système :
|
|
Vérification :
|
|
Affichage du secret :
|
|
Connexion Grafana :
|
|
Utilisateur :
|
|
Mot de passe :
|
|
Modifier un secret plus tard
Pour modifier le mot de passe :
|
|
Puis :
|
|
Conclusion
Agenix apporte une solution élégante et très naturelle à la gestion des secrets sur NixOS.
L’utilisation des clés SSH simplifie énormément le workflow par rapport à des solutions basées sur GPG.
Avec une bonne organisation des fichiers :
- Git peut être utilisé sans risque, y compris dans un dépôt public
- les secrets restent versionables
- les services comme Grafana récupèrent automatiquement leurs mots de passe