Compartir vía


Protección contra paquetes públicos malintencionados

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Con los orígenes ascendentes de Azure Artifacts, los desarrolladores obtienen la comodidad de usar una fuente unificada para publicar y consumir paquetes de fuentes de artefactos y registros públicos populares, como NuGet.org o npmjs.com. Anteriormente, las fuentes artifact combinaban una lista de versiones de paquete disponibles de la propia fuente y todos los orígenes ascendentes configurados.

Ilustración que muestra el contenido de una fuente.

Permitir versiones de origen externo es una característica que permite a los desarrolladores elegir si quieren consumir versiones de paquetes de origen externo. Controla qué paquetes son accesibles desde los registros públicos para paquetes específicos.

Al deshabilitar el botón de alternancia Permitir versiones externas, las versiones del registro público se bloquean y dejan de estar disponibles para su descarga. Esto agrega una capa adicional de seguridad evitando la exposición a paquetes potencialmente malintencionados de registros públicos.

Sin embargo, si lo prefieren los usuarios, pueden habilitar el botón de alternancia Permitir versiones externas para permitir el acceso y consumir paquetes de registros públicos.

Nota:

Esta configuración no realizará cambios en ninguna versión de paquete que ya esté guardada en la fuente. El acceso a estas versiones del paquete no cambiará como resultado de cambiar esta configuración.

Situaciones aplicables

En la siguiente sección se muestran varios escenarios comunes en los que la configuración de la versión externa bloquea las versiones del paquete de origen externo y otros escenarios en los que no es necesario bloquear el acceso a los paquetes públicos.

Las versiones públicas están bloqueadas

Versión del paquete privado pública

En este escenario, un equipo tiene un paquete privado que se hizo público. La configuración de versiones externas en este caso hará que la fuente bloquee el consumo de las nuevas versiones con ese nombre de paquete desde un origen público.

Ilustración en la que se muestra una versión interna del paquete pública.

Tener paquetes privados y públicos

En este escenario, si un equipo usa una combinación de paquetes privados y públicos, al permitir paquetes de origen externo se bloquean las nuevas versiones de paquetes del registro público.

Ilustración en la que se muestran los paquetes privados y públicos disponibles.

No se bloquearán las versiones públicas

Todos los paquetes son privados*

Si todos los paquetes existentes son privados y el equipo no tiene planes de usar ningún paquete público, la configuración de versiones externas no tiene ningún efecto en el flujo de trabajo del equipo en este escenario.

Ilustración que muestra la fuente solo con paquetes privados.

Todos los paquetes son públicos

En este escenario, si el equipo consume exclusivamente paquetes públicos, ya sea del registro público u otros repositorios de código abierto, la configuración no afecta a su flujo de trabajo de ninguna manera.

Ilustración en la que se muestra la fuente solo con paquetes públicos.

Paquete público hecho privado

En esta situación, cuando se convierte un paquete público en un paquete privado, la configuración de versiones externas no afecta al flujo de trabajo del equipo de ninguna manera.

Ilustración que muestra un paquete convertido de público a privado.

Permitir versiones externas

Nota:

Debe ser propietario de fuente para permitir versiones de origen externo. Para obtener más información, consulte Permisos de fuente.

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Artefactos y, a continuación, seleccione la fuente en el menú desplegable.

  3. Seleccione el paquete y, a continuación, seleccione el botón de puntos suspensivos para obtener más opciones. Seleccione Permitir versiones de origen externo.

    Captura de pantalla que muestra cómo permitir versiones de origen externo.

  4. Seleccione el botón de alternancia para permitir versiones externas. Seleccione Cerrar cuando haya terminado.

    Captura de pantalla que muestra cómo habilitar versiones externas.

Permitir versiones externas mediante la API REST

Permitir versiones externas mediante PowerShell

  1. Cree un token de acceso personal con Empaquetado>de permisos de lectura, escritura y administración.

    Captura de pantalla que muestra cómo seleccionar permisos de empaquetado.

  2. Cree una variable de entorno para el token de acceso personal.

    $env:PATVAR = "YOUR_PERSONAL_ACCESS_TOKEN"
    
  3. Convierta el token de acceso personal en cadena codificada en baser64 y construya el encabezado de solicitud HTTP.

    $token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar")))
    $headers = @{
        Authorization = "Basic $token"
    }
    
  4. Construya la dirección URL del punto de conexión. Ejemplo: //pkgs.dev.azure.com/MyOrg/MyProject/_apis/packaging/feeds/MyFeed/nuget/packages/pkg1.0.0.nupkg/upstreaming?api-version=6.1-preview.1

    • Fuente con ámbito de proyecto:

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=6.1-preview.1"
      
    • Fuente con ámbito de la organización:

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=6.1-preview.1"
      

Ejecute el siguiente comando para recuperar el estado de comportamiento ascendente del paquete. $url y $headers son las mismas variables que hemos usado en la sección anterior.

Invoke-RestMethod -Uri $url -Headers $headers