En corto
| |
SOPS cifra los valores de un archivo estructurado (YAML/JSON/env/ini) y deja las llaves legibles, así que un secrets.enc.yaml da un diff de git limpio y revisable. Para descifrar necesitas la llave privada de GPG en la máquina.
Requisitos
gpg y sops instalados. Verifica: gpg --version y sops --version.
1. Consigue una llave GPG
Usa una existente o crea una:
| |
Copia la fingerprint de 40 caracteres (la línea larga en hex bajo sec). Esa fingerprint es la que referencia SOPS — no el key id corto.
2. Dile a SOPS qué llave usar
Pon un .sops.yaml en la raíz del repo para no pasar llaves a mano:
| |
path_regexacota la regla a los archivos que nombres*.enc.yaml.pgpacepta una o varias fingerprints separadas por coma (varios destinatarios = cualquiera con una de esas llaves privadas puede descifrar).
3. Cifra, edita, descifra
| |
Commitea el archivo cifrado. El texto plano nunca toca git.
Qué toca SOPS
| Parte | ¿Cifrada? |
|---|---|
Valores (password: hunter2) | sí |
Llaves / estructura (password:) | no (diffs legibles) |
Bloque extra sops: | se agrega (destinatarios, MAC) |
Trampas
- Subkeys: para forzar una subkey concreta de GnuPG, agrega
!al final de la fingerprint encreation_rules(ej.A3D6...E8F!). Solo se respeta desde SOPS 3.9.3. - Otro binario de gpg: define
SOPS_GPG_EXECpara apuntar SOPS a un wrapper en vez delgpgpor defecto. - Respalda la llave privada. Si la pierdes, los archivos cifrados se van con ella — SOPS es tan recuperable como la llave GPG. Agrega un segundo destinatario (llave de respaldo/escrow) en
creation_rulesdesde el día uno. - Rotar destinatarios: tras editar
creation_rules, corresops updatekeys secrets.enc.yamlpara re-cifrar la file key con el nuevo conjunto. - Solo los archivos estructurados reciben cifrado a nivel de valor; para un blob usa
sops -e --input-type binary.
Git y automatización
- Lo que vive en git es el archivo cifrado; quien revisa ve nombres de llaves, nunca valores.
- En cualquier host/CI que deba descifrar, importa primero la llave privada al keyring de GPG (
gpg --import) y luegosops -d. - Ansible puede consumir SOPS directo con la colección
community.sops(ej. el lookupcommunity.sops.sops/load_vars), así los playbooks leen secretos sin un descifrado manual. Verifica que la colección esté instalada en el nodo de control.
Ver también
- Docs de SOPS PGP / GnuPG: https://getsops.io/docs/usage/identities/pgp/