Безопасный доступ к Azure Repos из конвейеров
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Ваши репозитории жизненно важны для успеха вашего бизнеса, так как они размещают код, который вы используете для ваших операций. Необходимо тщательно контролировать доступ к репозиториям. В этой статье описано, как повысить безопасность конвейера сборки и классического конвейера выпуска при доступе к Azure Repos, чтобы снизить риск несанкционированного доступа.
Чтобы обеспечить безопасный доступ к репозиториям Azure, включите следующие переключатели:
- Ограничение области авторизации задания текущим проектом для конвейеров, отличных от выпуска
- Ограничить область авторизации задания текущим проектом для конвейеров выпуска
- Защита доступа к репозиториям в конвейерах YAML
Базовый процесс
Следующие действия по защите конвейеров аналогичны всем конвейерам.
- Определите репозитории Azure Repos, к которым требуется доступ к конвейеру в одной организации, но в разных проектах.
Это можно сделать путем проверки конвейера или включения области авторизации задания в текущий проект для конвейеров (не)выпусков и запишите, какие репозитории конвейера не удается проверить. Репозитории вложенных модулей могут не отображаться в первом сбое выполнения. - Предоставьте удостоверению сборки конвейера доступ к проекту для каждого проекта , содержащего репозиторий, к которому требуется доступ.
- Предоставьте конвейеру доступ на чтение удостоверения сборки для этого репозитория для каждого репозитория, который проверяется конвейером.
- Предоставьте удостоверению сборки доступ на чтение этого репозитория для каждого репозитория, который используется в качестве подмодула репозиторием, который проверяет конвейер и находится в том же проекте.
- Включите область авторизации задания в текущий проект для конвейеров, отличных от выпуска, ограничить область авторизации задания текущим проектом для конвейеров выпуска и защитить доступ к репозиториям в конвейерах YAML.
Конвейеры сборки
Чтобы проиллюстрировать действия по повышению безопасности конвейеров при доступе к Azure Repos, мы используем следующий пример.
- Предположим, что вы работаете над конвейером
SpaceGameWeb
, размещенным вfabrikam-tailspin/SpaceGameWeb
проекте, вSpaceGameWeb
репозитории Azure Repos. - Конвейер
SpaceGameWeb
извлекает репозиторийSpaceGameWebReact
в том же проекте, аFabrikamFiber
FabrikamChat
также репозитории вfabrikam-tailspin/FabrikamFiber
проекте. - Репозиторий
FabrikamFiber
использует репозиторийFabrikamFiberLib
как подмодул, размещенный в том же проекте. - Структуры
SpaceGameWeb
репозитория проекта выглядят как на следующем снимке экрана. - Структуры
FabrikamFiber
репозитория проекта выглядят как на следующем снимке экрана. - Представьте, что проект не настроен для использования удостоверения сборки на основе проекта или защиты доступа к репозиториям в конвейерах YAML. Кроме того, предположим, что вы уже успешно запустили конвейер.
Использование удостоверения сборки на основе проекта для конвейеров сборки
Во время выполнения конвейера удостоверение используется для доступа к ресурсам, таким как репозитории, подключения служб и группы переменных. Конвейеры могут использовать два типа удостоверений: уровень проекта и уровень коллекции. Первый приоритет определяет безопасность, в то время как последний подчеркивает простоту использования. Дополнительные сведения см. в области удостоверений сборки и области авторизации заданий.
Для повышения безопасности используйте удостоверения уровня проекта при запуске конвейеров. Эти удостоверения могут получать доступ только к ресурсам в связанном проекте, минимизируя риск несанкционированного доступа злоумышленниками.
Чтобы настроить конвейер для использования удостоверения уровня проекта, включите область авторизации задания ограничения на текущий проект для параметра конвейеров, отличных от выпуска.
В нашем примере, когда этот переключатель отключен, SpaceGameWeb
конвейер может получить доступ ко всем репозиториям во всех проектах. Если переключатель включен, SpaceGameWeb
доступ к ресурсам в fabrikam-tailspin/SpaceGameWeb
проекте может получить доступ только к ресурсам, поэтому только SpaceGameWeb
репозитории и SpaceGameWebReact
репозитории.
Если вы запускаете наш пример конвейера, при включении переключателя конвейер завершается сбоем, а журналы ошибок сообщают вам 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.
Чтобы устранить проблемы с выходом , выполните действия, описанные в разделе "Базовый процесс " этой статьи.
Кроме того, явным образом проверьте репозитории подмодул, прежде чем репозитории, которые используют их. В нашем примере это означает репозиторий FabrikamFiberLib
.
Если вы запускаете наш пример конвейера, он завершается успешно.
Дальнейшая конфигурация
Чтобы повысить безопасность при доступе к Azure Repos, рассмотрите возможность включения защиты доступа к репозиториям в конвейерах YAML.
Предположим, что SpaceGameWeb
конвейер является конвейером YAML, и его исходный код 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: 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
Azure DevOps предоставляет подробный механизм разрешений для репозиториев Azure Repos в виде защиты доступа к репозиториям YAML в параметрах конвейеров YAML. Этот параметр делает конвейер YAML явным образом запрашивать разрешение на доступ ко всем репозиториям Azure Repos, независимо от того, какой проект они принадлежат. Дополнительные сведения см . в репозиториях доступа. Этот параметр не влияет на извлечение других типов репозиториев, таких как размещенные в GitHub.
В нашем работающем примере, когда этот параметр включен, SpaceGameWeb
конвейер запрашивает разрешение на доступ к SpaceGameWebReact
репозиторию в fabrikam-tailspin/SpaceGameWeb
проекте, а также FabrikamFiber
FabrikamChat
репозитории в fabrikam-tailspin/FabrikamFiber
проекте.
При запуске примера конвейера выполняется сборка, аналогичная следующему примеру.
Предоставьте разрешение репозиториям или ресурсам конвейера.
Конвейер выполняется, но завершается сбоем, так как он не может извлечь FabrikamFiberLib
репозиторий как подмодул FabrikamFiber
. Чтобы решить эту проблему, явным образом проверьте FabrikamFiberLib
его, добавив - checkout: git://FabrikamFiber/FabrikamFiberLib
шаг перед -checkout: FabrikamFiber
шагом.
Пример конвейера выполнен успешно.
Окончательный исходный код конвейера 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
Устранение неполадок
Используйте следующие решения для любых возникающих проблем.
Вы используете Git в командной строке для извлечения репозиториев в той же организации
Например, вы используете - script: git clone https://$(System.AccessToken)@dev.azure.com/fabrikam-tailspin/FabrikamFiber/_git/OtherRepo/
. Команда завершается ошибкой, если включен параметр "Защита доступа к репозиториям" в конвейерах YAML.
Чтобы устранить проблему, ознакомьтесь OtherRepo
с репозиторием с помощью checkout
команды, например - checkout: git://FabrikamFiber/OtherRepo
.
Репозиторий использует другой репозиторий в качестве подмодулы
Предположим, что один из репозиториев, проверяемых конвейером, использует другой репозиторий (в том же проекте), что и подмодул, как в нашем примере для FabrikamFiber
репозиториев и FabrikamFiberLib
репозиториев. Дополнительные сведения о том, как проверить подмодулы.
Кроме того, предположим, что вы предоставили SpaceGame
удостоверению сборки доступ на чтение этого репозитория, но извлечение FabrikamFiber
репозитория по-прежнему завершается ошибкой при проверке FabrikamFiberLib
подмодулы.
Чтобы решить эту проблему, явным образом проверьте FabrikamFiberLib
его, добавив - checkout: git://FabrikamFiber/FabrikamFiberLib
шаг перед -checkout: FabrikamFiber
этим.
Классические конвейеры выпуска
Процесс защиты доступа к репозиториям для конвейеров выпуска аналогичен тому, который предназначен для конвейеров сборки.
Чтобы проиллюстрировать необходимые действия, мы используем работающий пример. В нашем примере в проекте есть конвейер FabrikamFiberDocRelease
fabrikam-tailspin/FabrikamFiberDocRelease
выпуска. Предположим, что конвейер извлекает FabrikamFiber
репозиторий в fabrikam-tailspin/FabrikamFiber
проекте, выполняет команду для создания общедоступной документации, а затем публикует его на веб-сайте. Кроме того, представьте FabrikamFiber
, что репозиторий использует FabrikamFiberLib
репозиторий (в том же проекте) как подмодул.
Использование удостоверения сборки на основе проекта для классических конвейеров выпуска
При выполнении конвейера используется удостоверение для доступа к различным ресурсам, таким как репозитории, подключения служб, группы переменных. Конвейер может использовать два типа удостоверений: один уровень проекта и уровень коллекции. Бывший обеспечивает более высокую безопасность. Последний обеспечивает простоту использования. Дополнительные сведения о удостоверений сборки и области авторизации заданий.
Мы рекомендуем использовать удостоверения уровня проекта для запуска конвейеров. По умолчанию удостоверения уровня проекта могут получать доступ только к ресурсам в проекте, в котором они члены. Использование этого удостоверения повышает безопасность, так как уменьшает доступ, полученный злоумышленником при перехвате конвейера.
Чтобы конвейер использовал удостоверение уровня проекта, включите область авторизации задания ограничения на текущий проект для параметра конвейеров выпуска.
В нашем примере, когда этот переключатель отключен, FabrikamFiberDocRelease
конвейер выпуска может получить доступ ко всем репозиториям во всех проектах, включая FabrikamFiber
репозиторий. Если переключатель включен, FabrikamFiberDocRelease
доступ к ресурсам в fabrikam-tailspin/FabrikamFiberDocRelease
проекте может быть доступен только для доступа, поэтому FabrikamFiber
репозиторий становится недоступным.
Если вы запускаете наш пример конвейера, при включении переключателя конвейер завершается сбоем, а журналы сообщают вам. 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.
Чтобы устранить эти проблемы, выполните действия, описанные в разделе "Базовый процесс " этой статьи.
Наш пример конвейера успешно выполнен.