📦 Propuesta técnica del módulo vault-collab
Resumen de todo lo necesario para implementar el módulo comunitario vault-collab, incluyendo estructura de directorios, funciones clave, flujo defensivo, dependencias, y sugerencias de documentación.
Guía técnica para revisión, iteración y futura colaboración.
🔐 Módulo comunitario: vault-collab
🧩 Propósito
Permitir colaboración segura entre grupos o departamentos mediante cifrado asimétrico con claves públicas, sin compartir secretos ni claves privadas. Cada grupo puede cifrar secretos destinados a otro sin tener acceso a su contenido.
📁 Estructura de directorios
core/vault/
├── keys/ # Claves públicas importadas por grupo
│ ├── deploy-team.pub
│ ├── dev-team.pub
│ └── qa-team.pub
├── shared/ # Secretos cifrados para otros grupos
│ ├── deploy-team/
│ │ └── DB_TOKEN.gpg
│ ├── dev-team/
│ │ └── API_KEY.gpg
│ └── qa-team/
│ └── SMTP_PASS.gpg🔧 Variables de entorno sugeridas
VAULT_GROUP_ID: identificador del grupo local (ej.dev-team)VAULT_TRUSTED_GROUPS: lista de grupos autorizados para compartir (opcional)
🧪 Funciones clave
import_key(group, pubfile)
Importa una clave pública externa al vault local.
mkdir -p "$COLLAB_KEYS"
cp "$pubfile" "$COLLAB_KEYS/$group.pub"share_secret(key, value, recipient)
Cifra un secreto usando la clave pública del grupo destino.
mkdir -p "$COLLAB_SHARED/$recipient"
echo "$value" | gpg --encrypt --armor --batch --yes --recipient-file "$COLLAB_KEYS/$recipient.pub" \
-o "$COLLAB_SHARED/$recipient/$key.gpg"receive_secret(key)
Descifra un secreto recibido si se tiene la clave privada correspondiente.
group="${VAULT_GROUP_ID:-$(whoami)}"
gpg --quiet --batch --yes -d "$COLLAB_SHARED/$group/$key.gpg"🧩 Acciones soportadas en vault_collab_task
| Acción | Descripción |
|---|---|
import-key |
Importa una clave pública (pubfile, recipient) |
share |
Cifra un secreto para otro grupo (key, value, recipient) |
receive |
Descifra un secreto compartido (key) |
list-keys |
Lista claves públicas disponibles |
remove-key |
Elimina una clave pública del vault local |
📜 Esqueleto de vault_collab_task
vault_collab_task() {
local host="$1"; shift
declare -A args; for arg in "$@"; do key="${arg%%=*}"; value="${arg#*=}"; args["$key"]="$value"; done
local action="${args[action]}"
local key="${args[key]}"
local value="${args[value]}"
local recipient="${args[recipient]}"
local pubfile="${args[pubfile]}"
case "$action" in
import-key) import_key "$recipient" "$pubfile" ;;
share) share_secret "$key" "$value" "$recipient" ;;
receive) receive_secret "$key" ;;
list-keys) ls "$COLLAB_KEYS"/*.pub 2>/dev/null | sed 's|.*/||' ;;
remove-key) rm -f "$COLLAB_KEYS/$recipient.pub" ;;
*) echo "❌ Acción '$action' no soportada." ;;
esac
}📋 Dependencias
gpgssh(opcional para sincronización futura)scp(opcional para vault distribuido)
📚 Documentación sugerida
docs/community/vault-collab.md→ esta guía técnicadocs/changelog/vault-collab.md→ historial por versióndocs/security.md→ sección “Colaboración federada entre grupos”README→ invitación a colaborar, ejemplos, advertencias de seguridad
🧠 Ideas futuras
- Validación de fingerprint y confianza (
trust-group) - Sincronización remota (
vault-collab-remote) - CLI directa (
shflow-collab) - Exportación temporal como entorno (
collab-export)
🛠️ Estado actual
✅ Esqueleto técnico listo
✅ Funciones base definidas
🟡 Falta validación de claves y control de confianza
🟡 Falta documentación extendida y ejemplos YAML
🟡 Falta integración con .shflowrc para VAULT_GROUP_ID
🧑🤝🧑 Invitación a colaborar
Este módulo está en fase de diseño comunitario. Si deseas contribuir, revisa esta guía, propone mejoras o abre una discusión en el repositorio. La colaboración segura entre equipos es clave para escalar ShFlow en entornos reales.