Mejora la Seguridad en NuGet.org con la Nueva Publicación de Confianza

Mejora la Seguridad en NuGet.org con la Nueva Publicación de Confianza

¡Estamos encantados de anunciar el lanzamiento de Publicación de Confianza (Trusted Publishing) en nuget.org! Esta innovación ofrece una manera más sencilla y significativamente más segura de publicar sus paquetes NuGet directamente desde GitHub Actions. A diferencia de los métodos tradicionales que se basan en claves API de larga duración —un punto de vulnerabilidad común—, Trusted Publishing permite que su flujo de trabajo utilice un token GitHub OIDC de corta duración. Con este token, su sistema puede solicitar una clave API de NuGet temporal y de un solo uso, que expira rápidamente, en aproximadamente 1 hora. Esto elimina por completo la necesidad de almacenar, rotar o proteger secretos de larga duración susceptibles a filtraciones, marcando un avance crucial en la seguridad de la cadena de suministro de software.

Este sistema no solo eleva la seguridad de sus procesos de publicación, sino que también reduce la fricción operativa, permitiendo a los desarrolladores concentrarse en el código y la innovación. Para una comprensión detallada, consulte la documentación oficial en aka.ms/nuget/trusted-publishing.

¿Por qué Publicación de Confianza es un pilar de seguridad? 🔒

La importancia de Trusted Publishing radica en su diseño intrínseco para mitigar riesgos clave:

  • Sin secretos de larga duración: El beneficio más directo es la eliminación de credenciales sensibles almacenadas persistentemente en sus repositorios o sistemas de Integración Continua (CI). Al no existir claves permanentes que robar o exponer, el riesgo de compromiso se reduce drásticamente.
  • Credenciales efímeras y de corta duración: Las claves API se emiten justo a tiempo para la operación de publicación y su validez es extremadamente limitada (aproximadamente 1 hora). Esto minimiza drásticamente la ventana de oportunidad para cualquier uso indebido, haciendo que las claves interceptadas sean casi inútiles.
  • Granularidad y trazabilidad: Un token → una clave: Cada token OIDC de GitHub emitido para una tarea específica en su flujo de trabajo se asocia a una única clave API temporal. Esta granularidad asegura que el acceso sea siempre mínimo y para un propósito específico, mejorando el control y facilitando la auditoría de cada publicación.

Guía rápida: Cómo empezar con Publicación de Confianza 🚀

La integración de Trusted Publishing en sus flujos de trabajo de GitHub Actions es un proceso sencillo y bien documentado:

  1. Acceda a la página de Publicación de Confianza: Inicie sesión en nuget.org. Desde el menú de usuario (arriba a la derecha), seleccione la opción Publicación de Confianza, convenientemente ubicada junto a la sección de Claves API.
  2. Cree una política de publicación: Defina las reglas de seguridad para sus paquetes especificando:
    • Propietario del paquete: Su usuario o la organización propietaria del paquete.
    • Propietario del repositorio / repositorio: La organización/usuario y nombre de su repositorio en GitHub (ej. contoso-org/contoso-sdk).
    • Archivo de flujo de trabajo: La ruta del archivo YAML de su flujo de trabajo en .github/workflows/ (ej. release.yml).
    • (Opcional) Entorno: Si su flujo de trabajo utiliza entornos de GitHub Actions, puede especificarlos aquí para añadir una capa extra de restricción.
  3. Configure su flujo de trabajo de GitHub Actions: Adapte su archivo YAML de GitHub Actions para interactuar con el nuevo mecanismo, siguiendo el ejemplo mínimo proporcionado.

Ejemplo Minimalista de GitHub Actions ⚙

Este ejemplo esencial ilustra los pasos clave: habilitar OIDC, intercambiar el token por una clave API temporal y ejecutar la publicación del paquete.

permissions:
  id-token: write   # requerido para GitHub OIDC

