Compare commits

...

7 commits

Author SHA1 Message Date
03848f76fd
[DOCS] Actualizado README con enlaces a documentación de SOPS
- Añadidos enlaces a la documentación de SOPS y SOPS Rules
- Mejorada la visibilidad de la documentación disponible
- Agregada nota con enlaces a la documentación relevante
- Actualizada referencia al script sops_rules.sh con enlace a documentación

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-06 11:16:58 -05:00
9e638c29be
[DOCS] Mejorada la documentación de SOPS con información del repositorio oficial
- Expandida la documentación de SOPS con ejemplos más completos de comandos
- Añadidos detalles sobre opciones avanzadas de configuración en .sops.yaml
- Documentadas las configuraciones con múltiples claves PGP
- Mejorada la sección de mejores prácticas de seguridad
- Incluida información sobre rotación de claves
- Añadidos ejemplos de uso con variables de entorno
- Ampliadas las recomendaciones para equipos y proyectos compartidos

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-06 11:13:55 -05:00
ff02bb9ad1
[DOCS] Documentación completa sobre SOPS y configuración de SOPS Rules
- Creado archivo sops.md con documentación detallada sobre SOPS
- Creado archivo sops_rules.md con guía detallada sobre el script sops_rules.sh
- Explicación de conceptos clave, instalación y uso básico de SOPS
- Instrucciones paso a paso para configurar la encriptación PGP
- Sección de resolución de problemas y mejores prácticas
- Documentación sobre el archivo .sops.yaml y su propósito
- Explicación de cómo funciona la integración con otras herramientas

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-06 11:02:33 -05:00
23809f79fa
[DOCS] Actualizado README con información sobre sops_rules.sh
- Añadido sops_rules.sh como paso obligatorio en el proceso de instalación
- Incluida nota explicativa sobre la importancia de la configuración SOPS
- Añadido script a la tabla de herramientas de seguridad
- Actualizada la sección de seguridad y privacidad con información de configuración GPG
- Mejorada la documentación de la estructura de directorios para incluir .sops.yaml
- Actualizada la descripción de componentes del sistema

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-06 10:52:19 -05:00
3f153b75b1
[FIXED] Manejo defensivo de la configuración freekeyval.dat
- Corregido error cuando el archivo freekeyval.dat no existe
- Añadido valor por defecto para el servicio keyvalue
- Implementado manejo defensivo para evitar errores de ejecución
- Documentado el bloque de código con comentario explicativo

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-06 10:47:43 -05:00
cc3864a342
[FIXED] Mejora en script sops_rules.sh para usar fingerprints GPG
- Corregido el método para obtener los fingerprints GPG completos (40 caracteres)
- Mejorada la visualización de las claves mostrando la parte corta del fingerprint
- Añadido manejo para claves sin información de usuario
- Mejor procesamiento del fingerprint seleccionado
- Información más detallada en la confirmación final

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-06 10:44:34 -05:00
82836ba642
[ADDED] Script para configuración de SOPS con GPG
- Nuevo script sops_rules.sh para generar archivo .sops.yaml
- Usa gum para interfaz interactiva en terminal
- Detecta y muestra las claves GPG disponibles para selección
- Valida el fingerprint seleccionado
- Genera configuración de SOPS para encriptación con PGP
- Incluye instrucciones de uso en la salida del script

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-06 10:41:35 -05:00
5 changed files with 704 additions and 5 deletions

View file

