Secrets
La gestion des secrets (tokens OIDC, mots de passes, ...) se fait à l'aide de
age. Ce dépôt d'infrastructure contient ainsi des fichiers .age qui sont des
secrets chiffrés.
Il est important de ne pas stocker ces secrets en clair car la configuration est publique et car tout fichier d'une configuration NixOS est copié sans restriction de lecture dans le Nix store.
Ces fichiers sont chiffrés de telle sorte qu'à la fois les administrateurices système d'AliENS et « Protomolecule » lui-même soient capables de les dechiffrer. « Protomolecule » déchiffre les clefs lors de l'activation de sa configuration : ainsi, les secrets en clair seront lisibles seulement par les services qui les utilisent.
Nous utilisons agenix pour intégrer la
gestion des secrets à la configuration NixOS du serveur et faire le
déchiffrement pendant l'activation de la configuration.
Tous les fichiers ne sont pas destinés à être déchiffrés par « Protomolecule » :
par convention, seuls les secrets dans nixos/ le sont. Les secrets en dehors
du dossier sont ceux qui sont nécessaires aux administrateurices système pour
récupérer un accès au serveur ou à ses données manuellement en cas de panne.
secrets.nix
Les clefs publiques utilisées pour chiffrer et déchiffrer les secrets sont
listées dans secrets.nix. age supporte deux formats de
clefs :
- les clefs publiques
age, qui commencent parage1; - les clefs publiques SSH.
« Protomolecule » utilise sa clef SSH hote,
/etc/ssh/ssh_host_ed25519_key, pour déchiffrer les secrets.
Le fichier secrets.nix contient aussi la liste des fichiers de secrets avec
pour chaque fichier la liste des clefs qui peuvent le déchiffrer. On retrouve
les deux jeux de clefs correspondants aux deux catégories de secrets décrites
plus haut.
Opérations sur les secrets et les clefs
L'outil en ligne de commande agenix est mis à disposition par le flake de ce
dépôt. Ainsi, il peut être exécuté avec nix run .#agenix --.
[!important]
agenixprésente quelques problèmes lorsqu'il n'est pas exécuté a la racine du dépôt. Assurez-vous de toujours être à la racine du dépôt lorsque vous l'exécutez.
Lecture d'un secret
nix run .#agenix -- --decrypt luks-backup-passphrase.age
Ajout d'un nouveau fichier de secret
Pour ajouter un nouveau secret :
-
ajouter son entrée dans le fichier
secrets.nix -
exécutez la commande :
echo -n "<contenu>" | nix run .#agenix -- --edit chemin/fichier.age[!tip]
L'espace avant
echopermet de ne pas sauvegarder la commande dans l'historique de votre shell.
[!important]
Attention à ne pas introduire de retour à la ligne non desiré en fin de fichier ! Par exemple, le drapeau
-ndans la commandeechoau dessus permet de ne pas en introduire.
Changement des clefs
Après avoir ajouté ou retiré une clef dans le fichier secrets.nix, il est
important de rechiffrer tous les secrets avec les nouveaux jeux de clefs. Pour
cela, il faut lancer la commande :
nix run .#agenix -- --rekey