Démarrage rapide : Créer un workflow GitHub d’analyse de sécurité

Dans ce guide de démarrage rapide, vous allez apprendre à créer un workflow GitHub CodeQL pour automatiser la détection de vulnérabilités dans votre codebase .NET.

Dans CodeQL, le code est traité comme des données. Les vulnérabilités de sécurité, les bogues et d’autres erreurs sont modélisés en tant que requêtes qui peuvent être exécutées sur des bases de données extraites d’un code.

Prérequis

Créer un fichier de flux de travail

Dans le référentiel GitHub, ajoutez un nouveau fichier YAML au répertoire .github/workflows. Choisissez un nom de fichier explicite, qui indiquera clairement ce que le workflow est censé faire. Pour plus d’informations, consultez Fichier de flux de travail.

Important

GitHub exige que les fichiers de composition de flux de travail soient placés dans le répertoire .github/workflows .

Les fichiers de flux de travail définissent généralement une composition d’une ou plusieurs actions GitHub via jobs.<job_id>/steps[*]. Pour plus d’informations, consultez Syntaxe de workflow pour GitHub Actions.

Créez un fichier nommé codeql-analysis.yml, copiez et collez-y le contenu YML suivant :

name: "CodeQL"

on:
  push:
    branches: [main]
    paths:
    - '**.cs'
    - '**.csproj'
  pull_request:
    branches: [main]
    paths:
    - '**.cs'
    - '**.csproj'
  schedule:
    - cron: '0 8 * * 4'

jobs:
  analyze:

    name: analyze
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        language: ['csharp']

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        fetch-depth: 2

    - run: git checkout HEAD^2
      if: ${{ github.event_name == 'pull_request' }}

    - name: Initialize CodeQL
      uses: github/codeql-action/init@v1
      with:
        languages: ${{ matrix.language }}

    - name: Autobuild
      uses: github/codeql-action/autobuild@v1

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v1

Dans la composition de workflow précédente :

  • Le name: CodeQL définit le nom, « CodeQL » s’affichera dans les badges d’état de workflow.

    name: "CodeQL"
    
  • Le nœud on désigne les événements qui déclenchent le workflow :

    on:
      push:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      pull_request:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      schedule:
        - cron: '0 8 * * 4'
    
    • Se déclenche lorsqu’un push ou pull_request se produit sur la branche main où les fichiers modifiés se terminent par les extensions de fichier .cs ou .csproj.
    • En tant que tâche cron (selon une planification)—pour s’exécuter à 8:00 UTC tous les jeudis.
  • Le nœud jobs génère les étapes à suivre pour le workflow.

    jobs:
      analyze:
    
        name: analyze
        runs-on: ubuntu-latest
    
        strategy:
          fail-fast: false
          matrix:
            language: ['csharp']
    
        steps:
        - name: Checkout repository
          uses: actions/checkout@v3
          with:
            fetch-depth: 2
    
        - run: git checkout HEAD^2
          if: ${{ github.event_name == 'pull_request' }}
    
        - name: Initialize CodeQL
          uses: github/codeql-action/init@v1
          with:
            languages: ${{ matrix.language }}
    
        - name: Autobuild
          uses: github/codeql-action/autobuild@v1
    
        - name: Perform CodeQL Analysis
          uses: github/codeql-action/analyze@v1
    
    • Il existe une seule tâche, nommée analyze qui s’exécutera sur la dernière version d’Ubuntu.
    • strategy définit C# comme language.
    • GitHub Action github/codeql-action/init@v1 est utilisée pour initialiser CodeQL.
    • GitHub Action github/codeql-action/autobuild@v1 génère le projet .NET.
    • GitHub Action github/codeql-action/analyze@v1 effectue l’analyse CodeQL.

Pour plus d’informations, consultez GitHub Actions : Configurer l’analyse du code.

Créer un badge d’état de workflow

Il est courant que les référentiels GitHub aient un fichier README.md à la racine du répertoire du référentiel. De même, il est agréable de signaler l’état le plus récent pour différents flux de travail. Tous les flux de travail peuvent générer un badge d’état, qui est visuellement attrayant dans le fichier README.md. Pour ajouter le badge d’état du flux de travail :

  1. Dans le référentiel GitHub, sélectionnez l’option de navigation Actions.

  2. Tous les flux de travail du référentiel s’affichent sur le côté gauche, sélectionnez le flux de travail souhaité et le bouton points de suspension (...).

    • Le bouton points de suspension (...) développe les options de menu pour le flux de travail sélectionné.
  3. Sélectionnez l’option de menu Créer un badge d’état.

    GitHub: Create status badge

  4. Sélectionnez le bouton Copier le Markdown du badge d’état.

    GitHub: Copy status badge Markdown

  5. Collez le Markdown dans le fichier README.md, enregistrez le fichier, validez et envoyez (push) les modifications.

Pour plus d’informations, consultez Ajouter un badge d’état de workflow.

Exemple de badge d’état de workflow CodeQL

Passage Échec de Aucun état
GitHub: CodeQL passing badge GitHub: CodeQL failing badge GitHub: CodeQL no-status badge

Voir aussi

Étapes suivantes