En pocas palabras

Un control que se comprueba a mano se comprueba tarde, mal, o directamente no se comprueba, porque la gente tiene trabajo. Python es mi navaja para automatizar esas verificaciones de gobierno de IA: pequeños scripts que revisan, cruzan datos y avisan, de forma constante y sin depender de que alguien se acuerde. Un control manual es una buena intención; uno automatizado es un control de verdad.

Qué automatizo

Las comprobaciones repetitivas del gobierno: que cada sistema de IA tenga propietario, que los inventarios estén al día, que las configuraciones cumplan la política, extraer métricas, cruzar datos de varias fuentes. Todo lo que, hecho a mano, se hace una vez para una auditoría y luego se abandona.

Automatizado, se hace solo y de forma constante, que es la única manera de que un control siga vivo pasada la novedad. La constancia es justo lo que las personas no podemos garantizar y las máquinas sí.

Cómo lo enfoco

Scripts pequeños que verifican y avisan, integrados en el día a día, no un macroproyecto de automatización. No busco automatizarlo todo —eso es otra forma de fracasar—, sino quitar de en medio la comprobación manual que nadie sostiene. Alimenta la orquestación y las métricas.

Empiezo por la comprobación que más duele hacer a mano y más se olvida, y voy sumando. Cada script que escribo es un control que deja de depender de la memoria de alguien.

Mapa de control aplicado a Python.
Mapa de control aplicado a Python.

El aviso es la mitad del valor

Un detalle que marca la diferencia: la comprobación automática solo sirve si, cuando algo falla, avisa a alguien que puede actuar. Un script que detecta un problema y lo escribe en un log que nadie lee es casi tan inútil como no tenerlo. Por eso cada verificación que automatizo termina en una alerta con destinatario, no en un fichero silencioso.

Automatizar la comprobación sin automatizar el aviso es hacer la mitad del trabajo y quedarse con la sensación falsa de estar cubierto.

Qué NO automatizo

Tan importante como saber qué automatizar es saber qué no. No automatizo decisiones que requieren juicio —si un caso de uso de alto riesgo se aprueba o no, eso es de personas—, ni acciones irreversibles sin una persona en medio. Python me sirve para comprobar y avisar, no para sustituir el criterio donde el criterio hace falta.

Querer automatizarlo todo es otra forma de fracasar: acabas con scripts frágiles tomando decisiones que no deberían, y con un sistema que nadie entiende del todo. La automatización buena quita trabajo repetitivo y deja el juicio para quien debe ejercerlo. Esa línea, bien trazada, es lo que la hace fiable.

M
Mi postura

El gobierno que depende de que alguien se acuerde de comprobar algo cada mes está muerto antes de empezar; la gente tiene trabajo. Automatizar la comprobación con un poco de Python es lo que hace que un control se cumpla de verdad y de forma constante. Un control manual es una buena intención; uno automatizado es un control.

Los errores que veo una y otra vez

  • Comprobar controles a mano y de tarde en tarde.
  • Verificaciones que se hacen una vez y se abandonan.
  • No integrar las comprobaciones en el día a día.
  • Querer automatizar todo en vez de lo repetitivo.
  • No avisar cuando una comprobación falla.

Cómo lo llevaría a un entorno real

Cuando aterrizo python en una organización, no empiezo por comprar una herramienta ni por redactar veinte páginas. Empiezo por dibujar qué ocurre hoy: quién solicita el cambio, quién lo aprueba, qué sistemas intervienen, qué datos cruzan el proceso y quién se entera cuando algo falla. Ese dibujo suele descubrir más problemas que cualquier checklist. En automatización, lo peligroso no es solo carecer de controles; también lo es creer que existen porque alguien los escribió una vez.

Después separo lo imprescindible de lo deseable. Lo imprescindible debe poder comprobarse: un responsable identificado, una regla clara, una evidencia fechada y un mecanismo para reaccionar. En este caso revisaría especialmente script, dependencias y logs. No me vale una respuesta del tipo «lo gestiona el proveedor» o «eso lo mira seguridad». Necesito saber qué persona toma la decisión, con qué información y dentro de qué plazo.

La implantación debe crecer con el riesgo. Un piloto interno puede funcionar con una ficha breve y una revisión manual. Un sistema que afecta a clientes, empleados, dinero o información sensible necesita segregación de funciones, pruebas independientes, monitorización y un expediente mantenido. Mi criterio es sencillo: cuanto más difícil sea deshacer el daño, más fuerte debe ser la barrera antes de producción.

Decisiones que deben quedar por escrito

Hay decisiones que no deberían vivir en una reunión ni en un mensaje de chat. Para python dejaría documentados el alcance, los supuestos, los límites de uso, las excepciones aceptadas y las condiciones que obligan a detener o reevaluar. El documento no tiene que ser enorme, pero sí debe permitir que otra persona entienda por qué se hizo lo que se hizo.

