Partager via


Protection contre les packages publics malveillants

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

Les sources en amont d’Azure Artifacts permettent aux développeurs de centraliser la gestion des packages à l’aide d’un seul flux pour stocker les packages publiés et ceux consommés à partir de registres publics tels que NuGet.org.

Les sources en amont offrent plusieurs avantages pour la gestion des dépendances, notamment la simplicité, la fiabilité et l’intégrité des packages. Pour plus d’informations, consultez Quelles sont les sources en amont ?.

Autoriser les versions sources externes

Cette fonctionnalité permet aux développeurs de contrôler s’ils souhaitent consommer des versions de package à partir de registres publics tels que NuGet.org ou npmjs.com.

Une fois que le bouton bascule Autoriser les versions externes est activé pour un package spécifique, les versions du registre public deviennent disponibles pour être enregistrées dans le flux. Par défaut, cette option est désactivée, en ajoutant une couche supplémentaire de sécurité en réduisant l’exposition aux packages potentiellement malveillants à partir de registres publics. La modification de ce paramètre n’affecte pas les versions de package déjà enregistrées dans le flux. Ces versions restent accessibles indépendamment de ce paramètre. Vous devez être propriétaire du flux pour activer la fonctionnalité autoriser les versions sources externes .

Autoriser les versions externes d’un package

Pour activer l’utilisation de versions externes pour un package spécifique, procédez comme suit :

Remarque

Vous devez être propriétaire du flux pour autoriser les versions sources externes.

  1. Connectez-vous à Azure DevOps, puis accédez à votre projet.

  2. Sélectionnez Artefacts, puis sélectionnez votre flux dans le menu déroulant.

  3. Sélectionnez votre package, sélectionnez le bouton de sélection pour plus d’options, puis sélectionnez Autoriser les versions sources externes.

  4. Activez l'option 'Autoriser les versions externes' pour activer cette fonctionnalité, puis sélectionnez Fermer lorsque vous avez terminé.

    Capture d’écran montrant comment activer des versions externes pour un package spécifique dans Azure Artifacts.

Autoriser les versions externes à l’aide de l’API REST

Pour activer des versions externes pour un package spécifique à l’aide de l’API REST, utilisez les points de terminaison suivants :

Type de paquet Points de terminaison d’API
NuGet - Définir le comportement en amont
- Obtenir le comportement en amont
npm - Définir le comportement en amont
- Définir les paramètres d'amont dans un contexte spécifique
- Obtenir le comportement d’amont du package
- Obtenir le comportement d’amont du package délimité
Python - Obtenir le comportement en amont
- Définir le comportement en amont
Maven - Obtenir le comportement en amont
- Définir le comportement en amont
Cargaison - Obtenir le comportement en amont
- Définir le comportement en amont

Autoriser les versions externes à l’aide de PowerShell

Pour activer des versions externes pour un package spécifique à l’aide de PowerShell, procédez comme suit :

  1. Créez un jeton d’accès personnel avec l’empaquetage>en lecture, écriture et gestion des autorisations.

  2. Créez une variable d’environnement pour votre jeton d’accès personnel.

    $env:PATVAR = "YOUR_PERSONAL_ACCESS_TOKEN"
    
  3. Convertissez votre jeton d’accès personnel en chaîne codée en base64 et construisez l’en-tête de requête HTTP.

    $token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar")))
    $headers = @{
        Authorization = "Basic $token"
    }
    
  4. Construisez l’URL du point de terminaison en fonction de votre type de flux :

    • Flux dans l’étendue du projet :

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=7.2-preview.1"
      
    • Flux d’étendue de l’organisation :

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=7.2-preview.1"
      
  5. Exécutez la commande à partir de la table en fonction de votre scénario :

    Action Descriptif Command
    Obtenir le comportement du flux en amont Récupérez l’état de comportement en amont de votre package. Utilise $url et $headers à partir des étapes précédentes. Invoke-RestMethod -Uri $url -Headers $headers
    Définir le comportement de remontée Autorisez les versions sources externes pour votre package en définissant versionsFromExternalUpstreams sur AllowExternalVersions. $body = '{"versionsFromExternalUpstreams": "AllowExternalVersions"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"
    Effacer le comportement de remontée Réinitialisez le comportement en amont en définissant versionsFromExternalUpstreams sur Auto. $body = '{"versionsFromExternalUpstreams": "Auto"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"

Remarque

Les modifications apportées au comportement en amont peuvent prendre du temps pour se propager sur le service. Si votre package n’est pas disponible après la mise à jour des paramètres, autorisez jusqu’à 3 heures pour que les modifications prennent effet.

Scénarios applicables

Cette section décrit les scénarios courants dans lesquels les versions externes (packages provenant de registres publics) sont bloquées ou autorisées à être enregistrées dans le flux. Pour le reste de cet article, nous faisons référence aux packages des registres publics en tant que packages publics et packages stockés dans un flux Azure Artifacts en tant que packages privés.

Scénario 1 : Les versions publiques sont bloquées

Les versions publiques ne sont pas enregistrées dans le flux lorsque la fonctionnalité Autoriser les versions externes est activée dans les deux cas suivants :

Version du package privé rendue publique

Si un package privé est rendu public ultérieurement, le flux bloque toutes les nouvelles versions portant le même nom de package à partir de sources publiques.

Illustration montrant une version interne du package rendue publique.

Avoir des packages privés et publics

Lorsqu’une équipe utilise à la fois des packages privés et publics, le flux bloque toutes les nouvelles versions de package à partir du Registre public lorsque la version externe autorisée est activée.

Illustration montrant les packages privés et publics disponibles.

Scénario 2 : Les versions publiques sont autorisées

Les versions publiques sont autorisées à être enregistrées dans le flux lorsque la fonctionnalité Autoriser les versions externes est activée dans les trois cas suivants :

Tous les packages sont privés

Si tous les packages sont privés et que l’équipe ne prévoit pas d’utiliser des packages publics, l’activation de ce paramètre n’a aucun impact sur le flux de travail de l’équipe.

Illustration montrant le flux avec uniquement des packages privés.

Tous les packages sont publics

Si l’équipe consomme exclusivement des packages publics à partir de registres ou de référentiels open source, l’activation du paramètre n’affecte pas leur flux de travail.

Illustration montrant le flux avec uniquement des packages publics.

Package public rendu privé

Lorsqu’un package public est converti ultérieurement en fichier privé, l’activation du paramètre autoriser les versions externes n’affecte pas le flux de travail de l’équipe.

Illustration montrant un package converti d’un package public en privé.