Udostępnij przez


Ochrona przed złośliwymi pakietami publicznymi

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

Źródła nadrzędne usługi Azure Artifacts umożliwiają deweloperom scentralizowanie zarządzania pakietami, korzystając z pojedynczego kanału do przechowywania zarówno opublikowanych pakietów, jak i tych pobieranych z publicznych rejestrów, takich jak NuGet.org.

Źródła nadrzędne oferują kilka zalet zarządzania zależnościami, w tym prostoty, niezawodności i integralności pakietów. Zobacz Co to są źródła nadrzędne?, aby uzyskać więcej informacji.

Zezwalaj na wersje pochodzące z zewnętrznych źródeł

Ta funkcja umożliwia deweloperom kontrolowanie, czy chcą korzystać z wersji pakietów z publicznych rejestrów, takich jak NuGet.org czy npmjs.com.

Po włączeniu przełącznika Zezwalaj na wersje zewnętrzne dla określonego pakietu wersje z rejestru publicznego staną się dostępne do zapisania w kanale informacyjnym. Domyślnie ta opcja jest wyłączona, dodając dodatkową warstwę zabezpieczeń, zmniejszając narażenie na potencjalnie złośliwe pakiety z publicznych rejestrów. Zmiana tego ustawienia nie ma wpływu na wersje pakietów, które zostały już zapisane w repozytorium. Te wersje pozostają dostępne niezależnie od tego ustawienia. Musisz być właścicielem kanału danych , aby włączyć funkcję pozwalającą na zewnętrznie źródłowe wersje.

Zezwalaj na wersje zewnętrzne dla pakietu

Aby włączyć korzystanie z wersji zewnętrznych dla określonego pakietu, wykonaj następujące kroki:

Uwaga

Aby zezwolić na zewnętrzne wersje, musisz być Właścicielem Kanału.

  1. Zaloguj się do usługi Azure DevOps, a następnie przejdź do projektu.

  2. Wybierz Artefakty, a następnie wybierz swój kanał informacyjny z menu rozwijanego.

  3. Wybierz pakiet, wybierz przycisk z wielokropkiem, aby uzyskać więcej opcji, a następnie wybierz pozycję Zezwalaj na wersje pochodzące z zewnętrznych źródeł.

  4. Przełącz opcję Zezwalaj na wersje zewnętrzne , aby włączyć tę funkcję, a następnie wybierz pozycję Zamknij po zakończeniu.

    Zrzut ekranu przedstawiający sposób włączania wersji zewnętrznych dla określonego pakietu w usłudze Azure Artifacts.

Zezwalaj na wersje zewnętrzne przy użyciu interfejsu API REST

Aby włączyć wersje zewnętrzne dla określonego pakietu przy użyciu interfejsu API REST, użyj następujących punktów końcowych:

Typ pakietu Punkty końcowe interfejsu API
NuGet - Konfigurowanie zachowania nadrzędnego
- Uzyskiwanie zachowania nadrzędnego
npm - Konfigurowanie zachowania nadrzędnego
- Konfigurowanie zachowania nadrzędnego o określonym zakresie
- Uzyskiwanie zachowania przesyłania do źródła pakietu
- Uzyskiwanie zachowania nadrzędnego pakietu w zakresie
Pyton - Uzyskiwanie zachowania nadrzędnego
- Konfigurowanie zachowania nadrzędnego
Maven - Uzyskiwanie zachowania nadrzędnego
- Konfigurowanie zachowania nadrzędnego
Ładunek - Uzyskiwanie zachowania nadrzędnego
- Konfigurowanie zachowania nadrzędnego

Zezwalaj na wersje zewnętrzne przy użyciu programu PowerShell