jobs:
  build-and-publish:
    permissions:
      id-token: write  # habilita la emisión de tokens GitHub OIDC para esta tarea

    steps:
      # Construya aquí su paquete artifacts/my-sdk.nupkg

      # Obtener una clave API de NuGet de corta duración
      - name: NuGet login (OIDC → clave API temporal)
        uses: NuGet/login@v1
        id: login
        with:
          # Recomendado: use un secreto como ${{ secrets.NUGET_USER }} para su nombre de usuario de nuget.org (nombre de perfil), NO su dirección de correo electrónico
          user: contoso-bot

      # Empujar el paquete
        run: dotnet nuget push artifacts/my-sdk.nupkg --api-key ${{ steps.login.outputs.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json

Las directivas permissions: id-token: write son cruciales para autorizar la generación de tokens OIDC. La acción NuGet/login@v1 gestiona el intercambio seguro del token por la clave API efímera, que luego se usa con dotnet nuget push. La corta vida útil de la clave requiere que los pasos de login y publicación sean consecutivos.


Funcionamiento interno: el ciclo de Publicación de Confianza 🔁

El mecanismo de Trusted Publishing sigue un flujo riguroso para garantizar la máxima seguridad:

  1. GitHub emite un token OIDC criptográficamente firmado y de corta duración al inicio de la tarea.
  2. El paso de login de NuGet envía este token OIDC a nuget.org.
  3. nuget.org valida el token contra su política de Publicación de Confianza (verificando repositorio, flujo de trabajo, etc.) y, si es válido, emite una clave API temporal única.
  4. Su flujo de trabajo utiliza esta clave temporal para ejecutar dotnet nuget push. Es fundamental usarla inmediatamente, ya que expira en aproximadamente 1 hora, minimizando el riesgo de exposición.

Gestión de políticas: Propiedad y ciclo de vida 📜

Las políticas de Publicación de Confianza están diseñadas para ser robustas y adaptarse a los cambios:

  • Activación de repositorio privado (7 días, reactivable): Las políticas para repositorios privados se activan durante 7 días. Tras el primer login exitoso, se activan permanentemente, vinculadas a IDs inmutables de GitHub. Si se pierde la ventana inicial, puede reactivarla manualmente por otros 7 días.
  • La propiedad importa: Una política es propiedad de un usuario u organización y solo aplica a los paquetes de ese propietario, garantizando una granularidad de seguridad.
  • Adaptación a cambios en la organización: Si el creador de la política pierde su membresía o la organización se deshabilita, la política se desactiva con una advertencia. Al restaurarse el acceso, la política se reactiva automáticamente, manteniendo la continuidad del servicio bajo condiciones seguras.

Migración de claves API de larga duración: Un proceso sin fricciones 🔄

Para aquellos que ya publican desde GitHub Actions, la transición es notablemente sencilla:

  1. Cree una política de Publicación de Confianza en nuget.org.
  2. Elimine cualquier clave API de NuGet de larga duración de sus secretos de repositorio o CI.
  3. Añada la acción NuGet/login@v1 a su flujo de trabajo.
  4. Use la clave de salida de esta acción con dotnet nuget push.
  5. ¡Listo! Elimine la gestión manual de claves y disfrute de una publicación más segura.

¡Eleve hoy mismo su seguridad en la publicación de paquetes! 🚀

Le invitamos a integrar Publicación de Confianza en sus proyectos de NuGet:

  • Consulte la documentación completa en aka.ms/nuget/trusted-publishing.
  • Inicie sesión en nuget.org → Publicación de Confianza y configure su primera política hoy.

Nuestro agradecimiento a OpenSSF y al grupo de trabajo Securing Software Repos por su liderazgo en la definición de estas directrices. Publicar de forma más segura y con menos fricción es un gran beneficio para toda la comunidad NuGet. ¡Gracias por contribuir! ✨

Author: Enagora

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *