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


Безопасный доступ к репозиториям из конвейеров

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

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

Эта статья является частью серии, которая помогает реализовать меры безопасности для Azure Pipelines. Дополнительные сведения см. в статье "Защита Azure Pipelines".

Предпосылки

Категория Требования
Azure DevOps — Реализуйте рекомендации, изложенные в Make your Azure DevOps secure и Secure Azure Pipelines.
— Базовые знания о YAML и Azure Pipelines. Дополнительные сведения см. в статье "Создание первого конвейера".
Разрешения — Чтобы изменить разрешения конвейеров: член группы "Администраторы проектов".
— Чтобы изменить разрешения организации, необходимо быть членом группы администраторов коллекции проектов.

Идентичности на основе проекта для процессов

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

Идентификация на уровне коллекции легко настроить и использовать, но идентификация на уровне проекта отдает приоритет безопасности. Чтобы повысить безопасность, используйте учетные данные уровня проекта для запуска процессов. Удостоверение уровня проекта может получить доступ к ресурсам только в рамках своего проекта, минимизируя влияние любого несанкционированного доступа злоумышленниками. Дополнительные сведения см. в разделе Идентификаторы сборки с областью действия и Область авторизации задания.

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

Действия по улучшению безопасности доступа к репозиторию

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

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

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

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

  4. Включите следующие параметры организации или проекта для проекта конвейера:

    • Ограничить область действия разрешений задания текущим проектом для конвейеров, не относящихся к релизу.
    • Ограничить область авторизации задания текущим проектом для конвейеров выпуска , если у проекта есть конвейеры выпуска.
    • Защитите доступ к репозиториям в конвейерах YAML, если в проекте есть конвейеры YAML Azure Repos.

    Включите эти параметры, установив их переключатели в положение Вкл. в настройках организации или настройках проекта>Конвейеры>Настройки>Общие.

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

Использование репозитория в качестве подмодулы

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

Репозитории GitHub

Следующие соображения по безопасности применяются для доступа конвейера к репозиториям GitHub. Дополнительные сведения см. в разделе Доступ к репозиториям GitHub.

Подключения службы GitHub

Чтобы использовать репозитории GitHub, Azure Pipelines требует подключения службы GitHub. Чтобы укрепить безопасность сервисного соединения, выполните приведенные далее действия.

  • Разрешить доступ только к тем репозиториям, которые необходимы для работы конвейеров.
  • Не выбирайте разрешение на доступ ко всем конвейерам для подключения к службе. Явно авторизовать подключение службы для каждого конвейера данных, который его использует.

Проверка подлинности в репозиториях GitHub

Чтобы активировать сборки и получить код во время сборки, Azure Pipelines необходимо предоставить доступ к репозиториям GitHub. Этот доступ может использовать личный маркер доступа GitHub (PAT), OAuth или проверку подлинности приложения GitHub Azure Pipelines. Дополнительные сведения см. в разделе Доступ к репозиториям GitHub.

Приложение GitHub Azure Pipelines — это рекомендуемый тип проверки подлинности для конвейеров непрерывной интеграции (CI). Сборки и обновления статуса GitHub теперь используют удостоверение Azure Pipelines вместо личного удостоверения GitHub. При установке приложения можно ограничить, какие репозитории приложения могут получить доступ к повышенной безопасности.

Аутентификация OAuth и PAT используют личное удостоверение GitHub и должны быть авторизованы для доступа к конвейеру. Использование PAT не рекомендуется из-за проблем безопасности. Если необходимо использовать проверку подлинности PAT, выберите детализированный PAT и ограничьте область действия определенным пользователям, репозиториям и разрешениям. Дополнительные сведения см. в разделе "Управление личными маркерами доступа".

Замечание

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

Форки репозиториев GitHub

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

Чтобы свести к минимуму риски от форкнутых репозиториев, Ограничить сборку запросов на вытягивание из форкнутых репозиториев GitHub и Отключить сборку запросов на вытягивание из форкнутых репозиториев по умолчанию включены в параметрах проекта или параметрах организации>конвейеры>триггеры.

Чтобы разрешить собирать из форкнутых репозиториев GitHub, но снизить риски, выберите Безопасно собирать пулл реквесты из форкнутых репозиториев. Этот параметр запрещает доступ к секретам или использовать те же разрешения, что и обычные сборки, и требует комментариев pr от члена группы для активации конвейера.

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

Скриншот настроек проекта для ограничения сборок форкнутых репозиториев.

Другие способы повышения безопасности форка включают:

  • Если вы используете проверку пулл-реквеста для активации сборок, отмените выбор Сборка пулл-реквестов из вилок этого репозитория в разделе Триггер определения конвейера или убедитесь, что предоставление секретов для сборок из вилок и придание сборкам из вилок тех же разрешений, что и обычным сборкам отключены. Кроме того, можно выбрать требовать комментарий участника команды перед созданием запроса на вытягивание.

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

Репозитории Azure Repos

Защита доступа к репозиториям в конвейерах YAML

Настройка проекта или организации "Защита доступа к репозиториям в YAML" предоставляет детализированные разрешения для конвейеров YAML. Этот параметр делает конвейер YAML явным образом запрашивать разрешение на доступ к любому репозиторию независимо от проекта. Дополнительные сведения см. в разделе "Защита доступа к репозиториям" в конвейерах YAML.

Замечание

Защита доступа к репозиториям в параметрах конвейеров YAML не применяется к репозиториям GitHub.

Если этот параметр включен, конвейеры YAML Azure Repos всегда запрашивают разрешение на доступ к репозиториям при первом запуске. Вы увидите запрос на разрешение, как показано на следующем снимок экрана:

