This repository has been archived on 2026-08-21. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
infra/.sops.yaml
Bertrand Benjamin d619f165f0 feat(secrets): chiffrement des secrets avec SOPS + age
Met en place la mécanique de gestion des secrets du dépôt :

- .sops.yaml : deux périmètres séparés par acteur. Les
  stacks/*/secrets.env.yaml sont déchiffrables par le compte de
  déploiement de chioggia ET l'admin ; tout le reste par l'admin seul.
  Une compromission du serveur ne donne donc pas accès aux credentials
  OVH, qui restent gérés par pass.
- .gitignore : tout .env est traité comme un accident. La configuration
  non sensible de chaque stack vit dans un fichier `env_file` versionné.
- README : création des clés, emplacements, recettes et pièges.

Les secrets sont injectés à la volée par `sops exec-env` : aucun fichier
déchiffré ne touche le disque.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 16:38:34 +02:00

54 lines
2.2 KiB
YAML

# ============================================================
# Politique de chiffrement SOPS
# ============================================================
# Deux périmètres, séparés par ACTEUR — c'est le garde-fou principal
# de ce dépôt :
#
# 1. stacks/*/secrets.env.yaml
# Déchiffrables par chioggia (déploiement automatique, sans humain)
# ET par l'admin. YAML PLAT uniquement (CLE: valeur) : `sops exec-env`
# ne sait pas exporter une structure imbriquée.
#
# 2. tout le reste
# Déchiffrables par l'admin UNIQUEMENT.
# Conséquence voulue : une compromission de chioggia ne donne PAS
# accès aux credentials OVH / registrar. Sans cette séparation,
# prendre le serveur reviendrait à prendre le domaine (donc les MX,
# le SPF, et la capacité d'émettre des certificats).
#
# Les credentials OpenTofu (OVH, AdGuard) restent gérés par `pass` :
# ils sont utilisés en interactif depuis le poste admin, jamais par une
# machine. Voir dns/ovh.tf et dns/local.tf.
#
# ------------------------------------------------------------
# Générer une clé — une par machine, seule la PUBLIQUE arrive ici :
#
# poste admin : age-keygen | pass insert -m infra/age-key
# (publique : pass show infra/age-key | age-keygen -y)
# serveur : mkdir -p ~/.config/sops/age
# (umask 077; age-keygen -o ~/.config/sops/age/keys.txt)
# age-keygen -y ~/.config/sops/age/keys.txt
#
# Fournir la clé privée à sops :
# poste : export SOPS_AGE_KEY="$(pass show infra/age-key)"
# serveur : ~/.config/sops/age/keys.txt est l'emplacement par défaut,
# lu sans aucune variable d'environnement
#
# Rappel : ajouter une clé ici ne rechiffre RIEN.
# sops updatekeys -y stacks/*/secrets.env.yaml
# ------------------------------------------------------------
keys:
- &lafrite_combava age18m2zl3pwgw97djshzcf4wmhrqxksl4erqse6edkpxpkg5rcz0ujs8u4c7s
- &waha_chioggia age1fh70nny5hzz8a8g9077kgfca0lhlh3wsjf4fjrv4klx5ucdtpdmsazuqdj
creation_rules:
- path_regex: ^stacks/.*/secrets\.env\.yaml$
age:
- *lafrite_combava
- *waha_chioggia
- path_regex: .*
age:
- *lafrite_combava