Aby włączyć wersje zewnętrzne dla określonego pakietu przy użyciu programu PowerShell, wykonaj następujące kroki:

  1. Utwórz osobisty token dostępu z uprawnieniami do>odczytu, zapisu i zarządzania pakietami.

  2. Utwórz zmienną środowiskową dla osobistego tokenu dostępu.

    $env:PATVAR = "YOUR_PERSONAL_ACCESS_TOKEN"
    
  3. Przekonwertuj osobisty token dostępu na ciąg zakodowany w formacie Base64 i skonstruuj nagłówek żądania HTTP.

    $token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar")))
    $headers = @{
        Authorization = "Basic $token"
    }
    
  4. Skonstruuj adres URL punktu końcowego na podstawie typu kanału informacyjnego:

    • Źródło danych o zakresie projektu:

      $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"
      
    • Kanał informacyjny na potrzeby organizacji

      $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. Uruchom polecenie z tabeli na podstawie scenariusza:

    Akcja Description Command
    Uzyskiwanie zachowania nadrzędnego Pobierz stan działania źródłowego pakietu. Używa $url i $headers z wcześniejszych kroków. Invoke-RestMethod -Uri $url -Headers $headers
    Konfigurowanie zachowania nadrzędnego Zezwalaj na zewnętrznie źródłowe wersje pakietu, ustawiając wartość versionsFromExternalUpstreamsAllowExternalVersions. $body = '{"versionsFromExternalUpstreams": "AllowExternalVersions"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"
    Czyszczenie zachowania przekazywania zmian Zresetuj zachowanie upstream, ustawiając versionsFromExternalUpstreams do Auto. $body = '{"versionsFromExternalUpstreams": "Auto"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"

Uwaga

Propagacja zmian w zachowaniu nadrzędnym w usłudze może zająć trochę czasu. Jeśli pakiet nie jest dostępny po zaktualizowaniu ustawień, poczekaj do 3 godzin, aby zmiany zaczęły obowiązywać.

Odpowiednie scenariusze

W tej sekcji opisano typowe scenariusze, w których wersje zewnętrzne (pakiety z rejestrów publicznych) są blokowane lub dozwolone do zapisywania w kanale. W pozostałej części tego artykułu odwołujemy się do pakietów z publicznych rejestrów jako pakietów publicznych i pakietów przechowywanych w kanale informacyjnym usługi Azure Artifacts jako pakietach prywatnych.

Scenariusz 1. Wersje publiczne są blokowane

Publiczne wersje nie mogą być zapisywane do kanału, gdy funkcja Zezwalaj na wersje zewnętrzne jest włączona w dwóch następujących przypadkach:

Prywatna wersja pakietu została udostępniona publicznie

Jeśli pakiet prywatny zostanie później upubliczniony, kanał informacyjny zablokuje wszystkie nowe wersje o tej samej nazwie pakietu ze źródeł publicznych.

Ilustracja przedstawiająca publiczną wersję pakietu wewnętrznego.

Posiadanie zarówno prywatnych, jak i publicznych pakietów

Gdy zespół korzysta zarówno z pakietów prywatnych, jak i publicznych, feed blokuje wszystkie nowe wersje pakietu z rejestru publicznego, gdy opcja zezwalania na zewnętrzne wersje jest włączona.

Ilustracja przedstawiająca dostępne pakiety prywatne i publiczne.

Scenariusz 2. Dozwolone są wersje publiczne

Publiczne wersje mogą być zapisywane w kanale, gdy funkcja Zezwalaj na wersje zewnętrzne jest włączona w następujących trzech przypadkach:

Wszystkie pakiety są prywatne

Jeśli wszystkie pakiety są prywatne, a zespół nie planuje używania pakietów publicznych, włączenie tego ustawienia nie ma wpływu na przepływ pracy zespołu.

Ilustracja przedstawiająca kanał tylko z pakietami prywatnymi.

Wszystkie pakiety są publiczne

Jeśli zespół korzysta wyłącznie z publicznych pakietów z rejestrów lub repozytoriów open source, włączenie tego ustawienia nie ma wpływu na ich przepływ pracy.

Ilustracja przedstawiająca kanał informacyjny z tylko pakietami publicznymi.

Pakiet publiczny został zmieniony na prywatny

Jeśli pakiet publiczny zostanie później przekonwertowany na prywatny, włączenie ustawienia Zezwalaj na wersje zewnętrzne nie ma wpływu na przepływ pracy zespołu.

Ilustracja przedstawiająca pakiet przekonwertowany z publicznego na prywatny.