Freigeben über


Schutz vor böswilligen öffentlichen Paketen

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

Azure Artifacts-Upstreamquellen ermöglichen es Entwicklern, die Paketverwaltung mithilfe eines einzelnen Feeds zu zentralisieren, um sowohl veröffentlichte Pakete als auch solche zu speichern, die aus öffentlichen Registries wie NuGet.org bezogen werden.

Upstreamquellen bieten mehrere Vorteile für die Verwaltung von Abhängigkeiten, einschließlich Einfachheit, Zuverlässigkeit und Paketintegrität. Siehe Was sind upstream-Quellen? für weitere Details.

Externe Quellversionen zulassen

Mit diesem Feature können Entwickler steuern, ob sie Paketversionen aus öffentlichen Registrierungen wie NuGet.org oder npmjs.com nutzen möchten.

Sobald der Umschalter " Externe Versionen zulassen " für ein bestimmtes Paket aktiviert ist, stehen Versionen aus der öffentlichen Registrierung zum Speichern im Feed zur Verfügung. Diese Option ist standardmäßig deaktiviert und fügt eine zusätzliche Sicherheitsebene hinzu, indem die Gefährdung von potenziell schädlichen Paketen aus öffentlichen Registrierungen reduziert wird. Das Ändern dieser Einstellung wirkt sich nicht auf paketversionen aus, die bereits im Feed gespeichert wurden. Diese Versionen bleiben unabhängig von dieser Einstellung zugänglich. Sie müssen Feed-Besitzer sein, um die Funktion Extern bezogene Versionen zulassen zu aktivieren.

Externe Versionen für ein Paket zulassen

Führen Sie die folgenden Schritte aus, um die Nutzung externer Versionen für ein bestimmtes Paket zu aktivieren:

Hinweis

Sie müssen ein Feedbesitzer sein, um extern stammende Versionen zuzulassen.

  1. Melden Sie sich bei Azure DevOps an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Artefakte aus, und wählen Sie dann Ihren Feed aus dem Dropdownmenü aus.

  3. Wählen Sie Ihr Paket aus, wählen Sie die Schaltfläche mit den Auslassungspunkten für weitere Optionen aus, und wählen Sie dann "Externe Versionen zulassen" aus.

  4. Aktivieren Sie die Option "Externe Versionen zulassen ", um das Feature zu aktivieren, und wählen Sie dann "Schließen" aus, wenn Sie fertig sind.

    Screenshot, der zeigt, wie externe Versionen für ein bestimmtes Paket in Azure Artifacts aktiviert werden.

Zulassen externer Versionen mithilfe der REST-API

Verwenden Sie die folgenden Endpunkte, um externe Versionen für ein bestimmtes Paket mithilfe der REST-API zu aktivieren:

Pakettyp API-Endpunkte
NuGet - Festlegen des Vorlaufverhaltens
- Upstream-Verhalten abrufen
npm - Festlegen des Vorlaufverhaltens
- Festlegen des bereichsbezogenen Upstreamverhaltens
- Verhalten des Paket-Upstreamings abrufen
- Abrufen des bereichsbezogenen Paket-Upstreamverhaltens
Python - Upstream-Verhalten abrufen
- Festlegen des Vorlaufverhaltens
Experte - Upstream-Verhalten abrufen
- Festlegen des Vorlaufverhaltens
Cargo - Upstream-Verhalten abrufen
- Festlegen des Vorlaufverhaltens

Zulassen externer Versionen mit PowerShell

