Saltar al contenido principal
Jordi Izquierdo Montalbán
Proyectos

kit-iso

Convertí el cumplimiento normativo en código: una librería y CLI que decide qué normas aplican a un proyecto y las audita. Cubre unas 15 (ISO 27001, 27701, 25010, 42001, RGPD, AI Act, CRA, WCAG…), se publica como GitHub Action y deja instrucciones para 5 agentes de IA. Versión 1.1 con 249 tests.

Código privado: te lo enseño en una entrevista

Python, CLI, GitHub Actions, Bandit, Radon, pip-audit, cryptography (Fernet), Argon2, bcrypt, Beautiful Soup, SBOM CycloneDX, PostgreSQL y MySQL (extras), pytest, coverage, mypy, Ruff

El problema

Cada vez que un proyecto necesitaba demostrar seguridad (ISO 27001), privacidad (RGPD), calidad (ISO 25010) o accesibilidad (WCAG), yo reescribía lo mismo desde cero: detectores de secretos, validadores de HTML, cifrado de campos sensibles… Y cuando empecé a programar con agentes de IA apareció un segundo problema: cada agente aplicaba «buenas prácticas» a su manera, sin criterio común y sin forma de comprobarlo.

Además, no todos los proyectos necesitan todas las normas. Auditar accesibilidad en una CLI sin HTML, o la ley europea de ciberresiliencia en un script interno, produce fallos que no significan nada y que acaban ignorándose.

La solución

kit-iso convierte el cumplimiento normativo en código: una librería Python con CLI que se instala en cualquier proyecto con una línea, decide qué normas le aplican y audita controles técnicos verificables. Empezó como un toolkit de 5 módulos (v0.1) y hoy es una herramienta que uso en mis propios proyectos, con GitHub Action y 249 tests.

1. Triaje con evidencia

kit-iso init --detectar hace siete preguntas de sí o no y las rellena por adelantado mirando el propio repositorio: ¿tiene HTML?, ¿base de datos?, ¿campos como email, dni o iban?, ¿librerías de IA?, ¿se distribuye como producto? Enseña la evidencia, yo (o el agente, pidiendo confirmación) decido, y la decisión queda escrita en kit-iso.toml con su porqué. Los controles que no aplican salen en el informe como omitidos, no como fallos.

2. Instrucciones para cualquier agente de IA

init instala además una skill en formato Agent Skills y un bloque en AGENTS.md, de forma que el kit queda preparado para Claude Code, Cursor, Antigravity, Codex y OpenCode. Basta con decirle al agente «aplica el kit-iso según kit-iso.toml»: lee el triaje, aplica solo los módulos activos, corrige con el formato veredicto / hallazgo / remediación y verifica con kit-iso auditar.

3. Auditoría en cada push

kit-iso init --ci genera un workflow que usa la GitHub Action del propio repositorio: instala el kit, audita, vuelca el informe en el resumen del job y lo falla si algún control no pasa.

Primero se decide qué normas aplican y por qué; después se auditan solo esas, en local o en cada push.

Módulos y normas

MóduloNormaQué aporta
seguridadISO 27001Cifrado Fernet, detector de secretos (8 patrones + entropía de Shannon), contraseñas con argon2/bcrypt, cabeceras de seguridad y TLS
base_datosISO 27001SQL parametrizado con lista blanca de tablas y columnas
privacidadISO 27701 + RGPDDetector de datos personales (DNI/NIE, IBAN, teléfonos…) y enmascarado de logs
calidadISO 25010Complejidad ciclomática, cobertura y rendimiento
iso_5055ISO/IEC 5055Hallazgos de bandit traducidos a debilidades CWE
iso_25012ISO/IEC 25012Calidad de datos: completitud, exactitud y consistencia
usabilidadISO 9241Validaciones de interfaz eficaz y eficiente
accesibilidadWCAG 2.1 / ISO 40500Seis criterios verificados sobre el HTML real
ai_actAI Act + ISO 42001Clasificación de riesgo, aviso de transparencia (art. 50), registro de decisiones y documentación técnica
craCyber Resilience ActSBOM CycloneDX, política de divulgación de vulnerabilidades y checklist de seguridad por diseño

Decisiones técnicas

  • Una norma, un módulo. Importas solo lo que necesitas y añadir una norma no toca las demás.
  • Dependencias opcionales. Los drivers de base de datos y las herramientas de auditoría van en extras ([bd], [auditoria]). Instalar el kit en un proyecto no arrastra psycopg2 ni mysql-connector si no los usa.
  • La heurística propone y la persona decide. El triaje nunca activa módulos por su cuenta: enseña la evidencia y deja escrita la decisión.
  • Honestidad sobre lo que es. El kit ayuda a implementar y demostrar controles técnicos, pero no certifica nada: ISO 27001 o 42001 certifican sistemas de gestión, no código. Lo dejo escrito en el README para que nadie lo venda como un sello.
  • Versionado semántico y tags. Cada proyecto fija una versión (@v1.1.0) y actualiza cuando decide. El changelog sigue Keep a Changelog.

Stack desglosado

  • Lenguaje: Python 3.10+, CLI propia y API pública tipada (py.typed).
  • Auditoría: bandit (CWE), radon (complejidad), parser HTML para WCAG.
  • Seguridad: cryptography (Fernet), argon2 y bcrypt.
  • CI: GitHub Actions con matriz Python 3.10 y 3.12, pip-audit, autoauditoría y prueba de la Action contra el propio repositorio.
  • Distribución: GitHub Action composite + skill en formato Agent Skills para cinco agentes.

Resultados y aprendizajes

Lo que funcionó: usarlo en mis propios proyectos. Mi asistente de Telegram pasa los controles de ISO 27001, 5055, 25010, 27701 y CRA con este kit, y cada hallazgo aceptado tiene su porqué documentado. Probarlo con un proyecto real me enseñó más que cualquier test.

Lo que aprendí: las normas suenan abstractas hasta que las conviertes en comprobaciones concretas. Cuando tienes «ningún secreto en el código», «alt en cada imagen», «SBOM generado» y «aviso de que hablas con una IA», el cumplimiento deja de ser papeleo y se convierte en ingeniería.

Trabajo futuro: el módulo del Esquema Nacional de Seguridad (ENS), obligatorio para el sector público español y sus proveedores, y más criterios de WCAG.