Secrets
Passer des secrets sur la ligne de commande est une mauvaise pratique. Les solutions de contournement les plus fréquemment utilisées sont :
-
Le stockage du secret dans un fichier : le secret n’apparaît pas dans l’historique, on le rappelle dans la ligne de commande avec
$(cat ./secretFile)
. Mais on oublie souvent d’effacer le fichier après la fin des opérations, et les secrets sont éparpillés (en clair) sur les serveurs de travail. -
Fausse bonne idée : Ajouter un espace au début de la commande “bash”. Bien connue des sysadmins, cette astuce permet de ne pas historiser les commandes exécutées. Dans la pratique, il arrive fréquemment d’oublier cet espace et dans un environnement partagé, c’est surtout une très mauvaise pratique. En cas de problème l’historique étant inexistant, la résolution des problèmes devient complexe.
La solution proposée est le support natif de SOPS pour les fichiers d’inventaires. Ce dispositif permet de stocker les secrets chiffrés, et permettre l’intégration dans un dépôt Git.
Lorsque le paramètre ‘-i’ est utilisé avec la commande “run”, “automation-cli” détecte automatiquement le type de cet inventaire. S’il est chiffré avec SOPS, “automation-cli” utilise votre environnement SOPS pour tenter de le déchiffrer. Le déchiffrement est effectué en RAM, et n’effectue aucune copie sur disque.
[...]// using sops binay with current SOPS environment - result is redirect to variableconst decryptedContent = execSync(`sops --decrypt ${this.filePath}`);// document is parsed from variable contentyamlDoc = parseDocument(decryptedContent.toString());[...]
Installation et initialisation de SOPS
SOPS est un projet développé par la fondation Mozilla. Le but étant de pouvoir exposer publiquement des fichiers contenant des secrets (dépôt Git). L’utilisation de fichiers chiffrés implique de disposer de la clé de déchiffrement. La structure du document reste conservée et supporte YAML, env, INI, JSON…
Les clés de chiffrement utilisées sont de type “age”.
sudo apt-get install -y ageversion="3.9.1"platform="amd64" # ou arm64package="/tmp/sops.deb"sudo wget -O "${package}" "https://github.com/getsops/sops/releases/download/v${version}/sops_${version}_${platform}.deb"if [ -f "${package}" ];then sudo dpkg -i "${package}"else echo "File ${binary} not found" exit 1fi
Création d’une clé ‘age’
Cette clé sera utilisée par SOPS pour chiffrer et déchiffrer les documents SOPS.
# idempotent method# Default user storage path "(home directory)/.config/sops/age"mkdir -p ~/.config/sops/ageage-keygen >> ~/.config/sops/age/keys.txtchmod 600 ~/.config/sops/age/keys.txt
La sortie standard expose la clé publique qui sera utilisée pour chiffrer vos documents.
Sauvegarde de la clé dans un gestionnaire de mot de passe
cat ~/.config/sops/age/keys.txt
Un secret est établi sur 3 lignes :
# created: 2024-08-16T14:36:52+02:00# public key: [public key]AGE-SECRET-KEY-[private key]
Copier les trois lignes dans votre gestionnaire de mot de passe ou encoder ces trois lignes avec base64 : echo "[content]" |base64 -w 0
.
Ajout d’une clé existante
Vous disposez déjà d’une clé stockée dans un gestionnaire de mot de passe d’équipe par exemple, pour l’ajouter au portefeuille (existant ou inexistant).
# idempotent method# Default user storage path "(home directory)/.config/sops/age"mkdir -p ~/.config/sops/ageecho "[key to add (3 lines)]" >> ~/.config/sops/age/keys.txt#or with base64 contentecho "[base64 content]" |base64 -d >> ~/.config/sops/age/keys.txtchmod 600 ~/.config/sops/age/keys.txt
Création d’un “inventoryFile” chiffré avec SOPS
Nouveau fichier
sops edit --age [age public key] inventory.yaml
Fichier existant
sops encrypt --age [age public key] inventory.yaml > inventory.yaml.enc# delete originalrm inventory.yaml# rename crypted file to inventoryFile original file namemv inventory.yaml.enc inventory.yaml
Manipuler les fichiers chiffrés avec SOPS en ligne de commande
sops [file full path]
Par défaut sops utilise l’éditeur “vi”, pour utiliser l’éditeur de votre choix (ex : nano), préfixer la commande par : EDITOR="nano" sops [file full path]
.
Manipuler les fichiers chiffrés avec SOPS dans VSCode
- Installer l’extension : @signageos/vscode-sops.
- Ouvrir le fichier chiffré, vous travaillez sur une copie (déchiffré), à chaque modification le contenu “en clair” est chiffré dans le fichier original.