Введение
Действие проверки зависимостей сканирует запросы на вытягивание изменений зависимостей и вызывает ошибку, если какие-либо новые зависимости имеют известные уязвимости. После установки, если выполнение рабочего процесса помечается как обязательное, запросы на вытягивание, вводящие известные уязвимые пакеты, будут заблокированы для объединения.
В этом руководстве показано, как добавить три очень распространенные настройки: сбой сборки на основе уровня серьезности уязвимостей, лицензии зависимостей и области.
Необходимые компоненты
В этом руководстве предполагается, что:
- Граф зависимостей включен для репозитория. Граф зависимостей включен по умолчанию для общедоступных репозиториев, и его можно включить для частных репозиториев. Дополнительные сведения см. в разделе "Настройка графа зависимостей".
- GitHub Actions включен для репозитория. Дополнительные сведения см. в разделе "Управление параметрами GitHub Actions для репозитория".
Шаг 1. Добавление действия проверки зависимостей
На этом шаге мы добавим рабочий процесс проверки зависимостей в репозиторий.
-
На GitHubперейдите на главную страницу репозитория.
-
Под именем репозитория щелкните Actions.
-
В разделе "Начало работы с GitHub Actions" найдите категорию "Безопасность", а затем нажмите кнопку "Просмотреть все".
-
Найдите "Проверка зависимостей", а затем нажмите кнопку "Настроить". Кроме того, выполните поиск по запросу "Проверка зависимостей" с помощью строки поиска.
-
Откроется файл
dependency-review.yml
рабочего процесса проверки зависимостей GitHub Actions рабочего процесса . Он должен содержать следующее:YAML name: 'Dependency review' on: pull_request: branches: [ "main" ] permissions: contents: read jobs: dependency-review: runs-on: ubuntu-latest steps: - name: 'Checkout repository' uses: actions/checkout@v4 - name: 'Dependency Review' uses: actions/dependency-review-action@v4
name: 'Dependency review' on: pull_request: branches: [ "main" ] permissions: contents: read jobs: dependency-review: runs-on: ubuntu-latest steps: - name: 'Checkout repository' uses: actions/checkout@v4 - name: 'Dependency Review' uses: actions/dependency-review-action@v4
Шаг 2. Изменение серьезности
Вы можете заблокировать код, содержащий уязвимые зависимости, когда-либо объединяемые, задав требуемый параметр Действие проверки зависимостей. Однако следует отметить, что блокировка уязвимостей с низким риском может оказаться слишком ограничивающей в некоторых обстоятельствах. На этом шаге мы изменим серьезность уязвимости, которая приведет к сбою сборки с параметром fail-on-severity
.
-
fail-on-severity
Добавьте параметр в конецdependency-review.yml
файла:YAML - name: 'Dependency Review' uses: actions/dependency-review-action@v4 with: fail-on-severity: moderate
- name: 'Dependency Review' uses: actions/dependency-review-action@v4 with: fail-on-severity: moderate
Шаг 3. Добавление лицензий для блокировки
Уязвимости не являются единственной причиной, по которой может потребоваться заблокировать зависимость. Если у вашей организации есть ограничения на то, какие лицензии можно использовать, можно использовать проверку зависимостей для применения этих политик с deny-licenses
помощью параметра. На этом шаге мы добавим настройку, которая будет прерывать сборку, если запрос на вытягивание представляет зависимость, содержащую лицензию LGPL-2.0 или BSD-2-Clause.
-
deny-licenses
Добавьте параметр в конецdependency-review.yml
файла:YAML - name: 'Dependency Review' uses: actions/dependency-review-action@v4 with: fail-on-severity: moderate deny-licenses: LGPL-2.0, BSD-2-Clause
- name: 'Dependency Review' uses: actions/dependency-review-action@v4 with: fail-on-severity: moderate deny-licenses: LGPL-2.0, BSD-2-Clause
Шаг 4. Добавление областей
Наконец, мы будем использовать fail-on-scopes
этот параметр, чтобы предотвратить слияние уязвимых зависимостей с определенными средами развертывания, в этом случае среда разработки.
-
fail-on-scopes
Добавьте параметр в конецdependency-review.yml
файла:YAML - name: 'Dependency Review' uses: actions/dependency-review-action@v4 with: fail-on-severity: moderate deny-licenses: LGPL-2.0, BSD-2-Clause fail-on-scopes: development
- name: 'Dependency Review' uses: actions/dependency-review-action@v4 with: fail-on-severity: moderate deny-licenses: LGPL-2.0, BSD-2-Clause fail-on-scopes: development
Шаг 5. Проверка конфигурации
Теперь dependency-review.yml
файл должен выглядеть следующим образом:
name: 'Dependency Review' on: [pull_request] permissions: contents: read jobs: dependency-review: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' uses: actions/checkout@v4 - name: Dependency Review uses: actions/dependency-review-action@v4 with: fail-on-severity: moderate deny-licenses: LGPL-2.0, BSD-2-Clause fail-on-scopes: development
name: 'Dependency Review'
on: [pull_request]
permissions:
contents: read
jobs:
dependency-review:
runs-on: ubuntu-latest
steps:
- name: 'Checkout Repository'
uses: actions/checkout@v4
- name: Dependency Review
uses: actions/dependency-review-action@v4
with:
fail-on-severity: moderate
deny-licenses: LGPL-2.0, BSD-2-Clause
fail-on-scopes: development
Эту конфигурацию можно использовать в качестве шаблона для собственных пользовательских конфигураций.
Дополнительные сведения обо всех возможных параметрах настройки см . в документации по действию проверки зависимостей в README .
Рекомендации
При настройке конфигурации проверки зависимостей можно выполнить некоторые рекомендации.
-
Выберите списки блокировок по спискам разрешений. Более удобно компилировать список "действительно плохих" зависимостей, которые вы хотите заблокировать, чем создать включающий список всех библиотек, которые вы хотите разрешить.
-
Выберите блокировку лицензий вместо указания разрешенных лицензий. Существует множество лицензий, поэтому обычно это более удобно, чтобы исключить те, которые вы знаете, несовместимы с текущими лицензиями, чем для компиляции полного списка совместимых лицензий.
-
Выберите
fail-on-severity
. Сбой на основе серьезности уязвимости — это хороший способ сбалансировать потребность в безопасности с необходимостью создания низкой нагрузки для разработчиков.