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. Dříve informační kanály Artifact zkombinovaly seznam dostupných verzí balíčků ze samotného informačního kanálu i ze všech nakonfigurovaných upstreamových zdrojů.

Obrázek znázorňující obsah informačního kanálu

Povolit externě zdrojové verze je funkce, která vývojářům umožňuje zvolit, jestli chtějí využívat externě zdrojové verze balíčků. Určuje, které balíčky jsou přístupné z veřejných registrů pro konkrétní balíčky.

Když zakážete přepínač Povolit externí verze , verze z veřejného registru se zablokují a přestanou být k dispozici ke stažení. Tím se přidá další vrstva zabezpečení tím, že zabrání vystavení potenciálně škodlivým balíčkům z veřejných registrů.

Pokud ale uživatelé dávají přednost, můžou povolit přepínač Povolit externí verze , aby povolovali přístup k balíčkům a spotřebovávali je z veřejných registrů.

Poznámka:

Toto nastavení nezmění žádné verze balíčků, které jsou již uloženy v informačním kanálu. Přístup k těmto verzím balíčků se v důsledku změny tohoto nastavení nezmění.

Použitelné scénáře

Následující část ukazuje různé běžné scénáře, kdy nastavení externí verze blokuje externě zdrojové verze balíčků a další scénáře, kdy není potřeba blokovat přístup k veřejným balíčkům.

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 privátních a veřejných balíčků, zakáže externí zdrojové balíčky všechny nové verze balíčků z veřejného registru.

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

Veřejné verze nebudou blokované.

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.

Obrázek znázorňující informační kanál 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 externě zdrojové verze, 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 pomocí oprávnění Ke čtení, zápisu a správě balíčků>.

    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 s oborem projektu:

      $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"
      
    • Informační kanál s oborem organizace:

      $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