Resumen

  • PyPI indica que retirar a un usuario de un proyecto no elimina los Trusted Publishers que ese usuario haya registrado.
  • Un rol de colaborador, una configuración CI, un token temporal y la procedencia de un archivo pertenecen a registros distintos.
  • La baja responsable une esos registros sin hacer que uno suplante la evidencia de los demás.

Una baja puede parecer terminada cuando un nombre deja de figurar en un proyecto. Esa apariencia es útil, pero PyPI fija una frontera importante: eliminar a un usuario de un proyecto no elimina los Trusted Publishers que pudiera haber registrado. Por ello, su guía de seguridad exige revisar todos los Trusted Publishers al desvincular a un mantenedor.

No es una acusación contra quien sale ni una afirmación de que exista una ruta de publicación activa. Es una regla de alcance. El cambio de una cuenta humana y el estado de una identidad CI autorizada viven en superficies de control diferentes. La primera evidencia prueba que cambió un rol. No prueba todavía qué configuraciones de publicación permanecen, cambian o se retiran.

La documentación de roles aclara por qué. En una organización de PyPI, un Maintainer puede subir versiones y un Owner administra el proyecto y sus colaboradores. Trusted Publishing, en cambio, decide si una configuración concreta de un servicio CI puede intercambiar un token de OpenID Connect por un token de subida, limitado al proyecto y de duración breve. Que el token expire pronto disminuye el riesgo de un secreto persistente; no convierte la configuración del editor en una consecuencia automática de la retirada del colaborador.

Conviene separar cuatro afirmaciones. «Se retiró al colaborador» es un hecho de cuenta. «Se revocó el canal de publicación» exige revisar cada Trusted Publisher. «Ese canal no publicó una versión» requiere evidencia de eventos. «Este archivo fue publicado por tal identidad» puede apoyarse en una atestación de publicación y su procedencia. Una misma situación puede satisfacer las cuatro, pero ninguna de ellas autoriza a inferir las otras tres.

La atestación conserva valor precisamente por su límite. PyPI Publish Attestation permite asociar una distribución concreta con un Trusted Publisher y con la identidad usada al subirla. La Integrity API entrega procedencia para un proyecto, versión y archivo determinados. Eso registra un artefacto; no reconstruye quién aprobó una configuración anterior, ni demuestra que un usuario ya retirado controle un flujo actual, ni certifica la seguridad del código. PyPI advierte que la atestación muestra de dónde procede un paquete, no si conviene confiar en la identidad ni en el programa.

La falla habitual es usar un expediente como sustituto de otro. El ticket de retirar un usuario suele quedar fechado y visible. La lista de editores puede estar en otra pantalla y los permisos CI en una tercera. Meses después, el ticket parece responder preguntas que no contenía: qué editores había, quién los revisó, cuáles se retiraron y qué identidad aparece en las distribuciones posteriores.

El registro de unión recomendado por Daniel Kade no necesita exponer claves ni detalles sensibles. Debe conservar el proyecto, el cambio de rol, el inventario de Trusted Publishers en un momento dado, las restricciones de identidad descritas de forma segura, el revisor competente y la disposición de cada editor: conservar, modificar o retirar. Las procedencias de archivos posteriores deben añadirse como observaciones separadas. Así se puede demostrar una revisión sin convertir una lista pública de colaboradores en una declaración sobre toda la cadena de publicación.

También evita dramatizar casos normales. Puede no haber ningún editor relacionado. Puede conservarse una automatización bajo otra responsabilidad. Puede sustituirse una identidad y observarse esa sustitución en la procedencia de una versión nueva. Lo que no debe hacerse es deducir cualquiera de esos desenlaces de un único nombre eliminado.

Fuentes

  1. PyPI — Modelo de seguridad de Trusted Publishers
  2. PyPI — Publicar con un Trusted Publisher
  3. PyPI — Roles y entidades
  4. PyPI Publish Attestation v1
  5. PyPI — Modelo de seguridad de atestaciones
  6. PyPI Integrity API