nixos/secrets/README.md
2025-09-27 23:29:31 +02:00

3.3 KiB

Agenix

Agenix est un outil permettant d'inclure des secrets dans une configuration NixOS et notamment de ne pas les copier les secrets dans /nix/store qui est visible par tout le monde (dit "world readable"), c'est-à-dire par tout les processus et tout les utilisateur⋅ices.

Pour plus d'information sur agenix, veuillez vous réferer à la documentation officielle

Pré-requis

La présente documentation présuppose que l'ordinateur exécutant les commandes possède NixOS ou le gestionnaire de paquet nix.

Fonctionnement

Génération des clés de (dé)chiffrement

Tout d'abord, agenix utilise des clés de chiffrement asymétrique pour chiffrer et déchiffrer les secrets. Pour cela, il faut en premier lieu en générer et les indiquer à agenix.

Utilisateur⋅ice

Pour un⋅e utilisateur⋅ice, il convient de générer une clé ssh (ed25519) avec la commande :

$ ssh-keygen -t ed25519

La commande vous indiquera où la clé sera enregistrée (et de changer l'emplacement le cas échéant). Rappelez-vous bien de la localisation car elle sera nécessaire par la suite.

Remarque :

Pour des raisons de préférence personnelle, il peut être préféré de ne pas mettre le nom par défaut (<username>@<host>). Il convient alors d'utiliser la commande suivante :

$ ssh-keygen -t ed25519 -C <quelque>@<chose>

Machines

Pour une machine, les clés ssh sont automatiquement générées lors de l'installation, et la clé publique se trouvent (généralement) dans /etc/ssh/ssh_host_ed25519_key.pub.

Ajout des clés et rechiffrement

Une fois les clés générés, il faut alors les ajouter dans le fichier secrets qui se trouve à la racine du projet.

⚠️ ATTENTION ⚠️

Seule la clé publique doit être ajouté et elle est identifiable au fait que le fichier se termine par .pub.

Une fois ajouter, il faut alors que quelqu'un ayant les secrets chiffrés pour sa clé ssh rechiffre les secrets pour votre clé. Cela se fait avec les commandes :

$ nix develop
$ agenir -r # -r ou --rekey

Remarque :

Ces commandes fonctionnent également lors du retrait de clé ou lors de changement.

Créer et éditer un fichier

Pour éditer un fichier, il suffit d'utiliser les commandes :

$ nix develop
$ agenix -e <chemin/du/fichier>.age -i <chemin/de/la/clé>

Pour créer un nouveau fichier, il faut préalablement l'ajouter dans secrets.nix. Il est alors important d'ajouter les clés pour lesquelles le fichier doit être chiffré. Il est préférable de respecter leitmotiv le suivant : seul les machines et personnes ayant besoin du secret doivent avoir accès audit secret.

Une fois cela effectué, la commande pour créer le fichier est la même que celle pour les éditer (excepté le -i puisque qu'il n'y a pas besoin de déchiffrer le secrets).

Utiliser agenix dans une configuration

Pour utiliser agenix dans une configuration, il faut commencer par écrire le fichier :

age.secrets = {
  <name> = {
    file = ../../secrets/<chemin>.age;
    path = "/chemin";
    owner = "<owner>";
    group = "<root>";
    mode = "420";
  };
};

Puis, il est possible de spécifier le chemin avec config.age.secrets.<name>.path à l'endroit qui convient.