Azure DevOps의 GitHub 고급 보안?

GitHub Advanced Security는 이제 타사 CI 파이프라인의 취약점에 대한 코드를 분석하는 기능을 지원하지만 이전에는 이 기능을 GitHub Actions에서만 사용할 수 있었습니다.

이 게시물(및 비디오)에서는 코드 스캔을 사용하여 YAML 편집기를 사용하여 Azure DevOps 파이프라인에서 GitHub 리포지토리를 스캔하는 방법을 보여줍니다.

소개



이전에 언급했듯이 표준 "워크플로 설정"환경과 함께 기본 GitHub Actions 워크플로를 활용하는 대신 오늘은 Azure DevOps 파이프라인을 사용하여 GitHub 리포지토리에 있는 코드를 스캔할 것입니다.

코드 스캔을 위한 GitHub 고급 보안을 Azure DevOps와 통합하기 위해 수행해야 하는 단계를 살펴보겠습니다.



내가 사용하고 있는 Azure Pipelines 에이전트는 일시적이므로 Hosted Agent를 사용하고 있으므로 각 파이프라인 실행에 CodeQL 패키지를 설치해야 합니다. 자체 호스팅 에이전트를 사용하는 경우 대신 패키지를 사전 설치하여 시간과 컴퓨팅 리소스를 절약하는 것이 좋습니다.

동영상



평소와 같이 시각적인 학습자이거나 단순히 읽기보다 보고 듣는 것을 선호하는 경우 여기에서 전체 설명과 데모가 포함된 비디오를 볼 수 있습니다. 공정하게 말하면 이 게시물보다 훨씬 더 완벽합니다.



( Link to the video: https://youtu.be/ZgR90vWpBQw )

독서를 선호한다면 음... 계속합시다 :)

CodeQL 다운로드



단계 목록에서 본 것처럼 가장 먼저 해야 할 일은 내 에이전트에서 최신 CodeQL 종속성을 다운로드하는 것입니다.

- script: |
    wget https://github.com/github/codeql-action/releases/latest/download/codeql-runner-linux
    chmod +x codeql-runner-linux
  displayName: 'Get latest CodeQL package. Install on Agent.'


이 파이프라인은 Linux에서 실행되므로 wget을 사용하고 최신 Linux 릴리스를 대상으로 지정하므로 필요한 모든 파일을 내 디렉터리로 다운로드할 수 있습니다. 또한 다운로드한 파일을 실행하기 전에 권한을 변경합니다.

CodeQL 승인



다음으로 파이프라인에 리포지토리에 대한 전체 액세스 권한을 부여해야 합니다. 이렇게 하려면 GitHub 개인 액세스 토큰을 생성해야 합니다. ( ).

For private repositories the token must have the whole repo scope. For public repos, instead, the token needs only the public_repo and repo:security_events scopes.



그런 다음 PAT를 파이프라인의 변수로 저장해야 합니다. 비밀로 설정하는 것을 잊지 마십시오. 보안을 위해 Azure KeyVault를 사용하고 PAT를 저장하고 Azure Pipelines에서 참조하는 것이 좋습니다.

이제 Azure Pipelines에 저장된 GitHub 개인 액세스 토큰이 있으므로 CodeQL을 초기화할 수 있습니다.

CodeQL 초기화



CodeQL 실행 파일을 초기화하고 감지된 언어에 대한 CodeQL 데이터베이스를 생성해 보겠습니다.

다시 한 번 작업 흐름에 스크립트 단계를 추가해야 합니다.

- script: |
    ./codeql-runner-linux init \
    --repository YOUR_REPO_NAME \
    --github-url https://github.com \
    --github-auth $GITHUB_PAT \
    --config-file .github/codeql/codeql-config.yml 
  displayName: 'Initialize CodeQL Executable and create a CodeQL database'

YOUR_REPO_NAME 자리 표시자를 스캔하려는 리포지토리의 전체 이름으로 바꿉니다(예: "n3wt0n/myrepo").

또한 $GITHUB_PAT는 PAT를 저장한 변수의 이름입니다.

.Net, Java 등과 같은 컴파일된 언어를 분석하려면 CodeQL 초기화 단계 이후, 분석 단계 이전에 빌드를 실행해야 합니다.

실제로 init 단계는 CodeQL이 빌드도 모니터링할 수 있도록 코드를 빌드하기 전에 실행해야 하는 스크립트를 생성합니다.

레포 분석



마지막으로 CodeQL 러너 데이터베이스를 채우고 분석하고 결과를 GitHub에 업로드하려고 합니다.

최종 스크립트를 추가해 보겠습니다.

- script: |
    ./codeql-runner-linux analyze \
    --repository YOUR_REPO_NAME \
    --github-url https://github.com \
    --github-auth $GITHUB_PAT \
    --commit $(Build.SourceVersion) \
    --ref $(Build.SourceBranch)
  displayName: 'Populate the CodeQL runner databases, analyze them, and upload the results to GitHub.'


다시 한 번 YOUR_REPO_NAME 자리 표시자를 스캔하려는 저장소의 전체 이름으로 바꿉니다.

여기에는 2개의 매개변수가 더 있습니다.

  • --commit: 스캔하려는 커밋의 SHA입니다
  • .

  • --ref: 스캔하려는 분기의 정규화된 ref 이름입니다(예: refs/heads/master)

  • 제 경우에는 변수에서 두 매개변수를 모두 가져오는데 이것이 제가 권장하는 접근 방식입니다.

    결론



    그리고 그것은 기본적으로 그것입니다.

    이제 파이프라인을 실행할 수 있으며 성공하면 코드 스캔 아래의 GitHub 리포지토리 보안 탭으로 다시 이동하여 스캔 결과를 볼 수 있습니다.

    Check the video for the full explanation and demo

    이 경험에 대해 어떻게 생각하는지 아래 댓글 섹션에 알려주세요. 저에게는 물론 셸 스크립트를 작성하는 대신 기본 Azure Pipelines 작업을 사용할 수 있다면 더 좋겠지만 당분간은 이 작업도 꽤 잘 작동합니다.

    좋은 웹페이지 즐겨찾기