GitLab 취약점 보고서(Vulnerability report)는 소프트웨어 개발 프로젝트에서 기본 브랜치의 스캔 결과와 사용자가 직접 추가한 취약점 기록, 운영 환경을 스캔하면서 발견한 취약점을 두루 보여줍니다. 이 보고서는 아래 이미지와 같이 각 취약점의 심각도를 색상별로 구분해 쉽게 알려주고, 각 취약점의 설명도 한눈에 보여주죠. 애플리케이션을 개발하다 보면 프로젝트의 취약점을 다른 사람에게 공유해야 할 때도 있는데요. 취약점 보고서 화면 오른쪽 상단에 Export 버튼을 누르면 보고서를 CSV 파일로 다운로드 받아 공유할 수 있습니다.

GitLab의 취약점 보고서 화면 | 인포그랩 GitLab
GitLab의 취약점 보고서 화면

여러분 가운데에는 취약점 보고서를 CSV 파일이 아닌 다른 형식으로 공유하거나, GitLab 외 다른 도구로 보고서를 관리하고 싶은 분도 있을 텐데요. GitLab은 GitLab API를 활용하여 취약점 정보를 쉽게 쿼리하고, 취약점 보고서를 PDF 파일로 내보내는 기능을 제공합니다. 아울러 취약점 보고서를 Jira에 내보내 이 도구로도 보고서 내용을 조회하도록 지원하죠. 오늘은 GitLab의 이러한 기능을 활용하여 취약점 보고서를 가독성 좋게 변환하고, Jira에서도 이를 편리하게 확인하는 방법을 알아보겠습니다.

PDF 파일로 내보내기

저는 취약점 보고서를 PDF 파일로 내보내는 과정을 소개하기 위해 GitLab에 샘플 프로젝트를 생성했습니다. 이 프로젝트에는 프로젝트의 취약점 보고서를 쿼리한 다음, 해당 데이터에서 HTML 파일을 생성하는 파이썬 스크립트가 있고요. 프로젝트에 구성된 파이프라인은 이 스크립트를 실행하고, HTML 파일을 PDF 파일로 변환하며, 이 파일을 아티팩트로 남겨 다운로드 받도록 해줍니다. 지금부터 취약점 보고서를 PDF 파일로 내보내는 방법을 단계별로 설명하겠습니다.

프로젝트 fork 하기

먼저 GitLab의 샘플 프로젝트로 이동하여 프로젝트를 fork 합니다.

GitLab의 프로젝트 fork 화면 | 인포그랩 GitLab
GitLab의 프로젝트 fork 화면

CI/CD 변수 설정하기

이어서 파이프라인을 실행할 때 필요한 CI/CD 변수를 GitLab의 **CI/CD → Variables **페이지에서 설정합니다. 각 CI/CD 변수의 내용은 아래와 같습니다.

  • PRIVATE_TOKEN: 취약점 정보(read_api 범위)에 액세스할 권한이 있는 GitLab 프로젝트/개인 액세스 토큰입니다.
  • PROJECT_ID: GitLab의 프로젝트 ID입니다.
    GitLab Variables 페이지의 파이프라인 실행용 CI/CD 변수 목록 | 인포그랩 GitLab
    GitLab Variables 페이지의 파이프라인 실행용 CI/CD 변수 목록

파이프라인 실행→HTML 파일 생성→PDF 변환하기

CI/CD 변수를 설정한 다음, 프로젝트의 GitLab 파이프라인 페이지에서 수동으로 파이프라인을 실행합니다. 이 파이프라인은 파이썬 스크립트를 실행하고, 이 파이썬 스크립트는 취약점 보고서의 HTML 파일을 생성합니다. 아울러 파이프라인은 HTML 파일을 PDF 형식으로 변환하며 결과물을 아티팩트로 출력합니다. 이 아티팩트를 다운로드 받아 열면 아래 두번째 이미지와 같은 결과물이 나옵니다. 취약점 탐지일, 심각도와 설명, 식별자, 보안 검사 이름이 표시되어 있습니다.

취약점 보고서의 HTML 파일을 생성한 결과 | 인포그랩 GitLab
취약점 보고서의 HTML 파일을 생성한 결과