Führen Sie die folgenden Schritte aus, um externe Versionen für ein bestimmtes Paket mithilfe von PowerShell zu aktivieren:

  1. Erstellen Sie ein persönliches Zugriffstoken mit Berechtigungen zum Lesen, Schreiben und Verwalten von Packaging.

  2. Erstellen Sie eine Umgebungsvariable für Ihr persönliches Zugriffstoken.

    $env:PATVAR = "YOUR_PERSONAL_ACCESS_TOKEN"
    
  3. Konvertieren Sie Ihr persönliches Zugriffstoken in eine base64-codierte Zeichenfolge, und erstellen Sie den HTTP-Anforderungsheader.

    $token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar")))
    $headers = @{
        Authorization = "Basic $token"
    }
    
  4. Erstellen Sie die Endpunkt-URL basierend auf Ihrem Feedtyp:

    • Projektbezogener Feed:

      $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"
      
    • Organisationsspezifischer Feed:

      $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. Führen Sie den Befehl aus der Tabelle basierend auf Ihrem Szenario aus:

    Maßnahme Description Command
    Vorgelagertes Verhalten abrufen Rufen Sie den Upstreamverhaltensstatus Ihres Pakets ab. Verwendet $url und $headers aus vorherigen Schritten. Invoke-RestMethod -Uri $url -Headers $headers
    Vorgelagertes Verhalten festlegen Externe Quellversionen für Ihr Paket zulassen, indem Sie versionsFromExternalUpstreams auf AllowExternalVersions setzen. $body = '{"versionsFromExternalUpstreams": "AllowExternalVersions"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"
    Vorgelagertes Verhalten löschen Setzen Sie das Upstream-Verhalten zurück, indem Sie versionsFromExternalUpstreams auf Auto setzen. $body = '{"versionsFromExternalUpstreams": "Auto"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"

Hinweis

Änderungen am vorgelagerten Verhalten können zeitaufwendiger sein, um über den Dienst verteilt zu werden. Wenn Ihr Paket nach dem Aktualisieren der Einstellungen nicht verfügbar ist, können sie bis zu 3 Stunden dauern, bis die Änderungen wirksam werden.

Zutreffende Szenarios

In diesem Abschnitt werden allgemeine Szenarien beschrieben, in denen externe Versionen (Pakete aus öffentlichen Registrierungen) entweder blockiert oder daran gehindert werden, im Feed gespeichert zu werden. Für den Rest dieses Artikels beziehen wir uns auf Pakete aus öffentlichen Registrierungen als öffentliche Pakete und Pakete, die in einem Azure Artifacts-Feed gespeichert sind, als private Pakete.

Szenario 1: Öffentliche Versionen werden blockiert

Öffentliche Versionen werden daran gehindert, im Feed zu speichern, wenn das Feature " Externe Versionen zulassen " in den folgenden beiden Fällen aktiviert ist:

Private Paketversion, die öffentlich gemacht wurde

Wenn später ein privates Paket öffentlich gemacht wird, blockiert der Feed alle neuen Versionen mit demselben Paketnamen aus öffentlichen Quellen.

Abbildung einer internen Paketversion, die öffentlich gemacht wurde.

Sowohl private als auch öffentliche Pakete haben

Wenn ein Team private und öffentliche Pakete verwendet, blockiert der Feed alle neuen Paketversionen aus der öffentlichen Registrierung, wenn die externe Version zugelassen ist.

Abbildung der verfügbaren privaten und öffentlichen Pakete.

Szenario 2: Öffentliche Versionen sind zulässig

Öffentliche Versionen dürfen im Feed gespeichert werden, wenn das Feature " Externe Versionen zulassen " in den folgenden drei Fällen aktiviert ist:

Alle Pakete sind privat

Wenn alle Pakete privat sind und das Team keine öffentlichen Pakete verwenden möchte, hat die Aktivierung dieser Einstellung keine Auswirkungen auf den Workflow des Teams.

Abbildung eines Feeds mit nur privaten Paketen.

Alle Pakete sind öffentlich

Wenn das Team ausschließlich öffentliche Pakete aus Registrierungen oder Open-Source-Repositorys nutzt, wirkt sich die Aktivierung der Einstellung nicht auf ihren Workflow aus.

Abbildung eines Feeds mit nur öffentlichen Paketen.

Öffentliches Paket, das privat gemacht wurde

Wenn ein öffentliches Paket später in privat konvertiert wird, wirkt sich die Aktivierung der Einstellung "Externe Versionen zulassen" nicht auf den Workflow des Teams aus.

Abbildung eines Pakets, das von öffentlich in privat konvertiert wurde.