nixos/secrets
Lzebulon 2dbafb1f25
add jitsi
Parce qu'il faut bien assumer d'avoir un kernel
panic sur la vm sous debian...
2024-11-19 17:56:30 +01:00
..
README.md Ajout README.md secrets 2024-03-12 18:51:08 +01:00
common.yaml add jitsi 2024-11-19 17:56:30 +01:00
neo.yaml Update secrets 2024-10-19 13:25:58 +02:00

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]