Sdílet prostřednictvím


Ochrana před škodlivými veřejnými balíčky

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

Upstreamové zdroje Azure Artifacts umožňují vývojářům centralizovat správu balíčků pomocí jednoho informačního kanálu k ukládání publikovaných balíčků i těch, které se využívají z veřejných registrů, jako je NuGet.org.

Upstreamové zdroje nabízejí několik výhod pro správu závislostí, včetně jednoduchosti, spolehlivosti a integrity balíčků. Podívejte se na Co jsou nadřazené zdroje? pro další podrobnosti.

Povolit externě zdrojové verze

Tato funkce umožňuje vývojářům řídit, jestli chtějí využívat verze balíčků z veřejných registrů, jako jsou NuGet.org nebo npmjs.com.

Jakmile je přepínač Povolit externí verze pro určitý balíček povolený, budou verze z veřejného registru k dispozici pro uložení do informačního kanálu. Ve výchozím nastavení je tato možnost zakázaná a přidává další vrstvu zabezpečení snížením ohrožení potenciálně škodlivých balíčků z veřejných registrů. Změna tohoto nastavení nemá vliv na verze balíčků, které jsou již uloženy v informačním kanálu. Tyto verze zůstanou přístupné bez ohledu na toto nastavení. Musíte být vlastníkem informačního kanálu, abyste mohli povolit funkci umožnit externě zdrojené verze.

Povolit externí verze pro balíček

Pokud chcete povolit používání externích verzí pro konkrétní balíček, postupujte takto:

Poznámka:

Pokud chcete povolit verze z externích zdrojů, musíte být vlastníkem informačního kanálu.

  1. Přihlaste se k Azure DevOps a přejděte do svého projektu.

  2. Vyberte Artefakty a pak v rozevírací nabídce vyberte svůj informační kanál.

  3. Vyberte balíček, vyberte tlačítko se třemi tečky pro další možnosti a pak vyberte Povolit externě zdrojové verze.

  4. Pokud chcete funkci povolit, přepněte možnost Povolit externí verze a po dokončení vyberte Zavřít .

    Snímek obrazovky znázorňující povolení externích verzí pro konkrétní balíček v Azure Artifacts

Povolení externích verzí pomocí rozhraní REST API

Pokud chcete povolit externí verze pro konkrétní balíček pomocí rozhraní REST API, použijte následující koncové body:

Typ balíčku Koncové body rozhraní API
NuGet - Nastavení chování upstreamingu
- Získání chování průběhu upstreamu
npm - Nastavení chování upstreamingu
- Nastavení chování upstreamingu s vymezeným oborem
- Získání chování upstreamingu balíčku
- Získání chování při upstreamování balíčku s vymezeným oborem
Krajta - Získání chování upstreamingu
- Nastavení chování upstreamingu
Odborník - Získat chování směřování nahoru
- Nastavit chování upstreamu
Náklad - Získání chování upstreamingu
- Nastavení chování upstreamu

Povolení externích verzí pomocí PowerShellu

Pokud chcete povolit externí verze pro konkrétní balíček pomocí PowerShellu, postupujte takto:

  1. Vytvořte osobní přístupový token s oprávněními pro Balíčkování>

  2. Vytvořte proměnnou prostředí pro váš osobní přístupový token.

    $env:PATVAR = "YOUR_PERSONAL_ACCESS_TOKEN"
    
  3. Převeďte svůj osobní přístupový token na řetězec s kódováním Base64 a vytvořte hlavičku požadavku HTTP.

    $token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar")))
    $headers = @{
        Authorization = "Basic $token"
    }
    
  4. Vytvořte adresu URL koncového bodu na základě vašeho typu informačního kanálu:

    • Informační kanál omezený na projekt:

      $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"
      
    • Organizačně vymezený informační kanál

      $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. Spusťte příkaz z tabulky na základě vašeho scénáře:

    Činnost Description Command
    Získání chování upstream Načtěte stav nadřazeného chování balíčku. Používá $url a $headers z předchozích kroků. Invoke-RestMethod -Uri $url -Headers $headers
    Nastavení chování upstreamingu Povolte pro balíček externě zdrojové verze nastavením versionsFromExternalUpstreams na AllowExternalVersions. $body = '{"versionsFromExternalUpstreams": "AllowExternalVersions"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"
    Vyjasnění chování upstreamingu Resetujte chování upstreamu nastavením versionsFromExternalUpstreams na Auto. $body = '{"versionsFromExternalUpstreams": "Auto"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"

Poznámka:

Rozšíření změn nadřazeného chování ve službě může nějakou dobu trvat. Pokud balíček po aktualizaci nastavení není k dispozici, počkejte až 3 hodiny, než se změny projeví.

Použitelné scénáře

Tato část popisuje běžné scénáře, kdy jsou externí verze (balíčky z veřejných registrů) blokovány nebo povoleny, aby byly uloženy do kanálu. Ve zbývající části tohoto článku odkazujeme na balíčky z veřejných registrů jako veřejné balíčky a balíčky uložené v informačním kanálu Azure Artifacts jako soukromé balíčky.

Scénář 1: Veřejné verze jsou blokované

Veřejné verze jsou blokovány před uložením do kanálu, pokud je povolena funkce Povolit externí verze v následujících dvou případech:

Veřejná verze privátního balíčku

Pokud se privátní balíček později zpřístupní, kanál zablokuje všechny nové verze se stejným názvem balíčku z veřejných zdrojů.

Obrázek znázorňující verzi interního balíčku, která se zpřístupnila

Používání privátních i veřejných balíčků

Pokud tým používá privátní i veřejné balíčky, zdroj blokuje všechny nové verze balíčků z veřejného registru, pokud je umožněný externí přístup.

Obrázek znázorňující dostupné privátní a veřejné balíčky

Scénář 2: Veřejné verze jsou povolené

Veřejné verze je možné uložit do informačního kanálu, pokud je povolená funkce Povolit externí verze v následujících třech případech:

Všechny balíčky jsou soukromé.

Pokud jsou všechny balíčky soukromé a tým neplánuje používat veřejné balíčky, povolení tohoto nastavení nemá žádný vliv na pracovní postup týmu.

Obrázek znázorňující přehled pouze se soukromými balíčky.

Všechny balíčky jsou veřejné.

Pokud tým výhradně využívá veřejné balíčky z registrů nebo opensourcových úložišť, povolení nastavení neovlivní jejich pracovní postup.

Ilustrace zobrazující zdroj pouze s veřejnými balíčky.

Veřejný balíček vytvořený jako soukromý

Když se veřejný balíček později převede na privátní, povolení nastavení umožňujícího externí verze neovlivní pracovní postup týmu.

Obrázek znázorňující balíček převedený z veřejného na privátní