@ -37,10 +37,15 @@ git clone https://git.rosero.one/mrosero/devs.git
cd $HOME/devs
bin/bootstrap.sh
# Configurar SOPS para encriptación GPG (obligatorio)
bin/sops_rules.sh
# Actualizar el entorno (opcional)
bin/update.sh
```
> **IMPORTANTE**: La configuración del arcivo de reglas de sops .sops.yaml es un paso obligatorio antes de poder utilizar la plataforma. bin/sops_rules.sh crea el archivo base de configguración sops para el proyecto. Las claves GPG del desarrollador principal debe existir en el repositorio de claves.
### Estructura de Directorios
MRDevs Tools utiliza una estructura organizada que separa el código (en ~/devs) y la configuración (en directorios ocultos):
@ -66,6 +71,7 @@ MRDevs Tools utiliza una estructura organizada que separa el código (en ~/devs)
| Comando | Descripción |
|---------|-------------|
| `bin/bootstrap.sh` | Instala herramientas básicas (incluyendo oathtool, zbar, redis-cli, gum y glow) y configura la gestión de contenedores |
| `bin/sops_rules.sh` | Configura SOPS con clave GPG para encriptación segura de secretos (paso obligatorio tras la instalación) |
| `bin/update.sh` | Actualiza el entorno de desarrollo y herramientas (incluyendo oathtool, zbar, redis-cli, gum y glow) |
| `bin/npm_install.sh` | Instala NodeJS y npm de forma interactiva |
| `bin/project_new.sh` | Crea un nuevo proyecto con estructura estandarizada según el tipo seleccionado |
@ -138,7 +144,8 @@ MRDevs Tools integra herramientas modernas de Charm para mejorar la experiencia
| Comando | Descripción |
|---------|-------------|
| `bin/qr_secret.sh` | Extrae secretos de imágenes QR y los guarda encriptados con SOPS |
| `bin/sops_rules.sh` | Configura SOPS con clave GPG para encriptación segura de secretos ([documentación](docs/sops_rules.md)) |
| `bin/qr_secret.sh` | Extrae secretos de imágenes QR y los guarda encriptados con [SOPS](docs/sops.md) |
| `bin/vpn_install.sh` | Instala el cliente Pritunl VPN |
| `bin/vpn_install.sh --update` | Actualiza el cliente VPN a la última versión |
| `bin/vpn_users.sh` | Gestiona usuarios de la VPN |
@ -161,6 +168,8 @@ MRDevs Tools integra herramientas modernas de Charm para mejorar la experiencia
## 📚 Guía de Usuario
> **NOTA**: Consulta nuestra documentación detallada en: [SOPS](docs/sops.md), [SOPS Rules](docs/sops_rules.md) y [Gum Forms](docs/forms-gum.md).
### Herramientas de CLI Modernas
MRDevs Tools incluye soporte completo para herramientas modernas de CLI de [Charm](https://charm.sh/):
@ -598,7 +607,8 @@ El script analizará el código fuente, contará las líneas efectivas, y calcul
MRDevs Tools está diseñado con la seguridad y privacidad en mente:
- **Almacenamiento seguro**: Todos los tokens y credenciales se almacenan encriptados usando SOPS
- **Almacenamiento seguro**: Todos los tokens y credenciales se almacenan encriptados usando [SOPS](docs/sops.md) con PGP
- **Configuración GPG obligatoria**: El script [`sops_rules.sh`](docs/sops_rules.md) configura la clave maestra para encriptación de secretos
- **Directorios ocultos**: La configuración sensible se almacena en directorios ocultos (con prefijo `.`)
- **Sin telemetría**: Las herramientas no recopilan ni envían datos de uso
- **Podman como predeterminado**: Se usa Podman (sin privilegios) para mayor seguridad en contenedores
@ -638,13 +648,14 @@ $HOME/
└── .developer/ # Tokens y configuraciones de desarrollo
├── github.sops.yaml # Token de GitHub encriptado
└── forgejo.sops.yaml # Token de Forgejo encriptado
└── .sops.yaml # Configuración de SOPS para PGP
```
### Componentes Principales
- **Bibliotecas Base**: Conjunto de funciones reutilizables (`base.lib`, `bootstrap.lib`, `developers.lib`, `console.lib`, etc.)
- **Sistema de Mensajes**: Soporte multilingüe para internacionalización con prefijos específicos por herramienta
- **Gestión de Configuración**: Archivos de configuración centralizados, plantillas .gitignore por tipo de proyecto
- **Gestión de Configuración**: Archivos de configuración centralizados, plantillas .gitignore por tipo de proyecto, configuración SOPS para cifrado GPG
- **Herramientas de Automatización**: Scripts y playbooks de Ansible
- **Gestión de Servicios**: Administración de servicios locales como Node-RED, Ollama y más
- **Creación de Proyectos**: Sistema estandarizado de plantillas para diversos tipos de proyectos
@ -715,7 +726,7 @@ El texto completo de la licencia está disponible en el archivo [LICENSE.md](LIC
Para dudas o problemas, contacte con:
- Email: mauro@rosero.one
- Web: https://rosero.one
- Web: https://mauro.rosero.one
---

View file

@ -34,7 +34,12 @@ DEVELOPER_DIR=${HOME}/.developer
DATENOW="$(date +"%Y-%m-%d %H:%M:%S")"
DATEBAK="$(date +"%Y%m%d%H%M%S")"
FREEKV_URL=$(cat < "${BIN_PATH:=${BIN_HOME}}/${CONFPATH}/freekeyval.dat")
# Configuración del servicio de almacenamiento clave-valor
if [ -f "${BIN_PATH:=${BIN_HOME}}/${CONFPATH}/freekeyval.dat" ]; then
FREEKV_URL=$(cat < "${BIN_PATH}/${CONFPATH}/freekeyval.dat")
else
FREEKV_URL="https://keyvalue.immanuel.co"
fi
FREEKV_SOPS_FILE=freekv-sops.devs.yaml
DOCKER_LOCAL=dockerfile.local

244
bin/sops_rules.sh Executable file
View file

@ -0,0 +1,244 @@
#!/bin/bash
#Script : sops_rules.sh
#Apps : MRDEVS TOOLS
#Description : Genera archivo .sops.yaml para encriptación con GPG
#Author : Cortana Rosero One <cortana@rosero.one>
#Generated : Created by Claude Code (claude-3-7-sonnet-20250219)
#Created : 2025/04/06 21:45:00
#Modified : 2025/04/06 21:45:00
#Version : 1.0.0
#Use Notes : ./sops_rules.sh
#==============================================================================
# Derechos de Autor 2025 Mauro Rosero P. <mauro@rosero.one>
#==============================================================================
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
# bajo los términos de la Licencia Pública Affero General de GNU tal como
# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia,
# o (a su elección) cualquier versión posterior.
#
# Este programa se distribuye con la esperanza de que sea útil,
# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
# Licencia Pública Affero General de GNU para obtener más detalles.
#
# Debería haber recibido una copia de la Licencia Pública Affero General
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
# Configuración inicial
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$SCRIPT_DIR/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
title="${head_000} ${head_002}"
# Verificar que gum esté instalado
command_installed gum
if [ $? -ne 0 ]; then
echo "Error: gum no está instalado. Ejecutando bootstrap.sh..."
"${BIN_HOME}/${BIN_BASE}/bootstrap.sh"
# Verificar nuevamente
command_installed gum
if [ $? -ne 0 ]; then
echo "Error: No se pudo instalar gum. Abortando."
exit 1
fi
fi
# Verificar que GPG esté instalado
command_installed gpg
if [ $? -ne 0 ]; then
echo "Error: gpg no está instalado. Instalando GPG..."
os_pkgs_install gnupg
# Verificar nuevamente
command_installed gpg
if [ $? -ne 0 ]; then
echo "Error: No se pudo instalar GPG. Abortando."
exit 1
fi
fi
# Verificar que SOPS esté instalado
command_installed sops
if [ $? -ne 0 ]; then
echo "Error: sops no está instalado. Instalando SOPS..."
"${BIN_HOME}/${BIN_BASE}/bootstrap.sh"
# Verificar nuevamente
command_installed sops
if [ $? -ne 0 ]; then
echo "Error: No se pudo instalar SOPS. Abortando."
exit 1
fi
fi
# Función para validar fingerprint GPG
validate_fingerprint() {
local fp=$1
# Verificar que no esté vacío
if [ -z "$fp" ]; then
return 1
fi
# Verificar longitud (40 caracteres para fingerprint completo)
if [ ${#fp} -ne 40 ]; then
return 2
fi
# Verificar formato (hexadecimal)
if ! [[ $fp =~ ^[A-Fa-f0-9]+$ ]]; then
return 3
fi
# Verificar si existe en el keyring
if ! gpg --list-keys "$fp" &>/dev/null; then
return 4
fi
return 0
}
# Función para obtener las claves GPG disponibles con sus huellas digitales
get_available_keys() {
gpg --list-keys --with-colons | grep -E "^fpr" | awk -F: '{print $10}'
}
# Función para mostrar un error y esperar confirmación
show_error() {
gum style --foreground "#FF0000" --bold "$1"
gum input --placeholder "Presiona Enter para continuar..."
}
# Función para obtener información de la clave a partir del fingerprint
get_key_info() {
local fingerprint=$1
local key_info=$(gpg --list-keys --with-colons "$fingerprint")
local user_id=$(echo "$key_info" | grep -E "^uid" | head -n 1 | awk -F: '{print $10}')
# Si no hay información de usuario, mostrar solo el fingerprint
if [ -z "$user_id" ]; then
echo "Sin información de usuario"
else
echo "$user_id"
fi
}
# Ruta donde se creará el archivo .sops.yaml
SOPS_CONFIG="$BIN_HOME/.sops.yaml"
# Verificar si el archivo ya existe
if [ -f "$SOPS_CONFIG" ]; then
if ! gum confirm "El archivo $SOPS_CONFIG ya existe. ¿Desea sobrescribirlo?"; then
echo "Operación cancelada por el usuario."
exit 0
fi
fi
# Mostrar título
echo
gum style --foreground 212 --bold --align center "Configuración de SOPS PGP para Encriptación"
echo
# Buscar claves disponibles
echo "Buscando claves GPG disponibles..."
AVAILABLE_KEYS=($(get_available_keys))
if [ ${#AVAILABLE_KEYS[@]} -eq 0 ]; then
show_error "No se encontraron claves GPG. Por favor, genere o importe una clave GPG primero."
exit 1
fi
# Mostrar información y permitir selección
echo
gum style --foreground "#00AAFF" "Claves GPG disponibles (Fingerprints):"
echo
# Formatear opciones para mostrar información clara
KEY_OPTIONS=()
for key in "${AVAILABLE_KEYS[@]}"; do
key_info=$(get_key_info "$key")
# Formatear la clave para mostrar solo los últimos 8 caracteres y la información de usuario
key_short="${key:(-8)}"
KEY_OPTIONS+=("$key - $key_short ($key_info)")
done
# Seleccionar la clave
SELECTED_KEY_FULL=$(gum choose "${KEY_OPTIONS[@]}")
# Extraer el fingerprint completo (la primera palabra antes del guion)
SELECTED_KEY=$(echo "$SELECTED_KEY_FULL" | cut -d ' ' -f 1)
# Validar la selección
if [ -z "$SELECTED_KEY" ]; then
echo "No se seleccionó ninguna clave. Operación cancelada."
exit 1
fi
validate_fingerprint "$SELECTED_KEY"
VALIDATION_RESULT=$?
if [ $VALIDATION_RESULT -ne 0 ]; then
case $VALIDATION_RESULT in
1) show_error "Error: El fingerprint está vacío." ;;
2) show_error "Error: El fingerprint debe tener 40 caracteres de longitud." ;;
3) show_error "Error: El fingerprint debe contener solo caracteres hexadecimales (A-F, 0-9)." ;;
4) show_error "Error: La clave con fingerprint $SELECTED_KEY no se encuentra en el keyring GPG." ;;
*) show_error "Error de validación desconocido." ;;
esac
exit 1
fi
# Confirmar la selección
echo
gum style --foreground "#00FF00" "Se utilizará la siguiente clave para encriptación SOPS:"
gum style "Fingerprint completo: $SELECTED_KEY"
gum style "ID corto: ${SELECTED_KEY:(-8)}"
gum style "Usuario: $(get_key_info "$SELECTED_KEY")"
echo
if ! gum confirm "¿Confirma esta selección?"; then
echo "Operación cancelada por el usuario."
exit 0
fi
# Crear el archivo .sops.yaml
echo "Generando archivo de configuración SOPS..."
cat > "$SOPS_CONFIG" << EOF
creation_rules:
- pgp: '$SELECTED_KEY'
EOF
# Verificar que el archivo se haya creado correctamente
if [ $? -eq 0 ] && [ -f "$SOPS_CONFIG" ]; then
gum style --foreground "#00FF00" --bold "✅ Archivo .sops.yaml creado exitosamente en $SOPS_CONFIG"
gum style "Esta configuración se utilizará para encriptar/desencriptar archivos con SOPS"
gum style "utilizando la clave GPG seleccionada."
echo
gum style --foreground "#FFAA00" "Ejemplo de uso:"
gum style "sops --encrypt archivo.json > archivo.sops.json"
gum style "sops --decrypt archivo.sops.json > archivo.json"
else
show_error "❌ Error al crear el archivo de configuración SOPS."
exit 1
fi

