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


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

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

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

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

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

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

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

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

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

Примечание.

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

  1. Войдите в Azure DevOps, а затем перейдите к проекту.

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

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

  4. Чтобы включить эту функцию, установите переключатель "Разрешить внешние версии ", а затем нажмите кнопку "Закрыть " после завершения.

    Снимок экрана: включение внешних версий для определенного пакета в Azure Artifacts.

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

Чтобы включить внешние версии для определенного пакета с помощью REST API, используйте следующие конечные точки:

Тип пакета Конечные точки API
NuGet - Настройка поведения апстриминга
- Получение поведения вышестоящей передачи
НПМ - Настройка поведения передачи данных в базовый проект
- Настроить область действия upstreaming
- Получение поведения вышестоящего пакета
- Получение поведения управления пакетом с областью действия
Питон - Определение функционирования восходящей передачи
- Установить поведение передачи вверх по потоку
Maven - Получение поведения интеграции в основной поток
- Настройка восходящего поведения
Груз - Получение поведения вышестоящей передачи
- Задать поведение отправки изменений

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

Чтобы включить внешние версии для определенного пакета с помощью PowerShell, выполните следующие действия.

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

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

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

    $token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar")))
    $headers = @{
        Authorization = "Basic $token"
    }
    
  4. Создайте URL-адрес конечной точки на основе типа веб-канала:

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

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

      $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. Выполните команду из таблицы в зависимости от сценария:

    Действие Description Command
    Получение восходящего поведения Получите состояние поведения пакета относительно вышестоящих зависимостей. Используются $url и $headers из предыдущих шагов. Invoke-RestMethod -Uri $url -Headers $headers
    Настройка поведения вышестоящей передачи Разрешите внешние исходные версии пакета, задав для этого значение versionsFromExternalUpstreamsAllowExternalVersions. $body = '{"versionsFromExternalUpstreams": "AllowExternalVersions"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"
    Очистить поведение восходящего потока Сброс поведения входящего потока путем установки versionsFromExternalUpstreams в Auto. $body = '{"versionsFromExternalUpstreams": "Auto"}'
    Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"

Примечание.

Для распространения изменений в верхнем уровне по службе может потребоваться время. Если ваш пакет недоступен после обновления параметров, подождите до трёх часов, чтобы изменения вступили в силу.

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

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

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

Общедоступные версии блокируются при включении функции "Разрешить внешние версии " в следующих двух случаях:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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