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


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

Узнайте, как устранять неполадки проверки зависимостей в GitHub Advanced Security для Azure DevOps.

Предпосылки

Категория Требования
Разрешения — Чтобы просмотреть сводку всех оповещений для репозитория, нужны разрешения участника для репозитория.
— Чтобы отклонить оповещения в Advanced Security: администратор проекта разрешения.
— Для управления разрешениями в Расширенной безопасности: быть членом группы Администраторов коллекции проектов или иметь разрешение Расширенная безопасность: управление параметрами установлено на Разрешить.

Дополнительные сведения о разрешениях расширенной безопасности см. в разделе Управление разрешениями расширенной безопасности.

Настройка задачи проверки зависимостей вручную

Подсказка

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

Добавьте задачу "Расширенная проверка зависимостей безопасности" (AdvancedSecurity-Dependency-Scanning@1) непосредственно в файл конвейера YAML или выберите задачу "Расширенная проверка зависимостей безопасности" в помощнике по задачам.

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

Проверка зависимостей без идентификации компонентов

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

Например, для проекта C# (.NET Core) ниже приведен пример фрагмента КОДА YAML:

- task: DotNetCoreCLI@2
  displayName: 'Restore NuGet packages'
  inputs:
    command: 'restore'
    projects: '**/*.csproj'

    # If you are using a private package feed such as Azure Artifacts, you will need additional variables.
    # For more information, see https://dori-uw-1.kuma-moon.com/en-us/azure/devops/pipelines/tasks/reference/dotnet-core-cli-v2?view=azure-pipelines 
    feedsToUse: 'select'
    ...

- task: AdvancedSecurity-Dependency-Scanning@1

Для проекта JavaScript вот пример фрагмента кода YAML:

- task: Npm@1
  displayName: 'npm install'
  inputs:
    command: 'install'
    workingDir: '$(System.DefaultWorkingDirectory)'

- task: AdvancedSecurity-Dependency-Scanning@1

Время ожидания задачи проверки зависимостей

Время проверки зависимостей по умолчанию до истечения времени ожидания составляет 300 секунд или 5 минут. Если задача истекает до завершения, можно задать переменную DependencyScanning.Timeout в конвейере, которая ожидает целое число, представляющее секунды, например DependencyScanning.Timeout: 600. Все значения, меньшие чем время ожидания по умолчанию в 300 секунд, не оказывают влияния.

Чтобы использовать эту переменную, добавьте DependencyScanning.Timeout в качестве переменной конвейера:

- task: AdvancedSecurity-Dependency-Scanning@1
  env:
    DependencyScanning.Timeout: 600

Настройка каталога сканирования

По умолчанию задача проверки зависимостей обрабатывает Agent.BuildDirectory каталог. Если вы хотите ограничить сканирование определенной папкой, можно задать переменную DependencyScanning.SourcePath конвейера для любого пути к файлу каталога в агенте сборки, который требуется проанализировать. Несколько выполнений задач проверки зависимостей в одном задании конвейера не поддерживаются. Если путь сканирования ограничен подкаталогом, невозможно повторно добавить задачу для сканирования другого каталога.

- task: AdvancedSecurity-Dependency-Scanning@1
  env:
    DependencyScanning.SourcePath: scan/code/path

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

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

Чтобы включить заданную маршрутизацию результатов, задайте переменную среды конвейера advancedsecurity.publish.repository.infer: true, чтобы определить репозиторий для публикации из рабочего каталога.

trigger:
  - main

resources:
  repositories:
    # PipelineRepo: The repository containing the pipeline definition.
    # This is optional and only needed if you plan to reference files or scripts from this repo.
    - repository: PipelineRepo
      type: git
      name: DevOpsPipelineRepo
      ref: refs/heads/main
      trigger:
        - main
    # SourceRepo: The repository where scanning and publishing will occur.
    - repository: SourceRepo
      type: git
      name: code-to-analyze-repo
      ref: refs/heads/main
      trigger:
        - main

jobs:
  - job: "DependencyScan"
    displayName: "Dependency Scanning with Inferred Publishing"
    variables:
      # Enable repository inference
      advancedsecurity.publish.repository.infer: true
    steps:
      # Checkout the SourceRepo
      - checkout: SourceRepo

      # Perform Dependency Scanning
      - task: AdvancedSecurity-Dependency-Scanning@1
        displayName: "Analyze Dependencies for Vulnerabilities"

Отсутствие аннотаций запроса на вытягивание для сканирования зависимостей при изменении места публикации результатов.

Если вы используете advancedsecurity.publish.repository.infer или определяете альтернативу advancedsecurity.publish.repository, может потребоваться задать DependencyScanning.SourcePath: $(System.DefaultWorkingDirectory) , чтобы пути к файлам были точно определены, чтобы заметка запроса на вытягивание отображалась должным образом.

- task: AdvancedSecurity-Dependency-Scanning@1
  env:
    DependencyScanning.SourcePath: $(System.DefaultWorkingDirectory)

Сценарий чрезвычайных мер для задачи сборки

Если задача проверки зависимостей блокирует успешное выполнение конвейера и необходимо срочно пропустить задачу сборки, можно задать переменную DependencyScanning.Skip: trueконвейера.

Разрешения на сканирование зависимостей

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

Предоставьте разрешение для учетной записи службы сборки, используемой в вашем конвейере: для конвейеров с областью проекта — Advanced Security: View Alerts, а для конвейеров с областью коллекции — [Project Name] Build Service ([Organization Name]).