Compare commits
	
		
			No commits in common. "03848f76fd5b532159b4d93a267f5ffe05034856" and "86a617c101840bc685706596518c5af729af7559" have entirely different histories.
		
	
	
		
			03848f76fd
			...
			86a617c101
		
	
		
					 5 changed files with 5 additions and 704 deletions
				
			
		
							
								
								
									
										19
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								README.md
									
									
									
									
									
								
							|  | @ -37,15 +37,10 @@ git clone https://git.rosero.one/mrosero/devs.git | ||||||
| cd $HOME/devs | cd $HOME/devs | ||||||
| bin/bootstrap.sh | bin/bootstrap.sh | ||||||
| 
 | 
 | ||||||
| # Configurar SOPS para encriptación GPG (obligatorio) |  | ||||||
| bin/sops_rules.sh |  | ||||||
| 
 |  | ||||||
| # Actualizar el entorno (opcional) | # Actualizar el entorno (opcional) | ||||||
| bin/update.sh | 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 | ### Estructura de Directorios | ||||||
| 
 | 
 | ||||||
| MRDevs Tools utiliza una estructura organizada que separa el código (en ~/devs) y la configuración (en directorios ocultos): | MRDevs Tools utiliza una estructura organizada que separa el código (en ~/devs) y la configuración (en directorios ocultos): | ||||||
|  | @ -71,7 +66,6 @@ MRDevs Tools utiliza una estructura organizada que separa el código (en ~/devs) | ||||||
| | Comando | Descripción | | | 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/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/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/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 | | | `bin/project_new.sh` | Crea un nuevo proyecto con estructura estandarizada según el tipo seleccionado | | ||||||
|  | @ -144,8 +138,7 @@ MRDevs Tools integra herramientas modernas de Charm para mejorar la experiencia | ||||||
| 
 | 
 | ||||||
| | Comando | Descripción | | | Comando | Descripción | | ||||||
| |---------|-------------| | |---------|-------------| | ||||||
| | `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 | | ||||||
| | `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` | Instala el cliente Pritunl VPN | | ||||||
| | `bin/vpn_install.sh --update` | Actualiza el cliente VPN a la última versión | | | `bin/vpn_install.sh --update` | Actualiza el cliente VPN a la última versión | | ||||||
| | `bin/vpn_users.sh` | Gestiona usuarios de la VPN | | | `bin/vpn_users.sh` | Gestiona usuarios de la VPN | | ||||||
|  | @ -168,8 +161,6 @@ MRDevs Tools integra herramientas modernas de Charm para mejorar la experiencia | ||||||
| 
 | 
 | ||||||
| ## 📚 Guía de Usuario | ## 📚 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 | ### Herramientas de CLI Modernas | ||||||
| 
 | 
 | ||||||
| MRDevs Tools incluye soporte completo para herramientas modernas de CLI de [Charm](https://charm.sh/): | MRDevs Tools incluye soporte completo para herramientas modernas de CLI de [Charm](https://charm.sh/): | ||||||
|  | @ -607,8 +598,7 @@ 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: | MRDevs Tools está diseñado con la seguridad y privacidad en mente: | ||||||
| 
 | 
 | ||||||
| - **Almacenamiento seguro**: Todos los tokens y credenciales se almacenan encriptados usando [SOPS](docs/sops.md) con PGP | - **Almacenamiento seguro**: Todos los tokens y credenciales se almacenan encriptados usando SOPS | ||||||
| - **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 `.`)  | - **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 | - **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 | - **Podman como predeterminado**: Se usa Podman (sin privilegios) para mayor seguridad en contenedores | ||||||
|  | @ -648,14 +638,13 @@ $HOME/ | ||||||
| └── .developer/                # Tokens y configuraciones de desarrollo | └── .developer/                # Tokens y configuraciones de desarrollo | ||||||
|     ├── github.sops.yaml       # Token de GitHub encriptado |     ├── github.sops.yaml       # Token de GitHub encriptado | ||||||
|     └── forgejo.sops.yaml      # Token de Forgejo encriptado |     └── forgejo.sops.yaml      # Token de Forgejo encriptado | ||||||
| └── .sops.yaml                 # Configuración de SOPS para PGP |  | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ### Componentes Principales | ### Componentes Principales | ||||||
| 
 | 
 | ||||||
| - **Bibliotecas Base**: Conjunto de funciones reutilizables (`base.lib`, `bootstrap.lib`, `developers.lib`, `console.lib`, etc.) | - **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 | - **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, configuración SOPS para cifrado GPG | - **Gestión de Configuración**: Archivos de configuración centralizados, plantillas .gitignore por tipo de proyecto | ||||||
| - **Herramientas de Automatización**: Scripts y playbooks de Ansible | - **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 | - **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 | - **Creación de Proyectos**: Sistema estandarizado de plantillas para diversos tipos de proyectos | ||||||
|  | @ -726,7 +715,7 @@ El texto completo de la licencia está disponible en el archivo [LICENSE.md](LIC | ||||||
| 
 | 
 | ||||||
| Para dudas o problemas, contacte con: | Para dudas o problemas, contacte con: | ||||||
| - Email: mauro@rosero.one | - Email: mauro@rosero.one | ||||||
| - Web: https://mauro.rosero.one | - Web: https://rosero.one | ||||||
| 
 | 
 | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -34,12 +34,7 @@ DEVELOPER_DIR=${HOME}/.developer | ||||||
| DATENOW="$(date +"%Y-%m-%d %H:%M:%S")" | DATENOW="$(date +"%Y-%m-%d %H:%M:%S")" | ||||||
| DATEBAK="$(date +"%Y%m%d%H%M%S")" | DATEBAK="$(date +"%Y%m%d%H%M%S")" | ||||||
| 
 | 
 | ||||||
| # Configuración del servicio de almacenamiento clave-valor | FREEKV_URL=$(cat < "${BIN_PATH:=${BIN_HOME}}/${CONFPATH}/freekeyval.dat") | ||||||
| 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 | FREEKV_SOPS_FILE=freekv-sops.devs.yaml | ||||||
| 
 | 
 | ||||||
| DOCKER_LOCAL=dockerfile.local | DOCKER_LOCAL=dockerfile.local | ||||||
|  |  | ||||||
|  | @ -1,244 +0,0 @@ | ||||||
| #!/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
									
									
									
									
									
								
							
							
						
						
									
										185
									
								
								docs/sops.md
									
									
									
									
									
								
							|  | @ -1,185 +0,0 @@ | ||||||
| # 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. |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
| 
 |  | ||||||
| ## 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`. |  | ||||||
|  | @ -1,254 +0,0 @@ | ||||||
| # 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. |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
| 
 |  | ||||||
| ## 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. |  | ||||||
| 
 |  | ||||||
|     |  | ||||||
| 
 |  | ||||||
| 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`. |  | ||||||
		Loading…
	
		Reference in a new issue