Поделиться через


Защита от вредоносных общедоступных пакетов

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

С помощью входящих источников Azure Artifacts разработчики получают возможность удобно использовать единый канал для публикации и потребления пакетов из каналов артефактов и популярных публичных реестров, таких как NuGet.org или npmjs.com.

Разрешить внешние исходные версии

Эта функция позволяет разработчикам контролировать, следует ли использовать версии пакетов из общедоступных реестров, таких как NuGet.org или npmjs.com.

После включения переключателя разрешить внешние версии для определенного пакета версии из общедоступного реестра становятся доступными для скачивания. По умолчанию этот параметр отключен, добавляя дополнительный уровень безопасности, предотвращая воздействие потенциально вредоносных пакетов из общедоступных реестров. Вы должны быть владельцем канала, чтобы включить функцию разрешения внешних исходных версий.

Примечание.

Изменение этого параметра не влияет на версии пакетов, которые уже сохранены в хранилище. Эти версии останутся доступными независимо от этого параметра.

Применимые сценарии

В следующем разделе описаны распространенные сценарии, в которых внешние версии (пакеты из общедоступных реестров) заблокированы или разрешены для сохранения в веб-канале. В остальной части этой статьи мы называем пакеты из общедоступных реестров общедоступными пакетами и пакетами в веб-канале Azure Artifacts как частные пакеты.

Сценарий 1. Общедоступные версии блокируются

Общедоступная версия частного пакета

В этом сценарии команда имеет частный пакет, который был сделан публичным для общего доступа. Параметр внешних версий в этом случае приведет к блокировке потребления любых новых версий с таким именем пакета из общедоступного источника.

Иллюстрация, показывающая внутреннюю версию пакета, созданную общедоступной.

Наличие частных и общедоступных пакетов

В этом сценарии, если команда использует сочетание частных и публичных пакетов, если запретить использование пакетов из внешних источников, это блокирует любые новые версии пакетов из публичного реестра.

Иллюстрация с доступными частными и общедоступными пакетами.

Сценарий 2. Общедоступные версии не будут заблокированы

Все пакеты являются частными*

Если все существующие пакеты являются частными, и команда не планирует использовать общедоступные пакеты, параметр внешних версий не влияет на рабочий процесс команды в этом сценарии.

Иллюстрация, показывающая ленту только с частными пакетами.

Все пакеты являются общедоступными

В этом сценарии, если команда использует только общедоступные пакеты, будь то из общедоступного реестра или других репозиториев с открытым исходным кодом, параметр не влияет на рабочий процесс каким-либо образом.

Иллюстрация, показывающая ленту только с общедоступными пакетами.

Общедоступный пакет стал частным

В этой ситуации, когда общедоступный пакет преобразуется в частный пакет, параметры внешних версий не влияют на рабочий процесс команды каким-либо образом.

Иллюстрация, показывающая пакет, преобразованный из общедоступного в частный.

Разрешить внешние версии

Примечание.

Вы должны быть владельцем канала, чтобы разрешить версии, полученные извне. Дополнительные сведения см. в разделе "Разрешения для ленты".

  1. Войдите в организацию Azure DevOps и перейдите к проекту.

  2. Выберите Артефакты, и затем выберите ваш веб-канал в раскрывающемся меню.

  3. Выберите пакет и нажмите кнопку с многоточием для получения дополнительных параметров. Выберите "Разрешить внешние исходные версии".

    Снимок экрана, показывающий, как включить версии из внешних источников.

  4. Нажмите кнопку переключателя, чтобы разрешить внешние версии. Нажмите кнопку "Закрыть ", когда вы закончите.

    Снимок экрана: включение внешних версий.

Разрешить внешние версии с помощью REST API

Разрешить внешние версии с помощью PowerShell

  1. Создайте персональный токен доступа с правами упаковки>, чтения, записи и управления разрешениями.

    Снимок экрана: выбор разрешений на упаковку.

  2. Создайте переменную среды для токена личного доступа.

    $env:PATVAR = "YOUR_PERSONAL_ACCESS_TOKEN"
    
  3. Преобразуйте личный маркер доступа в строку в кодировке Baser64 и создайте заголовок HTTP-запроса.

    $token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar")))
    $headers = @{
        Authorization = "Basic $token"
    }
    
  4. Создайте URL-адрес конечной точки. Пример: //pkgs.dev.azure.com/MyOrg/MyProject/_apis/packaging/feeds/MyFeed/nuget/packages/pkg1.0.0.nupkg/upstreaming?api-version=6.1-preview.1

    • Лента с привязкой к проекту:

      $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"
      
    • Лента новостей организации

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=6.1-preview.1"
      

Выполните следующую команду, чтобы получить состояние поведения вышестоящего пакета. $url и $headers являются теми же переменными, которые мы использовали в предыдущем разделе.

Invoke-RestMethod -Uri $url -Headers $headers