![]() |
||
---|---|---|
.. | ||
README.md | ||
acme.env | ||
common.yaml | ||
neo.yaml |
README.md
Secrets
Introduction
La gestion des secrets sur NixOS peut se révéler complexe : comme expliquée dans cette section du README.md
racine, aucun secret ne peut apparaître dans le Nix Store. Il faut donc pouvoir charger les secrets dans des fichiers chiffrés qui seront déchiffrés à la reconstruction, sans être pour autant écrits dans le Nix Store. Deux logiciels usuels permettent de faire cela : agenix
et sops-nix
. Étant donné que agenix
ne permet pas d'utiliser des clefs GPG, le choix a été fait d'utiliser sops-nix
.
Sops-nix
On ne présentera pas ici tout les détails sur le fonctionnement de sops-nix
, vous pouvez allez voir cette section du README.md
officiel.
Clefs de chiffrement/déchiffrement
La première chose qu'il faut déterminer pour gérer les serets avec sops-nix
est la gestion des clefs de chiffrement et de déchiffrement. Celles-ci sont de natures différentes : on utilisera des clefs SSH pour les machines et des clefs GPG pour les nounous. Dans les deux cas, on trouve les clefs publiques pour le chiffrement et les clefs privées pour le déchiffrement. La liste des clefs publiques est décrite dans la section keys
du fichier ../.sops.yaml
.
Secrets
Il faut ensuite chiffrer les secrets que l'on souhaite déclarer. Ces secrets sont décrits dans les différents fichiers YAML dans ce dossier. Chaque fichier n'a qu'une liste prédéfinie de clefs qui ont le droit de le déchiffrer, ce qui fait que toutes les machines n'ont pas accès à tous les secrets, mais seulement à ceux qui leur sont nécessaire. La liste des clefs utilisable pour chaque fichier se trouve dans la partie creation_rules
du fichier ../.sops.yaml
. Après reconstruction de la configuration, les secrets sont situés dans le dossier /run/secrets/
, qui n'est pas lisible par les _users, mais seulement par root. Chaque secret possède de plus un user et un groupe propriétaires qui ont les droits de lecture, ce qui peut être utile pour la gestion des secrets pour des services en particulier.
Utilisation des secrets
Pour utiliser des secrets gérés par sops-nix
, deux étapes sont nécessaires :
- déclarer l'existence du fichier contenant le secret par
sops.secrets.<name>.sopsFile
; - utiliser le fichier contenant le secret par
config.sops.secrets.<name>.path
.
Vous pouvez voir un exemple d'utilisation de tels secrets dans le fichier ../modules/crans/users.nix
.
Attention : n'utilisez jamais de secret avec de fichier lisant le contenu du fichier pour l'écrire dans la configuration ! Cela fait perdre tout l'intérêt de l'utilisation de sops
. Ainsi, il ne faut en aucun cas utiliser les fonctions lib.readFile
, lib.fileContents
, ... en combinaison de fichiers contenant des secrets.
Commandes utiles
Vous devez avoir l'exécutable sops
dans votre shell. Vous pouvez pour cela utiliser le devshell par défaut avec la commande nix develop
à la racine du projet.
-
Mise à jour d'un fichier après changement des clefs :
$ sops updatekeys [file]
-
Écriture d'un fichier chiffré :
$ sops [file]