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


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

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

С помощью вышестоящих источников артефактов Azure разработчики получают удобство использования единого веб-канала для публикации и использования пакетов из веб-каналов Артефактов и популярных общедоступных реестров, таких как NuGet.org или npmjs.com. Ранее веб-каналы Artifact объединили список доступных версий пакетов как самого канала, так и всех настроенных вышестоящих источников.

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

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

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

Однако если пользователи предпочитают, они могут включить переключатель "Разрешить внешние версии ", чтобы разрешить доступ к пакетам и использовать их из общедоступных реестров.

Примечание.

Этот параметр не вносит изменения в версии пакетов, которые уже сохранены в веб-канале. Доступ к этим версиям пакета не изменится в результате изменения этого параметра.

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

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

Общедоступные версии заблокированы

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

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

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

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

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

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

Общедоступные версии не будут заблокированы

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

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

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

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

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

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

Общедоступный пакет, закрытый

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

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

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

Примечание.

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

  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