クイックスタート: セキュリティ スキャンの GitHub ワークフローを作成する

このクイックスタートでは、CodeQL の GitHub ワークフローを作成し、.NET コードベースの脆弱性の検出を自動化する方法について説明します。

CodeQL では、コードがデータとして扱われます。 セキュリティの脆弱性、バグ、その他のエラーは、コードから抽出されたデータベースに対して実行できるクエリとしてモデル化されています。

前提条件

ワークフロー ファイルを作成する

GitHub リポジトリで、 .github/workflows ディレクトリに新しい YAML ファイルを追加します。 ワークフローの目的を明確に示す、わかりやすいファイル名を選択します。 詳細については、「ワークフロー ファイル」を参照してください。

重要

GitHub では、ワークフロー構成ファイルを .github/workflows ディレクトリ内に配置する必要があります。

ワークフロー ファイルにより、通常、jobs.<job_id>/steps[*] を介して 1 つ以上の GitHub Action の構成が定義されます。 詳細については、「GitHub Actions のワークフロー構文」を参照してください。

codeql-analysis.yml という名前の新しいファイルを作成し、次の YML の内容をコピーして貼り付けます。

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

上記のワークフロー構成:

  • name: CodeQL で名前が定義され、"CodeQL" がワークフローの状態バッジに表示されます。

    name: "CodeQL"
    
  • on ノードは、ワークフローをトリガーするイベントを示します。

    on:
      push:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      pull_request:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      schedule:
        - cron: '0 8 * * 4'
    
    • .cs または .csproj ファイル拡張子で終わるいずれかのファイルが変更されている main ブランチで push または pull_request が発生するとトリガーされます。
    • cron ジョブは、(スケジュールに従って) 毎週木曜日の 8:00 UTC に実行されます。
  • jobs ノードにより、ワークフローの手順が構築されます。

    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
    
    • 最新バージョンの Ubuntu 上で実行する analyze という名前のジョブが 1 つあります。
    • strategy は C# を language として定義します。
    • github/codeql-action/init@v1 GitHub Action は、CodeQL を初期化するために使用されます。
    • github/codeql-action/autobuild@v1 GitHub Action は、.NET プロジェクトをビルドします。
    • github/codeql-action/analyze@v1 GitHub Action は、CodeQL 分析を実行します。

詳細については、コード スキャンの構成に関する GitHub Actions の記事を参照してください。

ワークフロー状態バッジを作成する

GitHub リポジトリでは、通常、リポジトリ ディレクトリのルートに README.md ファイルを含めます。 同様に、さまざまなワークフローの最新の状態を報告することもお勧めします。 すべてのワークフローでは、README.md ファイル内で視覚に訴える状態バッジを生成できます。 ワークフロー状態バッジを追加するには、次の手順に従います。

  1. GitHub リポジトリで、 [アクション] ナビゲーション オプションを選択します。

  2. すべてのリポジトリ ワークフローが左側に表示されます。目的のワークフローと省略記号 ( [...] ) ボタンを選択します。

    • 省略記号 ( [...] ) ボタンをクリックすると、選択したワークフローのメニュー オプションが展開されます。
  3. [Create status badge](状態バッジの作成) メニュー オプションを選択します。

    GitHub: Create status badge

  4. [Copy status badge Markdown](状態バッジ Markdown のコピー) ボタンを選択します。

    GitHub: Copy status badge Markdown

  5. Markdown を README.md ファイルに貼り付け、ファイルを保存して、変更をコミットしてプッシュします。

詳細については、「ワークフロー状態バッジを追加する」を参照してください。

CodeQL ワークフローの状態バッジの例

成功 Failing 状態なし
GitHub: CodeQL passing badge GitHub: CodeQL failing badge GitHub: CodeQL no-status badge

関連項目

次のステップ