보안 메트릭 및 KPI
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
이 문서는 GitLab 보안 메트릭 및 KPI 솔루션 컴포넌트의 설치, 구성 및 사용 가이드를 설명합니다. 이 솔루션은 GraphQL API를 사용하여 GitLab 프로젝트 또는 그룹에서 취약점 데이터를 내보내고, HTTP Event Collector(HEC)를 통해 Splunk로 전송하며, 보안 메트릭 시각화를 위한 기본 제공 대시보드를 포함합니다.
이 문서는 GitLab 보안 메트릭 및 KPI 솔루션 컴포넌트의 설치, 구성 및 사용 가이드를 설명합니다. 이 보안 솔루션 컴포넌트는 비즈니스 단위, 시간 범위, 취약점 심각도 및 보안 유형별로 볼 수 있는 메트릭과 KPI를 제공합니다. PDF 문서를 통해 월별 또는 분기별 보안 현황의 스냅샷을 제공할 수 있습니다. 데이터는 Splunk의 대시보드를 사용하여 시각화됩니다.

이 솔루션은 GraphQL API를 사용하여 GitLab 프로젝트 또는 그룹에서 취약점 데이터를 내보내고, HTTP Event Collector(HEC)를 통해 Splunk로 전송하며, 보안 메트릭 시각화를 위한 기본 제공 대시보드를 포함합니다. 내보내기 프로세스는 예약된 GitLab CI/CD 파이프라인으로 실행되도록 설계되었습니다.
시작하기#
솔루션 컴포넌트 다운로드#
- 계정 팀에서 초대 코드를 받으세요.
- 초대 코드를 사용하여 솔루션 컴포넌트 웹스토어에서 솔루션 컴포넌트를 다운로드하세요.
솔루션 컴포넌트 프로젝트 설정#
- 이 내보내기를 호스팅할 새 GitLab 프로젝트를 만드세요.
- 제공된 파일을 프로젝트에 복사하세요:
export_vulns.pysend_to_splunk.pyrequirements.txt.gitlab-ci.yml
- 프로젝트 설정에서 필요한 CI/CD 변수를 구성하세요.
- 파이프라인 일정을 설정하세요 (예: 일별 또는 주별).
작동 방식#
솔루션은 두 가지 주요 컴포넌트로 구성됩니다:
- GitLab 보안 대시보드에서 데이터를 가져오는 취약점 내보내기
- 내보낸 데이터를 처리하여 Splunk HEC로 전송하는 Splunk 수집기
파이프라인은 두 단계로 실행됩니다:
extract: 취약점을 가져와 CSV로 저장ingest: 취약점 데이터를 Splunk로 전송
구성#
필수 CI/CD 변수#
| 변수 | 설명 | 예시 값 |
|---|---|---|
SCOPE |
취약점 스캐닝의 대상 범위 | group:security/appsec 또는 security/my-project |
GRAPHQL_API_TOKEN |
API 액세스 권한이 있는 GitLab 개인 액세스 토큰 | glpat-XXXXXXXXXXXXXXXX |
GRAPHQL_API_URL |
GitLab GraphQL API URL | https://gitlab.com/api/graphql |
SPLUNK_HEC_TOKEN |
Splunk HTTP Event Collector 토큰 | 11111111-2222-3333-4444-555555555555 |
SPLUNK_HEC_URL |
Splunk HEC 엔드포인트 URL | https://splunk.company.com:8088/services/collector |
선택적 CI/CD 변수#
| 변수 | 설명 | 예시 값 | 기본값 |
|---|---|---|---|
SEVERITY_FILTER |
심각도 수준의 쉼표로 구분된 목록 | CRITICAL,HIGH,MEDIUM |
모든 심각도 |
VULN_TIME_WINDOW |
취약점 수집의 시간 창 | 24h, 7d, 또는 all |
24h |
범위 구성#
SCOPE 변수는 스캔할 프로젝트 또는 그룹을 결정합니다:
- 프로젝트의 경우:
mygroup/myproject - 그룹의 경우:
group:mygroup/subgroup - 전체 인스턴스의 경우:
instance
심각도 필터 예시#
유효한 심각도 수준:
CRITICALHIGHMEDIUMLOWUNKNOWN
예시 조합:
CRITICAL,HIGHCRITICAL,HIGH,MEDIUM- 모든 심각도를 포함하려면 비워두세요
시간 창 구성#
VULN_TIME_WINDOW 변수는 취약점을 얼마나 과거까지 조회할지를 제어합니다:
- 형식:
<숫자><단위>여기서:숫자: 양의 정수단위: 시간은h, 일은d
- 예시:
24h: 지난 24시간7h: 지난 7시간15d: 지난 15일30d: 지난 30일all: 모든 취약점 (첫 실행에 유용)
기본값: 24h
예시 파이프라인 구성:
# 12시간 창의 경우
variables:
VULN_TIME_WINDOW: "12h"
# 3일 창의 경우
variables:
VULN_TIME_WINDOW: "3d"
# 모든 취약점의 경우
variables:
VULN_TIME_WINDOW: "all"
선택한 창을 기반으로 파이프라인을 예약하세요. 예를 들어:
- 12h의 경우: 하루에 두 번 예약
- 3d의 경우: 3일마다 예약
- 취약점이 누락되지 않도록 예약에 약간의 겹침을 추가하세요
파이프라인 설정#
-
첫 실행:
- 모든 이전 취약점을 수집하기 위해
VULN_TIME_WINDOW: "all"설정 - 파이프라인 한 번 실행
- 모든 이전 취약점을 수집하기 위해
-
지속적인 수집:
VULN_TIME_WINDOW를 원하는 창으로 설정 (24h또는7d)- 파이프라인 일정 설정:
24h의 경우: 매일 예약7d의 경우: 매주 예약
Splunk 통합#
스크립트는 취약점을 이벤트로 Splunk에 전송합니다.
인덱스 구성#
- Splunk에서
gitlab_vulns라는 새 인덱스를 만드세요. - HEC 토큰을 만들 때:
- 기본 인덱스를
gitlab_vulns로 설정하세요 (이 인덱스는 제공된 Splunk 대시보드의 기본 검색에서 참조됩니다) - 토큰이 이 인덱스에 쓸 수 있는 권한을 갖도록 하세요
- 토큰에 이벤트 데이터가 JSON으로 올바르게 파싱될 수 있도록 하는 sourcetype이 있는지 확인하세요
- 기본 인덱스를
각 이벤트에는 다음이 포함됩니다:
- 감지 시간
- 취약점 제목 및 설명
- 심각도 수준
- 스캐너 정보
- 프로젝트 세부 정보
- 프로젝트와 취약점 모두의 URL
대시보드 설정#
제공된 대시보드는 다음 시각화를 통해 GitLab 취약점 데이터에 대한 포괄적인 가시성을 제공합니다:
- 심각(Critical) 및 높음(High) 취약점에 대한 P95 Age 메트릭 (방사형 게이지)
- 나이 버킷(0-30일, 31-90일, 91-180일, 180일 이상)에 걸쳐 심각 및 높음 취약점의 분포를 보여주는 에이징 분석
- 발생 횟수를 포함한 상위 10개의 가장 빈번한 CVE
- 프로젝트 경로 및 심각도별 취약점 분포
- 모든 메트릭은 비즈니스 단위 및 시간 범위별로 필터링 가능
대시보드를 설정하려면:
-
비즈니스 단위 매핑:
-
두 열로 구성된 CSV 파일을 만드세요:
project_url,business_unit -
각 GitLab 프로젝트 URL을 해당 비즈니스 단위에 매핑하세요.
-
파일을 Splunk에 조회 테이블로 업로드하세요:
- Settings > Lookups > Lookup table files로 이동하세요.
- New Lookup Table File을 선택하세요.
- CSV 파일을 업로드하세요.
- Destination filename을
business_unit_mapping.csv로 설정하세요. - 권한을 구성하세요:
<splunk_dir>/etc/apps/search/lookups/business_unit_mapping.csv라는 행을 찾으세요.- Permissions을 선택하세요.
- 권한을 다음 중 하나로 설정하세요:
- 인스턴스 전체 액세스를 위해 Global로 설정.
- 필요에 따라 특정 앱 또는 역할과 공유.
- Save를 선택하세요.
-
-
대시보드 설치:
- 제공된
vuln_metrics_dashboard.xml파일을 저장하세요. - Splunk에서:
- Search 앱으로 이동하세요.
- Dashboards > Create New Dashboard를 클릭하세요.
- 편집 보기에서 Source를 선택하세요.
- 기본 XML을
vuln_metrics_dashboard.xml의 내용으로 교체하세요. - 대시보드를 저장하세요.
- 제공된
출력 형식#
중간 CSV 파일에는 다음이 포함됩니다:
detectedAt: 감지 타임스탬프title: 취약점 제목severity: 심각도 수준primaryIdentifier: 취약점 식별자exporter: 스캐너 이름projectPath: GitLab 프로젝트 경로projectUrl: 프로젝트 URLdescription: 취약점 설명webUrl: 취약점 세부 정보 URL
오류 처리#
솔루션에는 다음이 포함됩니다:
- 지수 백오프를 사용한 속도 제한 처리
- Splunk 수집을 위한 배치 처리
- 적절한 오류 보고
- 타임아웃 처리
- UTF-8 인코딩 지원
모범 사례#
-
토큰 권한:
- GRAPHQL_API_TOKEN에 필요한 권한:
- 대상 그룹/프로젝트에 대한 읽기 액세스
- 보안 대시보드 액세스
- SPLUNK_HEC_TOKEN에 필요한 권한:
- 대상 인덱스에 대한 이벤트 제출 권한
- GRAPHQL_API_TOKEN에 필요한 권한:
-
예약 빈도:
VULN_TIME_WINDOW에 맞게 예약 설정- 취약점 누락을 방지하기 위해 겹침 포함
- 조직의 SLA 고려
-
모니터링:
- 파이프라인 성공/실패 모니터링
- 내보낸 취약점 수 추적
- Splunk 수집 성공 모니터링
문제 해결#
일반적인 문제 및 해결 방법:
-
취약점이 내보내지지 않는 경우:
- SCOPE 설정 확인
- 토큰 권한 확인
- 보안 대시보드 액세스 확인
-
Splunk 수집 실패:
- HEC URL 및 토큰 확인
- 네트워크 연결 확인
- 인덱스 권한 확인
