Sdílet prostřednictvím


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

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

Díky upstreamovým zdrojům Azure Artifacts získají vývojáři pohodlí při publikování a využívání balíčků z informačních kanálů Artifact a oblíbených veřejných registrů, jako jsou NuGet.org nebo npmjs.com.

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 konkrétní balíček povolen, stanou se verze dostupné ve veřejném registru k dispozici ke stažení. Ve výchozím nastavení je tato možnost zakázaná a přidává další vrstvu zabezpečení tím, že brání vystavení potenciálně škodlivým balíčkům z veřejných registrů. Musíte být vlastníkem informačního kanálu, abyste mohli povolit funkci umožnit externě zdrojené verze.

Poznámka:

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í.

Použitelné scénáře

Následující část popisuje běžné scénáře, kdy jsou externí verze (balíčky z veřejných registrů) blokovány nebo povoleny při ukládání do kanálu. Ve zbývající části tohoto článku označujeme balíčky z veřejných registrů jako veřejné balíčky a balíčky v informačním kanálu Azure Artifacts jako privátní balíčky.

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

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

V tomto scénáři má tým privátní balíček, který byl zpřístupněn jako veřejný. Nastavení externích verzí v tomto případě způsobí, že informační kanál zablokuje spotřebu všech nových verzí s tímto názvem balíčku z veřejného zdroje.

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 v tomto scénáři tým používá kombinaci soukromých a veřejných balíčků, pak zakázání externě dodávaných balíčků blokuje jakékoli nové verze balíčků z veřejného registru.

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

Scénář 2: Veřejné verze nebudou blokovány

Všechny balíčky jsou soukromé*

Pokud jsou všechny existující balíčky soukromé a tým nemá v úmyslu používat žádné veřejné balíčky, nastavení externích verzí nemá žádný vliv na pracovní postup týmu v tomto scénáři.

Obrázek znázorňující informační kanál s pouze privátními balíčky

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

Pokud v tomto scénáři tým výhradně využívá veřejné balíčky, ať už z veřejného registru nebo jiných opensourcových úložišť, nastavení nijak neovlivní pracovní postup.

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

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

V takovém případě, když je veřejný balíček převeden na privátní balíček, nastavení externích verzí nijak neovlivní pracovní postup týmu.

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

Povolit externí verze

Poznámka:

Pokud chcete povolit verze z externích zdrojů, musíte být vlastníkem informačního kanálu. Další informace najdete v tématu Oprávnění informačního kanálu.

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

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

  3. Vyberte balíček a pak výběrem tlačítka se třemi tečky zobrazíte další možnosti. Vyberte Povolit externě zdrojové verze.

    Snímek obrazovky znázorňující, jak povolit externě zdrojové verze

  4. Výběrem přepínače povolte externí verze. Až budete hotovi, vyberte Zavřít .

    Snímek obrazovky znázorňující povolení externích verzí

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

Povolení externích verzí pomocí PowerShellu

  1. Vytvořte osobní přístupový token s oprávněními pro Balíčkování ke čtení, zápisu a správě.

    Snímek obrazovky znázorňující, jak vybrat oprávnění k balení

  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 kódovaný v baser64 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. Příklad: //pkgs.dev.azure.com/MyOrg/MyProject/_apis/packaging/feeds/MyFeed/nuget/packages/pkg1.0.0.nupkg/upstreaming?api-version=6.1-preview.1

    • 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=6.1-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=6.1-preview.1"
      

Spuštěním následujícího příkazu načtěte stav upstreamového chování balíčku. $url a $headers jsou stejné proměnné, které jsme použili v předchozí části.

Invoke-RestMethod -Uri $url -Headers $headers