취약점 보고서를 HTML 파일에서 PDF 형식으로 변환한 결과 | 인포그랩 GitLab
취약점 보고서를 HTML 파일에서 PDF 형식으로 변환한 결과

Jira에 내보내기

GitLab과 Jira API를 사용하여 앞 사례와 비슷한 방식으로 취약점 보고서를 Jira에 내보낼 수 있는데요. 이 작업을 진행하려면 아까처럼 GitLab의 샘플 프로젝트로 이동한 다음, 프로젝트를 fork 합니다.

GitLab의 프로젝트 fork 화면 | 인포그랩 GitLab
GitLab의 프로젝트 fork 화면

CI/CD 변수 설정하기

Jira에 취약점 보고서를 내보낼 때도 파이프라인을 실행해야 합니다. 이때 필요한 GitLab과 Jira의 CI/CD 변수를 GitLab의 CI/CD → Variables에서 설정합니다. 각 CI/CD 변수의 내용은 아래와 같습니다.

  • GitLab
    • PRIVATE_TOKEN: 취약점 정보(read_api 범위)에 액세스할 권한이 있는 GitLab 프로젝트/개인 액세스 토큰입니다.
    • PROJECT_ID: GitLab의 프로젝트 ID입니다.
  • Jira
    • USER_ID: 로그인할 때 사용하는 유저 이메일 ID입니다.
    • JIRA_ACCESS_KEY: API를 사용하기 위한 Access key입니다.
    • JIRA_SERVER: Jira SaaS를 예시로 들면 https://john-jira-test-111251.atlassian.net 과 같은 URL 주소입니다.
    • BOARD_ID: 티켓을 추가할 보드의 ID입니다.
    • PROJECT_KEY: 취약점 티켓을 생성하려는 Jira의 프로젝트 key입니다.
GitLab Variables 페이지의 파이프라인 실행용 GitLab, Jira CI/CD 변수 목록 | 인포그랩 GitLab
GitLab Variables 페이지의 파이프라인 실행용 GitLab, Jira CI/CD 변수 목록

파이프라인 실행→Jira에 내보내기

CI/CD 변수를 설정한 다음, 프로젝트의 GitLab 파이프라인 페이지에서 수동으로 파이프라인을 실행합니다. 이 파이프라인은 파이썬 스크립트를 실행하고, 이 파이썬 스크립트는 취약점 보고서를 Jira 보드에 티켓으로 생성합니다. 파이프라인 실행이 완료된 뒤, Jira 페이지로 이동합니다. 아래 이미지와 같이 Jira 보드에 GitLab 취약점 보고서와 관련된 티켓이 취약점별로 여러 개 생성된 걸 확인할 수 있습니다. 각 티켓에는 해당 취약점을 발견한 GitLab 보안 검사 이름과 취약점의 심각도가 함께 표시되어 있습니다.

Jira 보드에 생성된 GitLab 취약점 보고서 관련 티켓 | 인포그랩 GitLab
Jira 보드에 생성된 GitLab 취약점 보고서 관련 티켓

맺음말

지금까지 GitLab API를 활용하여 취약점 정보를 쿼리하고, 취약점 보고서를 PDF 파일로 내보내는 기능을 알아봤습니다. 아울러 취약점 보고서를 Jira에 내보내 이 도구로도 보고서 내용을 조회하는 방법도 살펴봤습니다. 이러한 기능은 취약점 보고서를 상대방이 보기 쉬운 방식으로 제출할 때 유용합니다. 또 GitLab 외 다른 플랫폼에서도 취약점 정보를 파악하고, 문제를 관리하는 데 도움이 됩니다. 이러한 정보가 여러분이 GitLab으로 보안 문제에 효과적으로 대처하는 데 보탬이 되면 좋겠습니다.

인포그랩은 GitLab 및 DevOps에 대한 맞춤 기술 지원을 제공합니다. GitLab(Omnibus/Cloud Native Hybrid) 구축 관련한 지원이 필요하시면 문의하기 로 연락 주십시오.

참고 자료

1.How to export vulnerability reports to HTML/PDF and Jira

2.GItlab Vulnerabilities API

3.Jira REST API