114 lines
3.3 KiB
Markdown
114 lines
3.3 KiB
Markdown
# 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 (`<username>@<host>`). Il convient alors d'utiliser
|
|
> la commande suivante :
|
|
|
|
```bash
|
|
$ 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.
|
|
|
|
: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 <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 :
|
|
|
|
```nix
|
|
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.
|