Rozwiązywanie problemów ze skanowaniem zależności

Dowiedz się, jak rozwiązywać problemy ze skanowaniem zależności w usłudze GitHub Advanced Security dla usługi Azure DevOps.

Wymagania wstępne

Kategoria Wymagania
uprawnienia — Aby wyświetlić podsumowanie wszystkich alertów dla repozytorium: Współautor uprawnienia dla repozytorium.
— Aby odrzucić alerty w usłudze Advanced Security, wymagane są uprawnienia administratora projektu.
— Aby zarządzać uprawnieniami w ramach zabezpieczeń zaawansowanych: członek grupy Administratorzy Kolekcji Projektów lub uprawnienie Zarządzanie ustawieniami zabezpieczeń zaawansowanych ustawione na Zezwalaj.

Aby uzyskać więcej informacji na temat uprawnień zabezpieczeń zaawansowanych, zobacz Zarządzanie uprawnieniami zabezpieczeń zaawansowanych.

Alert z nieaktywnej gałęzi pozostaje widoczny lub pojawia się ponownie

90-dniowy proces oczyszczania śledzi aktywność fazy potoku, a nie wiek alertu lub gałęzi. Uruchomienie tej samej fazy w innej gałęzi może zachować aktywne konfiguracje lub ponownie je uaktywnić. W związku z tym wynik wcześniejszego wykrycia gałęzi może pojawić się bez nowego skanowania tej gałęzi.

Przejrzyj przebiegi tej samej fazy potoku w różnych gałęziach. Następnie uruchom skanowanie gałęzi, której dotyczy problem, jeśli chcesz zweryfikować jej bieżący stan. Aby zapoznać się z regułami oczyszczania i przykładem, zobacz Automatyczne czyszczenie alertów z nieaktualnych konfiguracji potoku.

Ręczna konfiguracja zadania skanowania zależności

Wskazówka

Aby uzyskać najdokładniejsze wyniki skanowania, dodaj zadanie skanowania zależności po krokach kompilacji lub kroku przywracania pakietu w potoku, który kompiluje kod, który chcesz skanować.

Dodaj zadanie Zaawansowane skanowanie zależności zabezpieczeń (AdvancedSecurity-Dependency-Scanning@1) bezpośrednio do pliku potoku YAML lub wybierz zadanie Zaawansowane skanowanie zależności zabezpieczeń z poziomu asystenta zadań.

Zrzut ekranu przedstawiający konfigurację potoku skanowania zależności dla kodu YAML.

Skanowanie zależności nie identyfikuje żadnych składników

Jeśli zadanie skanowania zależności kończy się bez oznaczania żadnych składników i nie generuje alertów dotyczących składników, które mają znane luki w zabezpieczeniach, upewnij się, że masz krok przywracania pakietu przed zadaniem AdvancedSecurity-Dependency-Scanning@1.

Na przykład w przypadku projektu języka C# (.NET Core) oto przykładowy fragment kodu 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://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/dotnet-core-cli-v2?view=azure-pipelines 
    feedsToUse: 'select'
    ...

- task: AdvancedSecurity-Dependency-Scanning@1

W przypadku projektu JavaScript poniżej przedstawiono przykładowy fragment kodu YAML:

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

- task: AdvancedSecurity-Dependency-Scanning@1

Przekroczenie limitu czasu zadania skanowania zależności

Domyślny czas uruchomienia zadania skanowania zależności przed przekroczeniem limitu czasu wynosi 300 sekund lub 5 minut. Jeśli zadanie przekracza limit czasu przed zakończeniem, możesz ustawić zmienną potoku DependencyScanning.Timeout, która oczekuje liczby całkowitej wyrażonej w sekundach, na przykład DependencyScanning.Timeout: 600. Wszystko poniżej domyślnego limitu czasu 300 sekund nie ma wpływu.

Aby użyć tej zmiennej, dodaj DependencyScanning.Timeout jako zmienną potoku:

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

Dostosowywanie katalogu skanowania

Domyślnie zadanie skanowania zależności będzie przetwarzać Agent.BuildDirectory katalog. Jeśli chcesz ograniczyć zakres skanowania do określonego folderu, możesz ustawić zmienną DependencyScanning.SourcePath potoku na dowolną ścieżkę katalogu w agencie kompilacji, którą chcesz przeanalizować. Wykonywanie wielu zadań skanowania zależności w tym samym zadaniu potoku nie jest obsługiwane. Jeśli ścieżka skanowania ma zakres do podkatalogu, nie można ponownie dodać zadania w celu skanowania innego katalogu.

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

Publikowanie wyników skanowania zależności do niezamierzonego repozytorium

Jeśli masz definicję potoku w jednym repozytorium i kod źródłowy do skanowania przez usługę GitHub Advanced Security był w innym, wyniki mogą być przetwarzane i przesyłane do niepoprawnego repozytorium, publikowanie w repozytorium zawierającym definicję potoku, a nie repozytorium kodu źródłowego.

Aby włączyć routing zamierzonych wyników, ustaw zmienną środowiskową potoku advancedsecurity.publish.repository.infer: true tak, aby określić repozytorium w celu publikacji z repozytorium w katalogu roboczym.

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"

Brak adnotacji dotyczących żądań ściągnięcia w przypadku skanowania zależności, gdy dostosowuje się miejsce publikowania wyników.

Jeśli używasz advancedsecurity.publish.repository.infer lub definiujesz alternatywę advancedsecurity.publish.repository, może być konieczne ustawienie DependencyScanning.SourcePath: $(System.DefaultWorkingDirectory), aby ścieżki plików były dokładnie określane i adnotacje dotyczące żądania ściągnięcia pojawiały się zgodnie z oczekiwaniami.

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

Scenariusz z przeszklonym szkłem do zadania kompilacji

Jeśli zadanie kompilacji blokuje skanowanie zależności i uniemożliwia powodzenie potoku, a musisz pilnie pominąć to zadanie, możesz ustawić zmienną DependencyScanning.Skip: true potoku.

Uprawnienia dla zadania skanowania zależności

Zadanie kompilacji skanowania zależności używa tożsamości potoku do wywoływania interfejsów API REST usługi Advanced Security. Domyślnie potoki w tym samym projekcie mają dostęp do pobierania alertów. Jeśli usuniesz te uprawnienia z konta usługi kompilacji lub jeśli masz konfigurację niestandardową, na przykład potok hostowany w innym projekcie niż repozytorium, przyznaj te uprawnienia ręcznie.

Udziel Advanced Security: View Alerts uprawnień do konta usługi kompilacji używanego w potoku; dla potoków o zakresie projektu jest to [Project Name] Build Service ([Organization Name]), a dla potoków o zakresie kolekcji jest to Project Collection Build Service ([Organization Name]).