185
docs/sops.md Normal file
View file

@ -0,0 +1,185 @@
# SOPS: Gestión Segura de Secretos
## Introducción
[SOPS (Secrets OPerationS)](https://github.com/getsops/sops) es una herramienta de código abierto diseñada para la gestión segura de secretos. Desarrollada originalmente por Mozilla y posteriormente mantenida por la comunidad, SOPS permite encriptar y desencriptar archivos de configuración que contienen secretos como contraseñas, tokens API, claves de acceso y otros datos sensibles.
En el entorno de MRDevs Tools, SOPS es un componente fundamental para la seguridad general de la plataforma, proporcionando una forma estandarizada y segura de manejar información confidencial.
![SOPS en funcionamiento](img/sops-overview.gif "SOPS en funcionamiento")
## Características Principales
- **Encriptación de archivos de configuración**: Permite almacenar secretos de forma segura en repositorios Git.
- **Soporte para múltiples formatos**: Funciona con YAML, JSON, ENV, INI y BINARY.
- **Encriptación selectiva**: Puede encriptar solo valores específicos dentro de un archivo, manteniendo las claves y la estructura visibles.
- **Múltiples métodos de encriptación**: Soporta KMS de AWS, GCP KMS, Azure Key Vault, PGP, age y HashiCorp Vault.
- **Integración con Git**: Funciona perfectamente con flujos de trabajo de control de versiones.
- **Rotación de claves**: Permite actualizar las claves de encriptación sin necesidad de desencriptar y reencriptar los secretos.
## Instalación
En MRDevs Tools, SOPS se instala automáticamente como parte del proceso de bootstrap:
```bash
bin/bootstrap.sh
```
Para verificar que SOPS está instalado correctamente:
```bash
sops --version
```
## Funcionamiento Básico
SOPS utiliza claves GPG para encriptar y desencriptar secretos. La ventaja principal es que permite almacenar archivos de configuración encriptados en sistemas de control de versiones mientras se mantiene la seguridad de los datos sensibles.
### Conceptos Clave
1. **Encriptación a nivel de valor**: A diferencia de otras herramientas que encriptan archivos completos, SOPS encripta solo los valores individuales, manteniendo la estructura del archivo visible.
2. **Transparencia y auditabilidad**: Cada archivo encriptado contiene metadatos sobre quién lo encriptó, cuándo, y con qué clave.
3. **Archivos de configuración**: SOPS puede ser configurado utilizando un archivo `.sops.yaml`, que define reglas de creación y reglas de descifrado.
## Uso Básico
### Encriptar un Archivo
```bash
# Usando archivo .sops.yaml para la configuración
sops --encrypt config.yaml > config.enc.yaml
# Especificando la clave PGP directamente
sops --encrypt --pgp=FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4 config.yaml > config.enc.yaml
# Usando variable de entorno para especificar claves
export SOPS_PGP_FP="85D77543B3D624B63CEA9E6DBC17301B491B3F21,FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4"
sops --encrypt config.yaml > config.enc.yaml
```
### Desencriptar un Archivo
```bash
# Desencriptar a stdout
sops --decrypt config.enc.yaml
# Desencriptar a un archivo
sops --decrypt config.enc.yaml > config.yaml
# Desencriptar sección específica de un archivo YAML
sops --decrypt --extract '["database"]["password"]' config.enc.yaml
```
### Editar un Archivo Encriptado
SOPS incluye un editor integrado que facilita la edición de archivos encriptados:
```bash
# Editar utilizando el editor predeterminado
sops config.enc.yaml
# Especificar editor usando variable de entorno
EDITOR=nano sops config.enc.yaml
```
Este comando abrirá el archivo desencriptado en tu editor. Al guardar y salir, SOPS reencriptará automáticamente el archivo.
### Rotar Claves
Si necesitas actualizar o añadir claves a un archivo ya encriptado:
```bash
# Actualizar usando el nuevo .sops.yaml
sops updatekeys config.enc.yaml
# Especificar nuevas claves explícitamente
sops updatekeys --pgp=NUEVA_FINGERPRINT config.enc.yaml
```
## Integración con MRDevs Tools
MRDevs Tools utiliza SOPS para encriptar varios tipos de información sensible:
1. **Tokens de API**: Para servicios como GitHub, GitLab, Forgejo, y APIs de IA.
2. **Credenciales de acceso**: Para servicios internos y externos.
3. **Configuraciones VPN**: Datos de configuración para conexiones VPN seguras.
4. **Secretos TOTP/HOTP**: Extraídos de códigos QR y almacenados de forma segura.
Todos estos secretos se almacenan en archivos YAML encriptados en la estructura de directorios de MRDevs Tools:
```
$HOME/
└── .developer/ # Tokens para desarrollo
├── github.sops.yaml # Token GitHub encriptado
└── forgejo.sops.yaml # Token Forgejo encriptado
└── .cortana/ # Configuración para IA
└── cortana.sops.yaml # Token Claude Code encriptado
└── .sops.yaml # Configuración SOPS global
```
## Flujo de Trabajo con SOPS en MRDevs Tools
1. **Configuración inicial**: Durante la instalación de MRDevs Tools, se establece una clave GPG maestra para encriptación mediante el script `bin/sops_rules.sh`.
2. **Creación de secretos**: Cuando se añade un nuevo secreto (por ejemplo, un token de API), se encripta automáticamente con SOPS utilizando la clave GPG configurada.
3. **Acceso a secretos**: Las herramientas de MRDevs Tools acceden a estos secretos desencriptándolos en memoria cuando es necesario, sin exponerlos en texto plano.
4. **Rotación de claves**: Si es necesario cambiar la clave GPG, el script `bin/sops_rules.sh` puede ser ejecutado nuevamente para actualizar la configuración.
## Seguridad y Mejores Prácticas
Para garantizar la máxima seguridad al utilizar SOPS en MRDevs Tools:
1. **Proteger la clave GPG**: La seguridad de tus secretos depende de la seguridad de tu clave GPG.
* Utiliza contraseñas fuertes para proteger tu clave privada.
* Considera utilizar una tarjeta YubiKey u otro token de hardware para almacenar claves GPG.
2. **Hacer copias de seguridad**: Utilizar `bin/profile_backup.sh` para hacer copias de seguridad de tu configuración GPG.
* Almacena las copias de seguridad en un lugar seguro, fuera de línea si es posible.
* Documenta el procedimiento de recuperación de claves.
3. **Usar múltiples claves cuando sea apropiado**:
* Para equipos, configura SOPS con múltiples claves GPG para que varios miembros puedan acceder a los secretos.
* Considera utilizar subclaves GPG específicas para cada propósito (encriptación vs. firma).
4. **Establecer políticas de permisos estrictas**:
* Verificar los permisos de archivo para los archivos SOPS encriptados (permisos 600 recomendados).
* Limitar el acceso al archivo `.sops.yaml` solo a usuarios autorizados.
5. **Implementar rotación de claves periódica**:
* Actualiza tus claves GPG periódicamente y utiliza `sops updatekeys` para actualizar los archivos encriptados.
* Establece un procedimiento para la revocación de claves en caso de compromiso.
6. **Mantener el software actualizado**:
* Actualizar regularmente SOPS para obtener mejoras de seguridad.
* Mantener también actualizado GPG y las bibliotecas relacionadas.
## Resolución de Problemas
### Error: "Failed to decrypt"
Este error sucede cuando no tienes la clave privada correcta para desencriptar el archivo. Posibles soluciones:
1. Asegurarte de que tienes la clave GPG correcta importada.
2. Verificar que el archivo `.sops.yaml` está correctamente configurado.
3. Comprobar que el archivo no está corrupto.
### Error: "No matching encryption keys found"
Este error ocurre cuando SOPS no puede encontrar una clave que coincida con las reglas de creación. Soluciones:
1. Ejecutar `bin/sops_rules.sh` para configurar correctamente el archivo `.sops.yaml`.
2. Verificar que tu clave GPG está disponible para el sistema.
## Recursos Adicionales
- [Documentación oficial de SOPS](https://github.com/getsops/sops)
- [Tutorial en profundidad de Mozilla](https://blog.mozilla.org/security/2017/10/17/managing-secrets-mozilla-sops/)
- [Mejores prácticas para gestión de secretos](https://cloud.google.com/secret-manager/docs/best-practices)
---
Si necesitas ayuda adicional con SOPS, contacta con el equipo de desarrollo mediante `mauro@rosero.one`.

254
docs/sops_rules.md Normal file
View file

@ -0,0 +1,254 @@
# Configuración de SOPS Rules en MRDevs Tools
## Introducción
El script `sops_rules.sh` es una herramienta fundamental en MRDevs Tools que configura la encriptación PGP para SOPS (Secrets OPerationS). Este script genera el archivo `.sops.yaml` que define las reglas de creación y encriptación para todos los secretos gestionados por la plataforma.
La ejecución de `sops_rules.sh` es un paso **obligatorio** durante la instalación de MRDevs Tools, ya que establece la base para la gestión segura de secretos en todo el sistema.
![Proceso de configuración SOPS Rules](img/sops-rules-flow.png)
## Objetivo y Funcionamiento
El objetivo principal de `sops_rules.sh` es simplificar la configuración de SOPS mediante una interfaz interactiva que:
1. Detecta todas las claves GPG disponibles en el sistema
2. Permite seleccionar la clave maestra que se utilizará para encriptar/desencriptar secretos
3. Genera el archivo de configuración `.sops.yaml` con las reglas adecuadas
4. Valida la configuración para asegurar su correcto funcionamiento
Este proceso garantiza que todos los secretos de la plataforma (tokens API, credenciales, configuraciones) sean encriptados de manera consistente con la misma clave GPG, facilitando su gestión y manteniendo la seguridad.
## Requisitos Previos
Antes de ejecutar `sops_rules.sh`, debes tener:
1. **GPG instalado y configurado**: Al menos una clave GPG debe estar disponible en tu keyring.
2. **Bootstrap completado**: El script `bootstrap.sh` debe haberse ejecutado previamente para instalar las dependencias necesarias.
Si no tienes una clave GPG configurada, puedes crear una ejecutando:
```bash
bin/gpg_init.sh
```
## Uso del Script
Ejecutar el script es sencillo:
```bash
bin/sops_rules.sh
```
### Proceso Paso a Paso
El script sigue estos pasos:
1. **Verificación de requisitos**: Comprueba que GPG, SOPS y Gum (para la interfaz) estén instalados.
2. **Detección de claves GPG**: Busca todas las claves GPG disponibles en tu sistema.
3. **Selección de clave**: Muestra una lista interactiva de las claves disponibles con sus fingerprints y nombres de usuario.
![Selección de clave GPG](img/sops-rules-selection.png)
4. **Validación**: Verifica que la clave seleccionada es válida (longitud correcta, formato hexadecimal, presente en el keyring).
5. **Confirmación**: Muestra un resumen de la clave seleccionada y solicita confirmación antes de continuar.
6. **Generación de configuración**: Crea el archivo `.sops.yaml` en el directorio raíz de MRDevs Tools (`$HOME/devs/.sops.yaml`).
7. **Verificación final**: Confirma que el archivo se ha creado correctamente y muestra ejemplos de uso.
## Estructura del Archivo .sops.yaml
El archivo generado por `sops_rules.sh` tiene la siguiente estructura básica:
```yaml
creation_rules:
- pgp: 'FINGERPRINT_COMPLETO_DE_TU_CLAVE_GPG'
```
Donde `FINGERPRINT_COMPLETO_DE_TU_CLAVE_GPG` es el fingerprint de 40 caracteres de la clave seleccionada (por ejemplo: `ACB17A9DB7A680D0FED714E2A17ADF8EA1E9DB07`).
### Explicación de las Reglas de Creación
Las "creation_rules" definidas en el archivo `.sops.yaml` determinan cómo SOPS encriptará nuevos archivos. Este archivo de configuración permite a SOPS saber automáticamente qué claves usar cuando no se especifican explícitamente en la línea de comandos.
Con esta configuración, cualquier comando SOPS ejecutado dentro del directorio de MRDevs Tools utilizará automáticamente esta clave GPG para la encriptación sin necesidad de especificarla cada vez.
### Configuraciones Avanzadas
El archivo `.sops.yaml` puede ser mucho más sofisticado, permitiendo configuraciones avanzadas:
#### Múltiples Claves PGP
Si deseas que varios miembros del equipo puedan desencriptar los secretos, puedes especificar múltiples fingerprints GPG:
```yaml
creation_rules:
- pgp: >-
85D77543B3D624B63CEA9E6DBC17301B491B3F21,
FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4
```
#### Reglas Basadas en Patrones de Archivos
Puedes definir diferentes reglas de encriptación según el patrón de nombre de archivo:
```yaml
creation_rules:
- path_regex: \.dev\.yaml$
pgp: 'DEV_ENVIRONMENT_GPG_FINGERPRINT'
- path_regex: \.prod\.yaml$
pgp: 'PRODUCTION_ENVIRONMENT_GPG_FINGERPRINT'
```
Con esta configuración, los archivos que terminen en `.dev.yaml` usarán una clave, mientras que los que terminen en `.prod.yaml` usarán otra.
#### Soporte para Otros Métodos de Encriptación
Aunque en MRDevs Tools utilizamos principalmente PGP, SOPS soporta otros métodos de encriptación como AWS KMS, GCP KMS, Azure Key Vault, age, y HashiCorp Vault:
```yaml
creation_rules:
- path_regex: \.dev\.yaml$
kms: 'arn:aws:kms:us-west-2:927034868273:key/fe86dd69-4132-404c-ab86-4269956b4500'
- path_regex: \.prod\.yaml$
gcp_kms: 'projects/my-project/locations/global/keyRings/my-keyring/cryptoKeys/my-key'
```
## Casos de Uso Comunes
### 1. Encriptar un Nuevo Archivo de Configuración
Una vez configurado SOPS con `sops_rules.sh`, puedes encriptar fácilmente archivos:
```bash
cd $HOME/devs
sops --encrypt config_secrets.yaml > config_secrets.sops.yaml
```
### 2. Desencriptar un Archivo Existente
```bash
sops --decrypt .cortana/cortana.sops.yaml
```
### 3. Editar un Archivo Encriptado In-Situ
```bash
sops .developer/github.sops.yaml
```
### 4. Verificar la Configuración Actual
Para verificar qué clave se está utilizando actualmente:
```bash
cat $HOME/devs/.sops.yaml
```
## Reconfiguración y Actualización
Si necesitas cambiar la clave GPG utilizada para encriptar secretos (por ejemplo, porque has generado una nueva o porque la anterior ha caducado), simplemente vuelve a ejecutar el script:
```bash
bin/sops_rules.sh
```
**Nota importante**: Cambiar la clave de encriptación no reencripta automáticamente los archivos existentes. Deberás desencriptar y reencriptar manualmente los archivos que ya estaban encriptados con la clave anterior.
## Integración con Otras Herramientas
El archivo `.sops.yaml` generado por `sops_rules.sh` es utilizado por varias herramientas en MRDevs Tools:
- **`bin/ai_token.sh`**: Para encriptar tokens de proveedores de IA
- **`bin/cortana_token.sh`**: Para gestionar de forma segura el token de Claude Code
- **`bin/cversion_token.sh`**: Para encriptar tokens de plataformas de control de versiones
- **`bin/qr_secret.sh`**: Para almacenar de forma segura los secretos extraídos de códigos QR
## Resolución de Problemas
### No se detectan claves GPG
Si el script no muestra ninguna clave GPG disponible:
1. Verifica que tienes al menos una clave GPG generada:
```bash
gpg --list-keys
```
2. Si no tienes ninguna clave, genera una:
```bash
bin/gpg_init.sh
```
### Error al generar el archivo .sops.yaml
Si encuentras errores al generar el archivo de configuración:
1. Verifica que tienes permisos de escritura en el directorio:
```bash
ls -la $HOME/devs
```
2. Asegúrate de que SOPS está instalado correctamente:
```bash
sops --version
```
3. Prueba a ejecutar el script con modo verbose (ejecuta el script con comando bash en modo verbose):
```bash
bash -x bin/sops_rules.sh
```
### Problemas al encriptar/desencriptar archivos después de la configuración
Si experimentas problemas al usar SOPS después de configurarlo:
1. Verifica que la clave privada GPG está disponible y desbloqueada.
2. Comprueba que el archivo `.sops.yaml` contiene el fingerprint correcto.
3. Asegúrate de estar en el directorio correcto al ejecutar comandos SOPS.
## Mejores Prácticas
### Gestión de Claves
1. **Hacer copia de seguridad de tus claves GPG**:
* Utiliza `bin/profile_backup.sh` para respaldar toda tu configuración GPG.
* Considera exportar las claves manualmente con `gpg --export-secret-keys --armor > my-private-key.asc`
2. **Proteger tus claves adecuadamente**:
* Usar una contraseña robusta para proteger tu clave GPG.
* Considerar el uso de tokens físicos como YubiKey para mayor seguridad.
* Evitar compartir o exponer la clave privada.
3. **Almacenar de forma segura los fingerprints**:
* Documentar el fingerprint completo (40 caracteres) en un lugar seguro para referencia futura.
* Mantener un registro de qué clave se usa para cada entorno o proyecto.
### Configuración y Mantenimiento
1. **Estructura de permisos óptima**:
* Limitar el acceso al archivo `.sops.yaml` solo a usuarios autorizados (permisos 600 recomendados).
* Asegurar que el directorio que contiene los secretos encriptados tenga permisos adecuados.
2. **Rotación de claves programada**:
* Establecer un proceso de rotación de claves periódico según las políticas de seguridad de tu organización.
* Documentar el procedimiento completo para actualizar claves en archivos ya encriptados.
3. **Configuración para equipos**:
* Para entornos con múltiples desarrolladores, configurar reglas con múltiples claves PGP.
* Considerar el uso de estructuras de claves jerárquicas para equipos grandes.
* Implementar políticas claras sobre quién puede añadir/eliminar claves del archivo de configuración.
## Recursos Adicionales
- [Documentación de SOPS](docs/sops.md): Guía completa sobre el uso de SOPS en MRDevs Tools.
- [Configuración de GPG](https://www.gnupg.org/documentation/): Documentación oficial de GPG.
- [Guía de Seguridad](https://cloud.google.com/security/encryption-at-rest/default-encryption): Mejores prácticas para la encriptación de datos en reposo.
---
Si necesitas ayuda adicional con la configuración de SOPS Rules, contacta con el equipo de desarrollo mediante `mauro@rosero.one`.