samedi 26 septembre 2026

À propos

Contact

Outils & workflow

sops et age pour chiffrer les secrets d’un projet WordPress dans Git

Committer des clés API et des identifiants chiffrés, lisibles uniquement par les clés autorisées, directement dans l'historique Git du projet.

Par Clément Hadrot • 16 mars 2022 • 4 min de lecture • Aucun commentaire
sops et age pour chiffrer les secrets d'un projet WordPress dans Git

Un fichier .env contenant des clés API de production, exclu du dépôt Git via .gitignore, pose un problème classique : il faut le transmettre autrement à chaque nouveau développeur ou nouvelle machine, par un canal parallèle (messagerie, gestionnaire de mots de passe partagé), avec le risque de désynchronisation entre l’historique du code et l’état réel des secrets utilisés. sops, associé à age comme mécanisme de chiffrement, permet de committer ces secrets directement dans Git, mais chiffrés, de sorte que seules les personnes ou machines disposant de la bonne clé privée puissent les lire.

Cette approche diffère des secrets protégés côté plateforme, comme les secrets d’environnement de GitHub Actions : ici, le secret chiffré fait partie de l’historique du dépôt lui-même, versionné comme n’importe quel autre fichier, ce qui permet de savoir exactement quand une valeur a changé et par qui, via l’historique Git standard.

age plutôt que GPG

sops fonctionne avec plusieurs backends de chiffrement (GPG, KMS cloud, age). age s’est imposé comme l’option la plus simple pour une petite équipe : une paire de clés se génère en une commande, sans infrastructure de confiance complexe à mettre en place comme avec GPG :

age-keygen -o cle-privee.txt
# Public key: age1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpq...

Chaque développeur génère sa propre paire de clés, garde la clé privée hors de Git (sur son trousseau système ou un gestionnaire de secrets local), et communique uniquement sa clé publique à l’équipe.

Configurer sops pour le projet

L'essentiel à retenir : Les secrets restent versionnés, mais chiffrés ; age remplace GPG pour une gestion de clés plus simple ; Seules les clés autorisées peuvent déchiffrer

Un fichier .sops.yaml à la racine du projet définit quelles clés publiques peuvent déchiffrer quels fichiers :

creation_rules:
  - path_regex: secrets/.*\.env$
    age: >-
      age1abc123...,
      age1def456...

Chaque clé publique listée correspond à une personne ou une machine autorisée (un serveur CI, par exemple) à déchiffrer les fichiers concernés.

Chiffrer un fichier de secrets

sops --encrypt secrets/production.env > secrets/production.enc.env
git add secrets/production.enc.env
git commit -m "Ajoute les identifiants API de production chiffrés"

Le fichier chiffré ressemble à un bloc de texte illisible, sûr à committer :

API_KEY=ENC[AES256_GCM,data:Kj3f...,iv:...,tag:...,type:str]

Déchiffrer côté déploiement

Sur un serveur ou dans un pipeline disposant de la clé privée correspondante, une simple commande restitue les valeurs en clair, sans jamais les écrire en dur dans un script :

export SOPS_AGE_KEY_FILE=/chemin/vers/cle-privee.txt
sops --decrypt secrets/production.enc.env > .env

Différence avec les secrets GitHub Actions

CritèreSecrets GitHub Actionssops + age dans Git
EmplacementStockés côté plateforme, hors du dépôtVersionnés dans l’historique Git, chiffrés
Historique des changementsNon consultable dans GitVisible via git log sur le fichier chiffré
PortabilitéLiée à la plateforme CI utiliséeIndépendante de toute plateforme
Rotation d’une clé compromiseChangement côté plateforme uniquementNécessite un rechiffrement du fichier

Un piège fréquent : révoquer un accès

Retirer une clé publique de .sops.yaml ne suffit pas à empêcher une personne qui possédait déjà la clé privée de déchiffrer une version antérieure du fichier présente dans l’historique Git. Si un départ d’équipe ou une compromission de clé impose une vraie rotation, il faut générer de nouveaux secrets côté service concerné (nouvelle clé API), pas seulement rechiffrer le fichier avec une nouvelle liste de destinataires.

Un secret chiffré dans Git reste un secret exposé si la clé privée fuite un jour : sops protège le transport et le stockage, pas la nécessité de faire tourner les vraies clés d’API en cas de doute.

En résumé

sops et age permettent de garder les secrets d’un projet WordPress au même endroit que le code, versionnés et traçables, sans dépendre exclusivement des mécanismes de secrets propres à une plateforme CI. Pour une équipe qui utilise plusieurs environnements de déploiement ou qui veut un historique clair des changements de configuration sensible, cette approche apporte une transparence que les secrets purement côté plateforme n’offrent pas nativement.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi