Безопасные репозитории и пул-реквесты

Сервисы Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

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

Tip

Вы можете использовать ИИ, чтобы помочь с этой задачей далее в этой статье или см. включение ИИ-помощи с помощью Azure DevOps MCP Server, чтобы приступить к работе.

Угрозы и элементы управления

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

Угроза Риск Рекомендуемое управление
Прямые отправки в защищенные ветви Изменения обходят проверку и валидацию Разрешения для ветви и политики для ветви
Утверждение одним человеком Качество проверки зависит от одного человека Требовать минимальное количество рецензентов
Отсутствующий экспертный обзор конфиденциальных файлов Критически важные для безопасности изменения сливаются без участия нужных проверяющих Автоматически включенные рецензенты
Неуправляемые изменения кода Снижение доступности аудита и возможности трассировки изменений Проверка связанных рабочих элементов
Неисправный или непроверенный код Регрессии достигают общих ветвей Проверка сборки
Неразрешенные замечания проверки Известные проблемы объединяются без ответа Проверка выполнения решений по комментариям
Новые уязвимости высокой или критической степени Регрессии безопасности попадают в основную ветку через pull request GitHub проверки состояния расширенной безопасности

Prerequisites

Category Требования
доступ к проекту Член проекта.
Permissions — Просмотр кода в частных проектах: по крайней мере базовый доступ.
— Клонирование или участие в работе с кодом в частных проектах: член группы безопасности Contributors или наличие соответствующих разрешений в проекте.
— Задайте разрешения ветви или репозитория: управление разрешениями для ветви или репозитория.
— Чтобы настроить политики ветви, проверки состояния или изменить ветвь по умолчанию, требуется разрешение Изменение политик для репозитория или ветви либо членство в группе безопасности Project Administrators.
— Импорт репозитория: член группы безопасности администраторов проектов или разрешение на уровне проекта Git Создать репозиторий, установленное в Разрешить. Дополнительные сведения см. в разделе "Настройка разрешений репозитория Git".
Services Repos включено.
Tools Optional. Используйте az repos команды: Azure DevOps CLI.
Category Требования
доступ к проекту Член проекта.
Permissions — Просмотр кода: по крайней мере базовый доступ.
— Клонирование или внесение изменений в код: член группы безопасности Contributors или обладание соответствующими разрешениями в проекте.
Services Repos включено.

Перед настройкой любой политики ветви:

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

Базовые показатели безопасности для большинства команд

Для типичной рабочей ветки, например main, начните с этого базового варианта:

Область управления Рекомендуемые базовые показатели Почему
Доступ к репозиторию Ограничение доступа на запись участникам, которые активно работают в репозитории Уменьшает количество учетных записей, имеющих возможность изменять исходный код или параметры репозитория.
Разрешения для ветки Ограничение политик обхода при выполнении запросов на вытягивание и обход политик при отправке в небольшую группу администраторов Не позволяет пользователям пропускать обязательные проверки изменений, валидацию и другие меры защиты ветки.
Проверка политики Требовать по крайней мере двух рецензентов для main Повышает качество проверки и снижает риск ошибочного или предвзятого одобрения одним человеком.
Конфиденциальные файлы Автоматически включать рецензентов для путей, связанных с безопасностью, инфраструктурой или соответствием требованиям Гарантирует, что изменения в областях высокого риска получают обзор от нужных людей или команд.
Прослеживаемость Включите проверку связанных рабочих элементов Сохраняет аудиторский след между изменениями кода и работой, которая их обосновывает.
Validation Добавить проверку сборки для ветки PR Перехватывает сбои сборки и тестирования перед слиянием кода в защищенную ветвь.
Завершение проверки Включить проверку решения комментариев Помогает убедиться, что проблемы рецензентов рассматриваются до завершения.
Шлюзы уязвимостей Добавьте AdvancedSecurity/NewHighAndCritical после настройки расширенной проверки безопасности Блокирует запросы на включение изменений, которые приводят к появлению новых проблем безопасности высокого или критического уровня.

Шаг 1. Ограничение доступа к репозиторию и ветви

Начните с разрешений. Политики наиболее эффективны, если только небольшой набор пользователей может обойти их.

Просмотр разрешений репозитория

Используйте разрешения репозитория, чтобы определять, кто может читать, вносить изменения, администрировать настройки или участвовать в запросах на включение изменений. Подробный справочник по разрешениям см. в разделе "Настройка разрешений репозитория Git".

Используйте следующий шаблон:

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

Ограничить разрешения ветки

Для защищенных ветвей внимательно просмотрите и ограничьте эти разрешения:

  • Обход правил при завершении pull-запросов
  • Обход политик при отправке
  • Принудительная отправка (перезапись истории, удаление ветвей и тегов)
  • Изменение политик
  • Управление разрешениями

Используйте Задать разрешения для ветки, чтобы настроить эти параметры.

Рекомендуемый шаблон для main:

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

Important

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

Шаг 2. Требовать проверку строгого запроса на вытягивание

Требовать минимальное количество рецензентов

Используйте минимальное количество рецензентов в важных ветвях, таких как main и ветви выпуска.

Рекомендуемые параметры:

  • Минимальное число рецензентов: 2 для особо важных общих веток
  • Требовать по крайней мере одно утверждение для последней итерации
  • Разрешить запрашивателям утвердить свои собственные изменения: Off
  • Запретить пользователю, последним отправившему изменения, утверждать собственные изменения: On когда требуется более строгое разделение обязанностей

Настройка минимальной политики рецензента

  1. Перейдите к параметрам проекта>репозиториям.
  2. Выберите репозиторий и выберите защищенную ветвь.
  3. В разделе Политики включите параметр Требовать минимальное количество проверяющих.
  4. Задайте параметры рецензента для ветви.

Проверьте результат:

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

Сведения о политике см. в разделе "Политики ветви" и "Параметры".

Автоматическое включение рецензентов для конфиденциальных файлов

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

Подходящие кандидаты включают:

  • код развертывания и инфраструктуры
  • код проверки подлинности и авторизации
  • Папки, критичные для соответствия требованиям
  • общие шаблоны конвейеров

Настройка политики автоматически включенных рецензентов

  1. Перейдите в Настройки проекта>Репозитории.
  2. Откройте целевую ветвь в разделе Политики ветвей.
  3. Добавьте политику автоматически включенных рецензентов .
  4. Добавьте необходимых пользователей или групп.
  5. Выберите, является ли политика обязательной или необязательной.
  6. Добавьте фильтры путей для файлов или папок, требующих их проверки.
  7. Запретить запрашивателям утвердить свои собственные изменения.

Проверьте результат:

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

Дополнительные сведения см. в разделе "Автоматическое включение рецензентов кода".

Шаг 3. Применение трассировки и проверки

Проверять наличие связанных рабочих элементов

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

Настройка политики связанных рабочих элементов

  1. Перейдите в Настройки проекта>Репозитории.
  2. Откройте целевую ветвь в разделе Политики ветвей.
  3. Включите Проверка связанных рабочих элементов.
  4. Выберите Обязательно, если перед завершением запросы на включение изменений должны иметь связанные рабочие задачи.

Проверьте результат: запросы на включение изменений без связанных рабочих элементов отображаются как не соответствующие политике.

Дополнительные сведения см. в разделе "Проверка связанных рабочих элементов".

Проверка сборки

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

Important

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

Рекомендуемые параметры защищенных ветвей:

  • Триггер: автоматический
  • Требование политики: Required
  • Срок действия сборки: выберите значение, соответствующее частоте изменений защищенной ветви.

Настройка политики проверки сборки

  1. Откройте целевую ветвь в разделе Политики ветвей.
  2. Добавьте политику проверки сборок.
  3. Выберите конвейер сборки.
  4. Выберите, требуется ли политика.
  5. Сохраните политику.

Проверьте результат:

  • При открытии или обновлении запроса на включение изменений в очередь ставится настроенная проверочная сборка.
  • Запрос на включение изменений не может быть завершён, пока обязательная сборка не завершится успешно.

Дополнительные сведения см. в разделе "Проверка сборки".

Проверка устранения комментария

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

Настройка политики разрешения комментариев

  1. Откройте целевую ветвь в разделе политика ветвей.
  2. Включите проверку разрешения комментариев.
  3. Выберите "Обязательно", если неразрешенные комментарии должны блокировать завершение.

Проверьте результат: pull request’ы с неразрешёнными обсуждениями будут оставаться заблокированными, пока рецензенты или авторы не пометят цепочки обсуждений как решённые.

Дополнительные сведения см. в разделе "Проверка разрешения комментариев".

Ограничение типов слияний

Используйте Ограничение типов слияния в качестве параметра управления историей репозитория. Эта политика помогает стандартизировать, как коммиты в pull request выглядят после слияния, но не является прямой мерой безопасности.

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

Пример использования:

  • Требовать сквош-слияния для недолговечных веток функций.
  • Запретите rebase или squash для веток, в которых ваш процесс аудита предполагает коммиты слияния.

Соображения по вопросам аудита и прослеживаемости:

  • Squash создает более чистую историю целевой ветви, но при слиянии объединяет несколько коммитов исходной ветви в один коммит.
  • Если ваша модель аудита зависит от сохранения точной последовательности коммитов из ветки функциональности, предпочитайте стратегии с коммитом слияния вместо squash.
  • Поддерживайте политику в соответствии с тем, как разработчики проверяют и отлаживают историю в запросах на включение изменений и в целевой ветви.

Пример CLI для Azure DevOps:

