Share via


빠른 시작: 보안 검사 GitHub 워크플로 만들기

이 빠른 시작에서는 CodeQL GitHub 워크플로를 만들어 .NET 코드베이스에서 취약성 검색을 자동화하는 방법을 알아봅니다.

CodeQL에서 코드는 데이터로 처리됩니다. 보안 취약성, 버그 및 기타 오류는 코드에서 추출된 데이터베이스에 대해 실행할 수 있는 쿼리로 모델링됩니다.

필수 조건

  • GitHub 계정
  • .NET 소스 코드 리포지토리입니다.

워크플로 파일 만들기

GitHub 리포지토리에서 .github/workflows 디렉터리에 새 YAML 파일을 추가합니다. 워크플로의 용도를 명확하게 나타내는 의미 있는 파일 이름을 선택합니다. 자세한 내용은 워크플로 파일을 참조하세요.

Important

GitHub에서는 워크플로 컴퍼지션 파일을 .github/workflows 디렉터리 내에 배치해야 합니다.

워크플로 파일은 일반적으로 jobs.<job_id>/steps[*]을(를) 통해 하나 이상의 GitHub 작업의 컴퍼지션을 정의합니다. 자세한 내용은 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(이)라는 단일 작업이 있습니다.
    • strategy은(는) C#을 language(으)로 정의합니다.
    • github/codeql-action/init@v1 GitHub 작업은 CodeQL을 초기화하는 데 사용됩니다.
    • github/codeql-action/autobuild@v1 GitHub 작업은 .NET 프로젝트를 빌드합니다.
    • github/codeql-action/analyze@v1 GitHub 작업은 CodeQL 분석을 수행합니다.

자세한 내용은 GitHub Actions: 코드 검색 구성을 참조하세요.

워크플로 상태 배지 만들기

GitHub 리포지토리의 일반적인 명명법은 리포지토리 디렉터리의 루트에 README.md 파일을 갖는 것 입니다. 마찬가지로 다양한 워크플로에 대한 최신 상태를 보고하는 것이 좋습니다. 모든 워크플로는 README.md 파일 내에서 시각적으로 매력적인 상태 배지를 생성할 수 있습니다. 워크플로 상태 배지를 추가하려면 다음을 수행합니다.

  1. GitHub 리포지토리에서 작업 탐색 옵션을 선택합니다.

  2. 모든 리포지토리 워크플로가 왼쪽에 표시되며, 원하는 워크플로와 줄임표(...) 단추를 선택합니다.

    • 줄임표(...) 단추는 선택한 워크플로의 메뉴 옵션을 확장합니다.
  3. 상태 배지 만들기 메뉴 옵션을 선택합니다.

    GitHub: Create status badge

  4. 상태 배지 복사 Markdown 단추를 선택합니다.

    GitHub: Copy status badge Markdown

  5. Markdown을 README.md 파일에 붙여넣고, 파일을 저장하고, 변경 내용을 커밋하고 푸시합니다.

자세한 내용은 워크플로 상태 배지 추가를 참조하세요.

예제 CodeQL 워크플로 상태 배지

전달 실패 상태 없음
GitHub: CodeQL passing badge GitHub: CodeQL failing badge GitHub: CodeQL no-status badge

참고 항목

다음 단계