# 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](https://github.com/ryantm/agenix) ## Pré-requis La présente documentation présuppose que l'ordinateur exécutant les commandes possède NixOS ou le gestionnaire de paquet [nix](nixos.org/download/). ## 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 : ```bash $ 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 (`@`). Il convient alors d'utiliser > la commande suivante : ```bash $ ssh-keygen -t ed25519 -C @ ``` #### 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. :warning: ATTENTION :warning: > 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 : ```bash $ 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 : ```bash $ nix develop $ agenix -e .age -i ``` 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 : ```nix age.secrets = { = { file = ../../secrets/.age; path = "/chemin"; owner = ""; group = ""; mode = "420"; }; }; ``` Puis, il est possible de spécifier le chemin avec `config.age.secrets..path` à l'endroit qui convient.