Aller au contenu

Les secrets (sops-nix)

Tous les secrets du réseau (mots de passe, clés, jetons) vivent chiffrés dans un seul fichier, géré par sops-nix 🡕. Il est versionné dans git sous forme chiffrée ; seuls les porteurs d’une clé peuvent le déchiffrer.

# usr/secrets/secrets.yaml (chiffré au repos)
default-password: ...
default-password-hash: ...
user:
alice:
password-hash: ...

Le déchiffrement repose sur deux clés age 🡕 :

CléRôle
Clé admin~/.config/sops/age/keys.txtÉditer les secrets depuis le poste admin
Clé d’infra/etc/sops/age/infra.keyDéchiffrer sur chaque hôte au déploiement
  • La clé admin dérive de votre clé SSH (~/.ssh/id_ed25519, via ssh-to-age).
  • La clé d’infra est générée une fois, puis poussée sur chaque hôte.
  • Les destinataires sont listés dans usr/secrets/.sops.yaml (admin + infra).

Une seule commande prépare tout l’appareillage de secrets :

Fenêtre de terminal
just configure-admin-host

Elle est idempotente et crée, au besoin :

  • la clé SSH du déployeur (nix) ;
  • la clé admin (depuis la clé SSH) et la clé d’infra (age-keygen) ;
  • le fichier .sops.yaml (destinataires) ;
  • un mot de passe par défaut (just passwd-default) ;
  • la clé de signature du cache binaire Harmonia.
CommandeEffet
just passwd-default(Re)définit le mot de passe par défaut des comptes
just passwd <user>Définit le mot de passe d’un utilisateur
just passwd-resticGénère les secrets de sauvegarde (par hôte / zone)
just sopsÉdite le fichier de secrets à la main ($EDITOR)

Après un changement, déployez pour le propager :

Fenêtre de terminal
just passwd alice
just apply @user-alice # déploie la nouvelle empreinte

Un hôte ne déchiffre les secrets qu’avec la clé d’infra. Elle est posée automatiquement par just configure <host>, ou à la main :

Fenêtre de terminal
just push-key <host> # copie /etc/sops/age/infra.key sur l'hôte

La rotation remplace la clé d’infra sur tout le parc, en trois temps vérifiés :

  1. Introduire la nouvelle clé

    Fenêtre de terminal
    just rotate init # nouvelle clé + ré-chiffrement (ancienne + nouvelle)
  2. Diffuser sur tous les hôtes

    Fenêtre de terminal
    just rotate push-keys # chaque hôte reçoit les deux clés
    just apply '*'
  3. Finaliser

    Fenêtre de terminal
    just rotate finalize # abandonne l'ancienne clé (après vérification)
    just apply '*'