az repos policy merge-strategy create \
  --blocking true \
  --branch main \
  --enabled true \
  --repository-id <repository-id> \
  --allow-no-fast-forward true \
  --allow-rebase false \
  --allow-rebase-merge false \
  --allow-squash false

Дополнительные сведения см. в разделе "Ограничение типов слияний".

Шаг 4. Добавление проверок состояния расширенной безопасности GitHub

Проверки состояния в GitHub Advanced Security помогают предотвратить слияние запросов на включение, если были обнаружены новые критические уязвимости или уязвимости высокой степени серьёзности.

Important

GitHub Расширенная безопасность для Azure DevOps доступна только для служб Azure DevOps и только для репозиториев кода Git.

Перед добавлением политики проверки состояния:

  1. Включите GitHub Advanced Security для репозитория.
  2. Настройте необходимые задачи конвейера расширенной безопасности.
  3. Добавьте политику проверки сборки для ветки запроса на включение изменений.
  4. Включите Wait for Processing: true для выполнения описанных задач расширенной безопасности.
  5. Успешно выполните конвейер по крайней мере один раз, чтобы проверка статуса появилась в списке «Статус для проверки».

Начните с AdvancedSecurity/NewHighAndCritical, если в репозитории уже есть неустранённые предупреждения. После сокращения отставания рассмотрите возможность перехода на AdvancedSecurity/AllHighAndCritical.

Путь к браузеру:

  1. Откройте целевую ветвь в разделе политика ветвей.
  2. В разделе "Проверки состояния" выберите +.
  3. Задайте состояние для проверки в значение AdvancedSecurity/NewHighAndCritical.
  4. Оставьте дополнительные параметры по умолчанию.
  5. Сохраните политику.

Расширенные проверки состояния безопасности настраиваются из проверок состояния в браузере после включения расширенной проверки безопасности и проверки сборки для репозитория. Сведения о требуемой настройке см. в разделе "Настройка проверок состояния запроса на вытягивание".

Проверьте результат:

  • Pull request'ы с новыми проблемами высокого или критического уровня отмечаются как не прошедшие проверку состояния.
  • Политика ветки не позволяет завершить операцию до тех пор, пока замечания не будут устранены или пока политика не будет сделана необязательной.

Дополнительные сведения о настройке см. в следующей статье:

Примеры планов развертывания

Базовый уровень репозитория с низкой чувствительностью

Если репозиторий имеет более низкую чувствительность и требуется управляемая начальная точка:

  1. Ограничить разрешения на обход ветки в main.
  2. Требовать по крайней мере одного или двух рецензентов.
  3. Включите связанные рабочие элементы.
  4. Добавьте проверку сборки.
  5. Включите разрешение комментариев.

Репозиторий с высокой конфиденциальностью

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

  1. Ограничение разрешений на обход политики администраторам.
  2. Требовать двух рецензентов для main.
  3. Добавьте автоматически включенных рецензентов для защищенных путей.
  4. Требовать наличия связанных рабочих элементов.
  5. Добавьте проверку сборки.
  6. Добавьте проверки состояния GitHub Advanced Security, если вы используете Azure DevOps Services.

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

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

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

Используйте такие подсказки, как приведённые ниже, чтобы начать работу:

Goal Пример запроса
Проверка защиты ветвей Summarize the branch policies on main and explain which ones are required.
Определение риска обхода Find users or groups that can bypass branch policies on the main branch.
Проверить охват рецензированием List the reviewer and comment-resolution policies configured for this repository.
Проверьте отслеживание работы Check whether pull requests into main require linked work items.
Проверка шлюзов проверки Show the build validation policy for main and explain what pipeline it uses.
Изучение проверок состояния безопасности List the status checks configured for main and tell me whether GitHub Advanced Security is one of them.
Спланируйте более безопасный базовый уровень Recommend a secure branch policy baseline for this repository based on its current settings.

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

Советы по устранению неполадок

Проблема. Вероятно, причина Рекомендуемое действие
Параметр политики ветви не отображается У вас нет разрешений на изменение политик или не выбрана ветвь Подтверждение разрешений на доступ к филиалам и политики
Запросы на включение изменений по-прежнему могут быть объединены без соблюдения требований политики У пользователя есть разрешения обхода Проверка политик обхода при выполнении запросов на вытягивание и обхода политик при отправке
Обязательные рецензенты не добавляются Фильтр пути политики рецензента не соответствует измененным файлам Повторно проверьте фильтры путей и личности рецензентов
Проверка состояния расширенной безопасности недоступна Репозиторий не завершил успешное выполнение сканирования с необходимыми задачами Проверьте проверку сборки, задачи конвейера и Wait for Processing параметры
Политика связанных рабочих элементов не блокирует Политика является необязательной, а не обязательной Повторно откройте политику ветви и подтвердите уровень требования