Снимок экрана выполнения конвейера SpaceGameWeb в первый раз после включения переключателя "Защита доступа к репозиториям" в конвейерах YAML.

Выберите Разрешить, чтобы предоставить доступ к репозиториям или ресурсам конвейера. Конвейер сейчас прошёл успешно.

Снимок экрана: разрешение доступа к репозиториям в конвейере YAML.

Использование командной строки Git для извлечения других репозиториев

Сценарий командной строки, например git clone https://github/fabrikam-tailspin/FabrikamFiber/_git/OtherRepo/ , может завершиться сбоем при включении защиты доступа к репозиториям в конвейерах YAML . Чтобы устранить проблему, явным образом проверьте OtherRepo репозиторий с помощью checkout команды, например checkout: git://FabrikamFiber/OtherRepo.

Пример Azure Repos

В следующем примере показан процесс улучшения безопасности доступа Azure Repos в конвейере.

Организация https://dev.azure.com/fabrikam-tailspin содержит проекты SpaceGameWeb и FabrikamFiber .

  • Проект SpaceGameWeb содержит репозитории SpaceGameWeb и SpaceGameWebReact .

    Снимок экрана: структура репозитория SpaceGameWeb.

  • Проект FabrikamFiber содержит репозитории FabrikamFiber, FabrikamChat и FabrikamFiberLib. Репозиторий FabrikamFiber использует репозиторий FabrikamFiberLib в качестве подмодула.

    Снимок экрана: структура репозитория FabrikamFiber.

Конвейер SpaceGameWeb в проекте SpaceGameWeb проверяет репозиторий SpaceGameWebReact в проекте SpaceGameWeb и репозитории FabrikamFiber и FabrikamChat в проекте FabrikamFiber.

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

Используйте идентификацию уровня проекта

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

Если этот параметр включен, конвейер может получить доступ только к ресурсам в проекте SpaceGameWeb , который содержит только репозитории SpaceGameWeb и SpaceGameWebReact . Конвейер завершается ошибкой, так как он не может проверить репозитории в проекте FabrikamFiber .

Вы видите ошибки remote: TF401019: The Git repository with name or identifier FabrikamChat does not exist or you do not have permissions for the operation you are attempting и remote: TF401019: The Git repository with name or identifier FabrikamFiber does not exist or you do not have permissions for the operation you are attempting.

Чтобы устранить проблемы, предоставьте проекту конвейера доступ к проекту FabrikamFiber и предоставьте удостоверению конвейера доступ на чтение к репозиториям FabrikamFiber, FabrikamChat и FabrikamFiberLib.

Явным образом проверьте подмодул

Репозиторий FabrikamFiber использует репозиторий FabrikamFiberLib в качестве подмодула. Даже если предоставить конвейеру доступ к обоим репозиториям, извлечение репозитория FabrikamFiber по-прежнему завершается ошибкой при проверке подмодулы FabrikamFiberLib .

Чтобы устранить эту проблему, извлеките репозиторий FabrikamFiberLib перед тем, как извлечь репозиторий FabrikamFiber. Добавьте шаг checkout: git://FabrikamFiber/FabrikamFiberLib перед шагом checkout: FabrikamFiber. Теперь примерная труба работает успешно.

Защита доступа к конвейеру YAML

Если пример конвейера SpaceGameWeb является конвейером YAML и включена защита доступа к репозиториям в конвейерах YAML, конвейеру требуется разрешение на доступ к репозиториям SpaceGameWebReact, FabrikamFiber и FabrikamChat при первом запуске.

В следующем коде показан полный конвейер YAML.

trigger:
- main

pool:
  vmImage: ubuntu-latest

resources:
  repositories:
    - repository: SpaceGameWebReact
      name: SpaceGameWeb/SpaceGameWebReact
      type: git
    - repository: FabrikamFiber
      name: FabrikamFiber/FabrikamFiber
      type: git
    - repository: FabrikamChat
      name: FabrikamFiber/FabrikamChat
      type: git

steps:
  - script: echo "Building SpaceGameWeb"
  - checkout: SpaceGameWebReact
  - checkout: FabrikamChat
    condition: always()  
  - checkout: git://FabrikamFiber/FabrikamFiberLib
  - checkout: FabrikamFiber
    submodules: true
    condition: always()
  - script: |
      cd FabrikamFiber
      git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" submodule update --recursive --remote
  - script: cat $(Build.Repository.LocalPath)/FabrikamFiber/FabrikamFiberLib/README.md

Дополнительные меры безопасности репозитория

  • Чтобы снизить риски безопасности от ресурсов YAML и классических конвейеров, отключите создание классических конвейеров , включив отключение создания классических конвейеров сборки и отключение включения классических конвейеров выпуска в параметрах проекта или параметрах организации. Классическое создание конвейера сборки и выпуска по умолчанию отключено для новых организаций.

  • Используйте шаблоны конвейеров для определения структуры конвейера и предотвращения проникновения вредоносного кода. Шаблоны также могут автоматически выполнять такие задачи, как сканирование учетных данных или принудительное проверка защищенных ресурсов.

  • Требовать утверждения вручную каждый раз, когда конвейер запрашивает репозиторий. Более подробную информацию см. в разделе "Утверждения и проверки".

  • Используйте проверку защищенной ветки, чтобы предотвратить автоматическое выполнение конвейеров в неавторизованных ветках.

  • Задайте репозиторий для использования только в указанных конвейерах YAML. Для получения дополнительной информации см. Добавить разрешения конвейера ресурсу репозитория.

  • Ограничьте область маркера доступа Azure Pipelines, предоставляя маркер только для репозиториев, перечисленных в разделе конвейера resources. Дополнительные сведения см. в разделе "Защита репозитория".