También registraría quién puede cambiar secretos, quién valida pruebas y quién recibe las alertas relacionadas con ejecución. Cuando esas tres responsabilidades se mezclan, aparece el clásico problema: el mismo equipo construye, aprueba y declara que todo funciona. No siempre se puede separar por completo, sobre todo en organizaciones pequeñas, pero al menos debe existir una revisión por alguien que no dependa del éxito inmediato del despliegue.

Las excepciones merecen un tratamiento propio. Una excepción sin fecha de caducidad acaba convirtiéndose en la arquitectura real. Por eso exigiría motivo, riesgo aceptado, responsable, compensaciones, fecha de revisión y criterio de cierre. Si falta uno de esos elementos, no es una excepción gestionada; es una deuda invisible.

Capas de evidencia y operación para Python.
Capas de evidencia y operación para Python.

Un ejemplo práctico

Imaginemos que un equipo quiere incorporar python a un servicio que ya está en producción. La propuesta promete reducir tiempos y automatizar tareas, pero utiliza componentes que cambian con frecuencia. Antes de aprobarlo, pediría una prueba limitada, un inventario de dependencias, un flujo de datos y una definición clara de qué acciones quedan fuera del alcance.

Durante la prueba recogería resultados normales y casos límite. No solo miraría si funciona; comprobaría qué ocurre cuando faltan datos, cambia una versión, se pierde conectividad, llega una entrada manipulada o un usuario intenta superar sus permisos. Ahí es donde se ve si el diseño aguanta. En muchas pruebas felices todo parece seguro porque nadie ha intentado romper la hipótesis de partida.

Si los resultados son aceptables, la salida a producción tendría condiciones: versión fijada, configuración aprobada, logs disponibles, responsables de guardia, procedimiento de rollback y revisión tras las primeras semanas. Si alguno de esos elementos no existe, prefiero retrasar el despliegue. Un día de demora suele ser más barato que investigar después un comportamiento que nadie puede reconstruir.

Qué evidencias guardaría

Para demostrar que el control funciona conservaría evidencias que cuenten una historia completa, no capturas sueltas. La historia debe enlazar necesidad, decisión, implementación, prueba y operación. En python eso incluye como mínimo la ficha del activo, el diagrama vigente, la configuración aprobada, el resultado de las pruebas y el registro de cambios.

No guardaría información por acumular. Si los logs contienen prompts, documentos, datos personales o secretos, aplicaría minimización, control de acceso y retención. La evidencia debe ayudar a investigar y auditar sin crear una segunda fuga de información. Es frecuente endurecer el sistema principal y dejar un repositorio de evidencias abierto a demasiadas personas.

  • Propietario y finalidad de python, con fecha de revisión.
  • Inventario de script, dependencias y dependencias asociadas.
  • Criterios de aceptación y resultados sobre logs y secretos.
  • Configuración efectiva, versión y aprobación del cambio.
  • Alertas, incidentes, excepciones y acciones correctivas cerradas.

Señales de que el control no está funcionando

El primer síntoma es que nadie sabe responder con rapidez quién es el responsable. El segundo es que la documentación describe una versión distinta de la que está operando. El tercero es que las alertas existen, pero llegan a un buzón que nadie revisa. Cuando aparecen esos tres síntomas, el problema no es tecnológico: el control se ha desconectado de la operación.

También desconfío de las métricas demasiado perfectas. Cero incidentes, cero excepciones y cien por cien de cumplimiento pueden significar excelencia, pero con frecuencia significan que no estamos mirando. Prefiero indicadores que enseñen tendencia: tiempo de corrección, antigüedad de excepciones, cobertura de pruebas, cambios sin revisión y reincidencias.

Por último, revisaría el comportamiento después de cada cambio significativo. En IA, una actualización de modelo, dataset, prompt, herramienta, permiso o proveedor puede alterar el riesgo sin cambiar el nombre del servicio. Si el proceso solo reevalúa cuando se crea un proyecto nuevo, se quedará ciego durante la mayor parte de la vida útil.

Mi criterio de cierre

Considero que python está razonablemente controlado cuando el equipo puede explicar el proceso sin depender de una sola persona, reconstruir una decisión con evidencias y detener el servicio sin improvisar. No busco perfección documental; busco que la organización pueda tomar decisiones repetibles bajo presión.

El cierre no consiste en marcar todas las casillas. Consiste en demostrar que los riesgos relevantes tienen propietario, que los controles se prueban y que las desviaciones producen una acción. Si la evidencia no cambia ninguna decisión, probablemente estamos generando burocracia. Si una decisión importante no deja evidencia, estamos creando fragilidad.

Este enfoque es el que intento mantener en toda CyberLibrary AI: explicar el control de forma que lo entienda negocio, pero con suficiente profundidad para que arquitectura, seguridad, auditoría y operaciones puedan aplicarlo de verdad.

Referencias y marcos relacionados

Contenido educativo y técnico. No sustituye asesoramiento jurídico ni una auditoría formal.

Firma visual del autor
Autor

Miguel Ángel Carriazo

vCISO & Arquitecto de Infraestructura con más de 25 años diseñando, asegurando y operando sistemas críticos. ISO 27001 & 42001 Lead Auditor.